外键约束
保证数据的一致性、完整性,实现一对一与一对多的关系
外键约束的要求(4个)
- 父表与子表必须使用相同的存储引擎,禁止使用临时表
- 数据表的存储引擎只能为innoDB(default-storage-engine = INNODB)
- 外键列与参照列须具有相似的数据类型,其中数字的长度与是否有符号位必须相同,字符的长度则可以不同。
- 外键列与参照列必须创建索引,如果外键列不存在索引的话,Mysql将自动创建索引。
例子:foreign key (uid)reference user(id);
外键约束的参照操作
1、cascate:从父表删除或者更新时,自动删除或更新子表中匹配的行
2、set null:从父表删除或更新行,同时设置子表中的外键列为null。如果使用该选项,必须保证子表列没有指定NOT NULL
3、restrict:拒绝对父表的删除或更新操作
4、no action:标准SQL的关键字,在MYSQL中与restrict相同
表级约束与列级约束
列级约束既可以在列定义的时候声明,也可以在列定义后声明(如主键),表级约束只能在列定义后声明
修改数据表
- 添加单列:
ALTER TABLE tb_mame ADD [COLUMN] col_name column_definition[FIRST | AFTER col_name]
- 添加多列
ALTER TABLE tb_name ADD [COLUMN] (col_name column_definition,...)
- 删除列
ALTER TABLE tb_name DROP [COLUMN] (col_name,...)
修改数据表–添加约束
- 添加主键约束
ALTER TABLE tb_name ADD [CONSTRAINT[symbol:约束的名字]] PRIMARY KEY [index_type(哈希索引,btree索引)]
(index_col_name,…)
- 添加唯一约束
ALTER TABLE tb_name ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY][index_name] [index_tupe](index_col_name,...)
例子:ALTER TABLE user ADD UNIQUE (username);
- 添加外键约束
ALTER TABLE tb_name ADD[CONSTRAINT[symbol]] FOREIGN KEY [index_name](index_col_name,...)reference_definition
- 添加或删除默认约束
ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT LITERAL|DROP DEFAULT}
修改数据表-删除约束
-删除主键约束
ALTER TABLE tb_name DROP PRIMARY KEY
-删除唯一约束
ALTER TABKE tb_name DROP {INDEX|KEY} index_name
(一张表可以有多个唯一约束)
-删除外键约束
ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol
修改数据表-修改列定义和更名数据表
- 修改列定义
ALTER TABLE tb_name MODIFY[COLUMN] col_name column_definition [FIRST|AFTER col_name]
- 修改列名称
ALTER TABLE tb_name CHANGE [COLUMN]old_col_name new_col_name columb_definition[FIRST|AFTER col_name]
- 数据表更名
1.ALTER TABLE tb_name RENAME [TO|AS] new_tb_name
2.RENAME TABLE tb_name TO new_tb_name[,tb_name2 TO new_tb_name2]...