天天看点

MySQL学习笔记-查看表,修改表,删除表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

<code>/*看表*/</code>

<code>describe test </code><code>--查看表的结构</code>

<code>show </code><code>create</code> <code>table</code> <code>test </code><code>--查看表的创建语句</code>

<code>show </code><code>create</code> <code>table</code> <code>test  \G </code><code>--将创建的语句查询出来,并规范化显示(只在console下支持此命令,因为只有console下会错乱显示...)</code>

<code>/*改表*/</code>

<code>alter</code> <code>table</code> <code>test rename </code><code>to</code> <code>testo; </code><code>--将test改名为testo</code>

<code>alter</code> <code>table</code> <code>example0 rename </code><code>to</code> <code>user</code><code>;</code>

<code>select</code> <code>table_name </code><code>from</code> <code>information_schema.tables  </code><code>where</code> <code>table_schema = </code><code>'test'</code><code>--从整个系统中查询table_schema(数据库名)为test的所有表名(table_name)</code>

<code>---test消失,取而代之的是排在最后的是testo</code>

<code>describe </code><code>user</code><code>;</code><code>--先查看下原来user表Name属性的数据类型</code>

<code>alter</code> <code>table</code> <code>user</code> <code>modify</code> <code>name</code> <code>varchar</code><code>(30); </code><code>--将testo表的name属性改为varchar(30)的数据类型</code>

<code>describe </code><code>user</code><code>;</code><code>--验证一下,修改成功</code>

<code>----创建一个实验用表example1,补坑</code>

<code>create</code> <code>table</code> <code>example1(stu_id </code><code>int</code><code>(11) </code><code>not</code> <code>null</code> <code>primary</code> <code>key</code><code>,</code>

<code>  </code><code>stu_name </code><code>varchar</code><code>(20), </code><code>--不指定default值,默认就是default null</code>

<code>  </code><code>stu_sex tinyint(1)</code>

<code> </code><code>)</code>

<code>---修改表中字段的字段名与类型</code>

<code>use test;</code>

<code>describe example1</code><code>--先查看下原来exmaple表stu_sex属性的数据类型</code>

<code>alter</code> <code>table</code> <code>example1 change stu_sex sex tinyint(2);</code><code>--同时更改字段名和字段的数据类型</code>

<code>describe example1 </code><code>--验证一下,,Complete</code>

<code>---增加字段</code>

<code>alter</code> <code>table</code> <code>user</code> <code>add</code> <code>phone </code><code>varchar</code><code>(20);</code><code>--增加无约束的字段</code>

<code>describe </code><code>user</code> <code>--检查结果,ok</code>

<code>alter</code> <code>table</code> <code>user</code> <code>add</code> <code>age </code><code>int</code><code>(4) </code><code>NOT</code> <code>NULL</code> <code>--增加完整性约束的字段</code>

<code>/*增加字段时,如果能够加上完整性约束条件,一定要加上,可以保证此字段的安全性*/</code>

<code>alter</code> <code>table</code> <code>user</code> <code>add</code> <code>num </code><code>int</code><code>(8) </code><code>primary</code> <code>key</code> <code>first</code><code>--乖乖,这里出错了,之前自己抖机灵给Id定成主键了,现在无法增加num主键字段了。。</code>

<code>--先学习删除主键吧</code>

<code>alter</code> <code>table</code> <code>user</code> <code>drop</code> <code>primary</code> <code>key</code><code>--改动user表drop掉其primary key</code>

<code>--重新增加新的主键字段</code>

<code>alter</code> <code>table</code> <code>user</code> <code>add</code> <code>num </code><code>int</code><code>(8) </code><code>primary</code> <code>key</code><code>--报错,提示出现组合字段</code>

<code>--查看一下</code>

<code>describe </code><code>user</code> <code>--竟然没有drop掉主键。。‘一个表中,只可有一个自增字段,且那个字段必须被定位成主键’</code>

<code>--所以,先想法删除自增字段,貌似只能重新定义字段,但是在生产环境下怎么办、?先备份再insert into a  select * from b?</code>

<code>alter</code> <code>table</code> <code>user</code> <code>change id id </code><code>int</code><code>(11)</code>

<code>--再看一下</code>

<code>describe </code><code>user</code><code>--ok,去掉了自增属性</code>

<code>--现在尝试删主键</code>

<code>alter</code> <code>table</code> <code>user</code> <code>drop</code> <code>primary</code> <code>key</code><code>--ok,Command(s) completed successfully.</code>

<code>--重新尝试增加新的主键字段</code>

<code>alter</code> <code>table</code> <code>user</code> <code>add</code> <code>num </code><code>int</code><code>(8) </code><code>primary</code> <code>key</code> <code>--ok,Command(s) completed successfully. --后面忘记加first位置限定了</code>

<code>--检查一下</code>

<code>describe </code><code>user</code> <code>--num字段成功的加到了表中,但排到了最后一个字段...</code>

<code>alter</code> <code>table</code> <code>user</code> <code>add</code> <code>address </code><code>varchar</code><code>(30) </code><code>not</code> <code>null</code> <code>after</code> <code>phone </code><code>--在phone字段后面增加一个address字段</code>

<code>/*删除字段*/</code>

<code>alter</code> <code>table</code> <code>user</code> <code>drop</code> <code>id </code><code>--drop掉user表的Id字段</code>

