MySQL:简述MySQL外键约束

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29229567/article/details/86293678

MySQL:简述MySQL的外键约束

MySQL有两种常用的引擎类型:MyISAM和InnoDB。目前只有InnoDB引擎类型支持外键约束。

一、外键约束的含义:
      1. 外键约束对子表的含义:当在子表中insert或update一条数据时,如果在主表中找不到候选键,那么就不允许该操作。
      2. 外键约束对主表的含义:当在主表中insert或update数据时,如果主表的候选键对应的有子表的外键值,那么就不允许该操作。
  
二、外键约束的使用条件:
      1. 两张表必须都是InnoDB表,并且它们没有临时表。
      2. 建立外键关系的对应列必须具有相似的InnoDB内部数据类型。
      3. 建立外键关系的对应列必须建立了索引。
  
三、外键约束的动作:
      如果子表试图创建一个在父表中不存在的外键值,InnoDB会拒绝任何INSERT或UPDATE操作。
      如果父表试图UPDATE或者DELETE任何子表中存在或匹配的外键值,最终动作取决于外键约束定义中的ON UPDATE和ON DELETE选项。

      InnoDB支持5种不同的动作,如果没有指定ON DELETE或者ON UPDATE,默认的动作为RESTRICT:
       1. CASCADE: 从父表中删除或更新对应的行,同时自动的删除或更新自表中匹配的行。ON DELETE CANSCADE和ON UPDATE CANSCADE都被InnoDB所支持。
       2. SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。ON DELETE SET NULL和ON UPDATE SET SET NULL都被InnoDB所支持。
       3. NO ACTION: InnoDB拒绝删除或者更新父表。
       4. RESTRICT: 拒绝删除或者更新父表。指定RESTRICT(或者NO ACTION)和忽略ON DELETE或者ON UPDATE选项的效果是一样的。
       5. SET DEFAULT: InnoDB目前不支持。

       外键约束使用最多的两种情况无外乎:
           1)父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败。 此情况,在外键定义中,我们使用ON UPDATE CASCADE ON DELETE RESTRICT。
           2)父表更新时子表也更新,父表删除时子表匹配的项也删除。此情况,在外键定义中,我们使用ON UPDATE CASCADE ON DELETE CASCADE。

四、 外键约束的操作

       1. 外键约束的启动

SET FOREIGN_KEY_CHECKS = 1;

       2. 外键约束的禁用

SET FOREIGN_KEY_CHECKS = 0;

       3. 外键约束的创建
       创建外键约束有两种方式:可在创建表的时候直接创建外键约束;也可以创建完表后再添加外键约束。

create table table_name  (
	字段名1 字段属性1,
	字段名2 字段属性2,
	字段名3 字段属性3,
	[add constraint 外键name] foreign key (字段名) references 主表(主表主键名)
);

create table table_name  (
	字段名1 字段属性1,
	字段名2 字段属性2,
	字段名3 字段属性3
);
alter table table_name add constraint 外键name foreign key (字段名)  references 主表(主表主键名);

       4.外键约束的删除

alter table table_name drop  外键name;

猜你喜欢

转载自blog.csdn.net/qq_29229567/article/details/86293678