MySql学习笔记之约束及修改数据表
外键约束的要求
- 父表和子表必须使用相同的存储引擎,禁止使用临时表。
- 数据表的存储引擎只能为innodb。
- 外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同。
- 外键列和参照列必须创建索引,如果外键列不存在索引,MySQ将自动创建索引。
比如 FOREIGN KEY(pid) REFERENCES provinces (id) ,provinces为父表,id为参照列,pid为外键列,参照列有索引(因为id被设为主键),外键列有两个索引,分别是id和系统为pid自动创建的索引。命令:show indexes from provinces\G;
外键约束的参照操作
- CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。
- SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL,如果使用该选项,必须保证子表列没有指定NOT NULL。
- RESTRICT:拒绝对父表的删除或更新操作。
- NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
当信息未写入成功(报错),id还是加1。
表级约束和列级约束
- 对一个数据列建立的约束,称为列级约束。
- 对多个数据列建立的约束,称为表级约束。
- 列级约束既可以在列定义时声明,也可以在列定义后声明,表级约束只能在列定义后声明。
修改数据表
- 添加单列可以指定first、after,多列不行