理清mysql外链的含义和号令[MySQL防范]
本文“理清mysql外链的含义和号令[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
普通说到外键,只会提到“外键的目的是肯定资料的参考完好性(referential integrity).”,但是外键具体包含哪些行动和含义呢?
1、设置外链:
(1)、通过create table成立外键:
看2行代码,是建表中的号令:
create table city( ...... 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 ON Delete cascade )... |
注:ON update cascade ON Delete cascade级联更新和级联删除.
普通在设置外链时,城市先设置外链字段的索引,如上:key idx_fk_country_id (country_id),但这不是非必须的,上面代码中:
key idx_fk_country_id (country_id),
constraint fk_city_country
这些是可以省去的,直接从FOREIGN KEY开始.当然,假如要给外链命名,则constraint 是必必要的,
假如没有key idx_fk_country_id (country_id),这行时,在设置外链后,mysql会自动加上key索引(即尺度index索引).可以在建完表后用show create table city;来查看.
(2)、通过alter table成立外键:——注意号令中不是用 modify.而是add
ALTER TABLE city ADD INDEX idx_city(countryid);
ALTER TABLE city ADD CONSTRAINT fk_city_country FOREIGN KEY (countryid) REFERENCES country(country_id) ON DELETE CASCADE;
2、删除外键:
ALTER TABLE tbname DROP FOREIGN KEY fk_fkname;
但是假如定义时没有指定CONSTRAINT fk_fkname(即外键标记)时该怎么删除呢?别急,没有指按时,MySQL会自己成立一个,可以通过以下号令查看:SHOW CREATE TABLE tbname;然后再履行上面的号令.
3、外链的具体行动:
注意,on DELETE restrict和on DELETE cascade不能同时定义
默许行动1:
当增添子表中外键值时,假如父表主键不存在该值时,则禁止插入.
默许行动2:
当主表删除某记录时,假如子表有对应当录的内容时,禁止删除
因此,上面的可以on DELETE restrict略去.
非默许行动——级联更新:
当父表更新主键时,假如子表有对应记录,则自动更新子表,这一行动用ON update cascade来实现.
非默许行动——级联删除:
当父表更新主键时,假如子表有对应记录,则自动更新子表,这一行动用ON Delete cascade来实现.
4、外键的别的参数:
a、set null : 表示父表在更新或删除时,子表对应的字段被set null.
b、no action : 和restrict相同,限制在子表有关联记录的情形下父表不能更新.
5、暂时关闭外键查抄:
常用于:
A、导入多个表数据时,需求忽视之前表的导入次序,
B、履行LOAD DATA和ALTER TABLE操作时.
号令:
set foreign_key_checks=0
完成之后,重新开启外键查抄用set foreign_key_checks=1;来恢复
以上是“理清mysql外链的含义和号令[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:本文地址: | 与您的QQ/BBS好友分享! |