mysql 外键约束

首先我们先建两个测试表

先建立主表

CREATE  TABLE   my_class(
     id  INT  PRIMARY KEY  ,  -- 主键
     `name` VARCHAR(32) NOT NULL DEFAULT ''
     );
  


  在建立从表

CREATE TABLE my_stu (
     id  INT PRIMARY KEY ,  --  学生编号
     `name` VARCHAR(32) NOT NULL DEFAULT  '',
      class_id INT,    --  如果(外键)这里设置了非空的话不行
     --  下面指定外键关系
     
    FOREIGN KEY (class_id)  REFERENCES my_class(id)
)  

先记录一下外键的定义:

1.外键用于 定义主表和从表之间的关系:外键约束要定义在从表之上,

 从表

 发现从表有个字段(class_id),这个字段就是建立外键关系的‘钥匙了’,

实际上就从表上有个class_id这个字段 里面的值指向主表中某个字段(id字段)的值,

也就是外键表中的  每个学生所在的班级号 class_id(其中的值)就是(主表) 班级表中的班级编码id的值 

先记录一下建立外键关系的必要条件吧:

 外键字段的值,必须在主键字段中出现过,(比如图中的class_id的字段值为300在主表中id这个字段中出现过)

或者为null    [前提是外键字段允许为null]

 

 

 

一旦从表与主表建立外键关系,想要删除主表的某条信息,先要删除外键所在的表的记录(从表),

再删除主表的那条记录

ps:这里直接删除主表中的一条记录,由于主表中的id这个字段与从表的class_id这个字段建立的外键关系所以删除不了

正确做法:

先删除外键所在表的那条记录(从表中的id)记录,

 

class_id=300的那条记录没有了

再来删除主表(班级表中的记录)发现可以了      

 

原因: 从表中 外键那个 字段的值的记录    在主表中没有关联了

也就是,从表外键的值class_id字段=???   与  主表中id=???这个字段值没有了关系

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值