MySQL的MyISAM数据库引擎(默认的)不支持使用外键约束。
MySQL的InnoDB数据库引擎支持使用外键约束。
SQL的约束(主要是以下几种):
NOT NULL 约束强制列不接受 NULL 值。
UNIQUE 约束唯一标识数据库表中的每条记录。但每个表可以有多个 UNIQUE 约束,而 PRIMARY KEY 约束每个表只能有一个。
PRIMARY KEY 约束唯一标识数据库表中的每条记录。每个表都应该有一个主键,并且每个表只能有一个主键。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
CHECK 约束用于限制列中的值的范围。
DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
外键约束的方式:
CASCADE: 从父表删除或更新行,并且自动删除或更新子表中匹配的行。ON DELETE CASCADE 和 ON UPDATE CASCADE 都可用。
SET NULL: 从父表删除或更新行,并设置子表中的外键列为 NULL 。如果外键列没有指定 NOT NULL 限定词,这就是唯一合法的。ON DELETE SET NULL 和 ON UPDATE SET NULL 子句被支持。
NO ACTION: 在ANSI SQL-92标准中,NO ACTION 意味着不采取动作,就是如果有一个相关的外键值在被参考的表里,删除或更新主要键值的企图不被允许进行。InnoDB拒绝对父表的删除或更新操作。
RESTRICT: 拒绝对父表的删除或更新操作。NO ACTION 和 RESTRICT 都一样(一些数据库系统有延期检查,并且 NO ACTION 是一个延期检查。在MySQL中,外键约束是被立即检查的,所以 NO ACTION 和 RESTRICT 是同样的),指定 RESTRICT(或者 NO ACTION )和忽略 ON DELETE 或者 ON UPDATE 选项的效果也是一样的。
SET DEFAULT: 这个动作被解析程序识别,但InnoDB拒绝包含 ON DELETE SET DEFAULT 或 ON UPDATE SET DEFAULT 子句的表定义。
补充:
主表( = 参考表 = 父表):在数据库中建立的表格即Table,其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识。
从表( = 被参考表 = 子表):以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进行关联查询。从表与主表通过外键进行关联查询。
阅读(169) | 评论(0) | 转发(0) |