MySQL的外键约束

2019年5月16日 0 条评论 833 次阅读 0 人点赞

一、外键约束(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)、表级约束只能在列定义后声明

梁桂锋

来自西京学院大三的小开发者。

文章评论(0)