MySQL的外键约束
一、外键约束(FOREIGN KEY)
外键约束的功能:
1)、保持数据一致性,完整性
2)、实现一对一或一对多关系
外键约束的要求:
1)、父表和字表必须使用相同的存储引擎,而且禁止使用临时表
2)、数据表的存储引擎只能为InnoDB
3)、外键列和参照咧必须具有相似的数据类型,其中数字的长度或是否有符号位必须相同;而字符的长度可以不同
4)、外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引
二、查看数据表存储引擎
SHOW CREATE TABLE provinces;
三、创建外键约束表
表一:
CREATE TABLE provinces(
//id,SMALLINT类型,无符号,主键,自动增长
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
//地区名,VARCHAR类型20个字符限制,不为空
pname VARCHAR(20) NOT NULL
);
表二:
CREATE TABLE users(
//id,SMALLINT类型,无符号,主键,自动增长
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
//用户名,VARCHAR类型10个字符限制,不为空
username VARCHAR(10) NOT NULL,
//地区id(和地区表关联,外键),SMALLINT类型,无符号
pid SMALLINT UNSIGNED,
//外键,当前表的pid关联到provinces表中的id
FOREIGN KEY (pid) REFERENCES provinces (id)
);
四、外键约束的参照操作
1)、CASCADE:从父表删除或更新且自动删除或更新字表中匹配的行(也就是当从父表中删除纪录,那么字表中的纪录也会被删除)
2)、SET NULL:从父表删除或更新行,并设置字表中的外键列为NULL。如果使用该选项,必须保证子列表没有指定NOT NULL(也就是说从父表删除纪录,字表中的数据变为空值,前提是字表不能设置为不为空)
3)、RESTRICT:拒绝对父表的删除或更新操作
4)、NO ACTION:标准的SQL的关键字,在MySQL中与RESTRICT相同
五、表级约束和列级约束
1)、对一个数据列建立的约束,称为列级约束
2)、对多个数据列建立的约束,称为表级约束
3)、列级约束既可以在定义的时候声明,也可以在列定义后声明
4)、表级约束只能在列定义后声明
正文到此结束