<code>describe </code><code>user</code> <code>--没有了</code>

<code>/*修改字段的排列位置*/</code>

<code>alter</code> <code>table</code> <code>user</code> <code>modify</code> <code>num </code><code>int</code><code>(8) </code><code>first</code> <code>--先把之前的坑填上</code>

<code>describe </code><code>user</code> <code>--改得很不错,润物细无声</code>

<code>alter</code> <code>table</code> <code>user</code> <code>modify</code> <code>name</code> <code>varchar</code><code>(30) </code><code>first</code> 

<code>describe </code><code>user</code> <code>--恩,这个也改对了</code>

<code>/*修改字段到指定位置*/ /*注意,</code><code>modify</code><code>时把数据类型也附上*/</code>

<code>alter</code> <code>table</code> <code>user</code> <code>modify</code> <code>sex tinyint(1) </code><code>after</code> <code>age </code><code>--将user表的sex字段修改到age字段之后</code>

<code>--如果不加字段类型行不行?</code>

<code>describe sc </code><code>--找个临时表实验一下</code>

<code>alter</code> <code>table</code> <code>user</code> <code>modify</code> <code>grade </code><code>after</code> <code>sNo </code><code>--不行,看来数据类型起到隔断的作用。。。</code>

<code>/*修改存储引擎*/</code>

<code>show </code><code>create</code> <code>table</code> <code>user</code> <code>--修改之前先查看下创建语句是如何定义存储引擎的</code>

<code>--engine=InnoDB</code>

<code>alter</code> <code>table</code> <code>user</code> <code>engine = MyISAM</code><code>--更改存储引擎为myisam,Command(s) completed successfully.</code>

<code>--查看修改之后的创建语句</code>

<code>show </code><code>create</code> <code>table</code> <code>user</code> <code>--engine=MyISAM</code>

<code>/*删除外键约束*/</code>

<code>show </code><code>create</code> <code>table</code> <code>example3 </code><code>--先查找外键的名称,为'c_fk'</code>

<code>alter</code> <code>table</code> <code>example3 </code><code>drop</code> <code>foreign</code> <code>key</code> <code>c_fk </code><code>--无引号'',Command(s) completed successfully.</code>

<code>show </code><code>create</code> <code>table</code> <code>example3</code><code>--没有外键定义了</code>

<code>/*删除表*/</code>

<code>--删之前先确认下有没有</code>

<code>describe example5</code><code>--还真没有</code>

<code>--创建一个吧</code>

<code>create</code> <code>table</code> <code>example5(id </code><code>int</code><code>(11) </code><code>not</code> <code>null</code> <code>primary</code> <code>key</code><code>,</code>

<code>  </code><code>stu_id </code><code>int</code><code>(11) </code><code>default</code> <code>null</code> <code>unique</code><code>,</code><code>--如图,key列是UNI,是唯一性约束</code>

<code>  </code><code>name</code> <code>varchar</code><code>(20) </code>

<code>  </code><code>)</code>

<a href="http://s2.51cto.com/wyfs02/M01/7F/D4/wKioL1cvKTOjIyXNAAEUWXRKlPg361.png" target="_blank"></a>

<code>--删除表</code>

<code>drop</code> <code>table</code> <code>example5 </code><code>--Command(s) completed successfully.</code>

<code>--看看还有么有</code>

<code>describe example </code><code>--OK,不存在了ErrorMessage: Table 'test.example' doesn't exist </code>

<code>/*删除被外键依赖着的表*/</code>

<code>--先补坑</code>

<code>create</code> <code>table</code> <code>example4(id </code><code>int</code><code>(11) </code><code>primary</code> <code>key</code><code>,</code>

<code>  </code><code>name</code> <code>varchar</code><code>(20) </code><code>not</code> <code>null</code><code>,</code>

<code>  </code><code>stu_id </code><code>int</code><code>(11) </code><code>default</code> <code>null</code><code>,</code>

<code>  </code><code>constraint</code> <code>d_fk </code><code>foreign</code> <code>key</code><code>(stu_id) </code><code>references</code> <code>example1(stu_id)</code><code>--报错,此处的外键名称不应加''</code>

<code>  </code><code>) ENGINE = INNODB </code><code>default</code> <code>charset = utf8</code>

<code>--试试被删除的主表example1</code>

<code>drop</code> <code>table</code> <code>example1 </code><code>--报错,ErrorMessage: Cannot delete or update a parent row: a foreign key constraint fails</code>

<code>--先删除被关联的子表外键</code>

<code>alter</code> <code>table</code> <code>example4 </code><code>drop</code>  <code>foreign</code> <code>key</code> <code>d_fk</code><code>--Command(s) completed successfully.</code>

<code>--检查子表外键是否被删除</code>

<code>use test</code>

<code>show  </code><code>create</code> <code>table</code> <code>example4 </code><code>--外键定义语句被删除</code>

<code>--继续删除被依赖的主表</code>

<code>drop</code> <code>table</code> <code>example1 </code><code>--Command(s) completed successfully.</code>

<code>--查看是否被删除</code>

<code>describe example1</code><code>--OK,ErrorMessage: Table 'test.example1' doesn't exist</code>

 本文转自 angry_frog 51CTO博客,原文链接:http://blog.51cto.com/l0vesql/1771245