Innodb引擎的外键约束

外键约束
MySQL 支持外键的存储引擎只有 InnoDB, 在创建外键的时候, 要求父表必须有对应的
索引 , 子表在创建外键的时候也会自动创建对应的索引 。

下面是样例数据库中的两个表, country 表是父表, country_id 为主键索引 , city 表是子
表, country_id 字段对 country 表的 country_id 有外键。

CREATE TABLE country (
country_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
country VARCHAR(50) NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (country_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE city (
city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
city VARCHAR(50) NOT NULL,
country_id SMALLINT UNSIGNED NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (city_id),    ---主键
KEY idx_fk_country_id (country_id),  ---索引
CONSTRAINT `fk_city_country` FOREIGN KEY (country_id) REFERENCES country (country_id)   ---外键
ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

在创建索引的时候, 可以指定在删除、 更新父表时, 对子表进行的相应操作, 包 RESTRICT、CASCADE、 SET NULL 和 NO ACTION。
RESTRICT 和 NO ACTION 相同, 是指限制在子表有关联记录的情况下父表不能更新;
CASCADE 表示父表在更新或者删除时, 更新或者删除子表对应记录;
SET NULL 则表示父表在更新或者删除的时候, 子表的对应字段被 SET NULL。
选择后两种方式的时候要谨慎, 可能会因为错误的操作导致数据的丢失。
       例如对上面创建的两个表, 子表的外键指定是 ON DELETE RESTRICT ON UPDATE CASCADE方式的, 那么在主表删除记录的时候, 如果子表有对应记录, 则不允许删除, 主表在更新记录的时候, 如果子表有对应记录, 则子表对应更新:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-1466051/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29096438/viewspace-1466051/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值