MySQL基础三之约束以及修改数据表

时间:2022-09-21 13:08:32


1.约束

1.1.完成对数据的检验,保持数据的一致性和完整性。

1.2.表级的约束和列级约束(针对字段的个数分类)

1.3.功能分类:非空约束(NOT NULL)、主键约束(PRIMARY KEY)、唯一约束(UNIQUE KEY)、默认约束(DEFAULT)、外键约束(FOREIGN KEY)。

1.4.外键约束:保持数据的一致性和完整性,实现一对一或者一对多的关系。

1.4.1.父表和子表有相同的存储引擎,且禁止使用临时表

1.4.2.存储引擎只能为InnoDB

1.4.3.外键列和参照列必须有相似的数据类型,其中数字的长度或有符号位必须相同;而字符的长度可以不通。

1.4.4.外建列和参照列必须有索引,如果外建不存在索引,4.1.2版本之前MySQL不会自动创建索引但是之后会自动建立索引,参照列没有的话MySQL会自动创建(一般参照列为主键会自动创建索引)。

1.4.5.查看索引:SHOW  INDEXS  FROM table_name

1.4.6.配置默认引擎:在my.ini文件中找到default-storage-engine= INNODB

1.4.7.外建约束的建立

1ALTER  TABLE  table_name  ADD [CONSTRAINT [symbol]]  FOREIGN  KEY  [index_type]  (index_col_name,)   REFERENCES   table_name (index_col_name,)

[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

1.4.8.外建关键字说明

1)ON DELETEON UPDATE表示事件触发限制,可设参数

2)CASCADE(跟随外键改动):父表删除或者更新自动删除或更新字表

3)SET NULL(设空值):父表删除或者更新,并设置字表外键列为NULL,前提是外建列未设置为NOT NULL

4)RESTRICT(限制外表中的外键改动):拒绝对父表的删除和更新

5)NO ACTION(无动作,默认的):标准SQL关键字

6)字表和父表的区分:当给A表引用B表的某个字段作为外建,那么B就是A的父表,AB的子表。

7)很少物理的外键约束,一般用逻辑的外键约束(在定义表结构时候按照外键约束的逻辑去设置,但是不设置真正外建)。

1.5.表级和列级约束:按约束列的的个数多少区分,表级约束只有在列定义以后声明(很少用).

2.添加约束

2.1.添加主键约束(只能一个):ALTER  TABLE  table_name  ADD [CONSTRAINT [symbol]]  PEIMARY  KEY  [index_type]  (index_col_name) 

2.1.1.symbol:主键的名字

2.1.2.index_type:索引的类型,默认为btree索引,还有hash索引。

2.1.3.index_col_name:约束的字段比如:id。

2.2.添加唯一性约束(可以多个):ALTER  TABLE  table_name  ADD[CONSTRAINT [symbol]] UINQUE  [INDEX|KEY]  [index_type]  (index_col_name,...) 

2.3.添加外键约束:ALTER  TABLE  table_name  ADD  FOREIGN  KEY  [index_type]  (外键index_col_name)  REFERENCES  table_name1(主键index_col_name

3.删约束

3.1.删除主键约束:ALTER  TABLE  table_name  DROP  PEIMARY KEY

3.2.删除唯一约束(一张表可以有多个唯一约束):ALTER  TABLE  table_name  DROP  {INDEX|KEY}  index_name

3.3.删除外键约束(通过SHOW CREATE TABLE table_name查看外键约束的名字)ALTER  TABLE  table_name  DROP  FOREIGN  KEY  fk_symbol

4.修改数据库

4.1.添加列(添加多列的时候不能指定位置):ALTER  TABLE  table_name  ADD  col_name  column_definition  [FIRST|AFTER col_name]

4.2.删除列:ALTER  TABLE  table_name  DROP  col_name

4.3.修改列定义:ALTER  TABLE  table_name  MODIFY  col_name  column_definition [FIRST|AFTER col_name]

4.4.修改列名称:ALTER  TABLE  table_name CHANGE  old_col_name  new_col_name  column_definition [FIRST|AFTER col_name]

4.5.修改表名

1)ALTER  TABLE  table_name  RENAME  [AS|TO]  new_table_name

2)RENAME  table_name  TO  new_talbe_name  [,table_name1  TO  new_table_name1,......]

5.总结

MySQL基础三之约束以及修改数据表