-
约束保证数据的完整性和一致性。
-
-
约束类型包括:
-
NOT NULL(非空约束)
-
PRIMARY KEY(主键约束)
-
UNIQUE KEY(唯一约束)
-
DEFAULT(默认约束)
-
FOREIGN KEY(外键约束)
FOREIGN KEY
外键约束的作用:
-
保证数据一致性,完整性
-
实现一对一或一对多关系
1.外键约束的要求
-
父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
-
数据表的存储引擎只能是InnoDB
-
外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;字符的长度可以不同
-
外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL自动创建。
编辑修改数据表的默认存储引擎
MySQL配置文件
default-storage-engine=INNODB
搞清楚父表和子表
2.外键约束的参照操作
-
CASCADE:从父表删除或更新且自动删除或更新子表中的匹配
-
SET NULL:从父表中删除或更新行,并设置子表中的外键列为NULL。若使用该项,必须保证子表列没有指定为NOT NULL
-
RESTRICT:拒绝对父表的删除或更新操作
-
NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同
CASCADE:
==实际开发中很少使用物理外键约束,使用逻辑的外键约束==
3.表级约束与列级约束
对一个数据列建立的约束,称为列级约束。
对个数据列建立的约束,称为表级约束。
列级约束既可以在列定义时声明,也可以在列定义后声明。
表级约束,只能在列定义后声明。
==实际开发中列级约束用的较多,表级约束很少在用。==
(二)数据表的修改
数据表的修改无非就是列的删除和添加,约束的删除和添加等等。
1.添加删除列
添加单列
ALTER TABLE tbl_name ADD[COLUMN] col_name column_definition [FIRST | AFTER col_name]
默认放在所有列后面
可以指定顺序
添加多列
ALTER TABLE tbl_name ADD [COLUMN](col_name column_name,..)
无法指定数据字段的顺序
删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name
删除多列
2.添加约束
ALTER TABLE tbl_name ADD [CONSTEAINT [symbol]] PRIMARY KEY[index_type](index_col_name,...)
添加主键约束
添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type](index_col_name,...)
添加外键约束
添加/删除默认约束
ALTER TABLE tbl_name ALTER [COLOUMN] col_name {SET DEFAULT literal |DROP DEFAULT}
删除默认值
3.删除约束
删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY
删除唯一约束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
执行之前有3个约束
执行之后有两个约束
删除外键约束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
删除外键约束必须要知道外键名称
SHOW CREATE TABLE users2; ALTER TABLE users2 DROP FOREIGN KEY users2_ibfk_1;
4.修改列定义和更名数据表
修改列定义
ALTER TAble tbl_name MODIFY [COLUMN] col_name column_defination [FIRST|AFTER col_name]
ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;
ALTER TABLE users2 MODIFY id TINYINT UNSIGNED NOT NULL;
修改数据类型有时会引起数据表数据的丢失问题要慎用!
修改列名称
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;
数据表更名
方法1 ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name 方法2 RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2] ...
_
ALTER TABLE users2 RENAME users3;
RENAME TABLE users3 TO users2;
不要随意更改数据表和数据列的名字,存储过程禁用
总结