mysql 外键使用时候注意,几点

一、如果一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。

  一张表中可以有多个外键。

  外键的默认作用有两点:

  1.对子表(外键所在的表)的作用:子表在进行写操作的时候,如果外键字段在父表中找不到对应的匹配,操作就会失败。

  2.对父表的作用:对父表的主键字段进行删和改时,如果对应的主键在子表中被引用,操作就会失败。

  外键的定制作用----三种约束模式:

    district:严格模式(默认), 父表不能删除或更新一个被子表引用的记录。

    cascade:级联模式, 父表操作后,子表关联的数据也跟着一起操作。

    set null:置空模式,前提外键字段允许为NLL,  父表操作后,子表对应的字段被置空。

  使用外键的前提:

  1. 表储存引擎必须是innodb,否则创建的外键无约束效果。

  2. 外键的列类型必须与父表的主键类型完全一致。

  3. 外键的名字不能重复。

  4. 已经存在数据的字段被设为外键时,必须保证字段中的数据与父表的主键数据对应起来。

二、新增外键

  1. 在创建时增加

   create table my_tab1(

   id int primary key auto_increment,

   name varchar(10) not null,

   class int,

   foreign key(class) references my_tab2(主键字段名);

   )charset utf8;

  2. 在创建好的表中增加

   alter table my_tab1 add [constraint 外键名] foreign key(外键字段名) references mytab2(主键字段名);

三、删除外键

  alter table my_tab drop foreign key 外键名字;

-- mysql中的主外键关联 ,如果没有主外键关联,
-- 表中的数据可以随意添加,就如学生表和成绩表一样
-- 学生表可以随意添加学生信息,成绩表中也可以随意添加
-- 但是添加后有可能学生表没有学生信息,但成绩表却出现了成绩信息,学生表中
-- 没有学生,哪来的学生成绩那?这不是扯淡嘛!添加主外键关联后
-- 学生表的主键ID 作为成绩表的 外键,如果学生表中没有学生信息,那么
-- 成绩表中也不能随意添加了,只有学生表有的学生,成绩表中才有学生的成绩.与此同时,
-- 学生表可以随意添加,成绩表中可以没有这个添加的学生成绩,可以理解为学生缺考了

猜你喜欢

转载自blog.csdn.net/qq_39822451/article/details/85700044
今日推荐