MYSQL-主键外键约束

主键语法:

在创建表指定列数据类型时在后面加(可以结合AUTO_INCREMENT)

PRIMARY KEY

主键要短,可唯一标识记录,且永不改变。

外键语法:

第一个column_name是被指定外键的本表列名

table_name是主键的表名

第二个column_name是主键列名

FOREIGN KEY (column_name) REFERENCES table_name(column_name);

实例:

创建表:

CREATE TABLE student (
student_id INT AUTO_INCREMENT PRIMARY KEY,
student_name VARCHAR(20));

创建一个student表 以student_id为自增主键

CREATE TABLE score 
(score_id INT,
v INT,
FOREIGN KEY(score_id) REFERENCES student(student_id));

指定score_id为外键 并且和主键连接

插入主键数据

INSERT INTO student (student_name) VALUES ('zhangsan'),('lisi'),('wangwu');

然后我们尝试插入score表的数据

 

 插入score_id 为1的数据 成功了

 插入score_id为4的 失败了

这就是主外键约束,外键与主键关联后只能插入和主键相同的数据

选项

  1. CASCADE:
    瀑布/串联/级联,表示随着主键改变而改变,如主键某学生的 student_id 从1变成2,则该学生的所有注册课程记录的 student_id 也会全部变为2 (注意主键一般也最好是永远不要变的,这里讨论的是特殊情况)
  2. RESTRICT / NO ACTION:
    两者等效,作用都是禁止更改或删除主键。如:对于有过注册记录的课程,除非先删除该课程的注册购买记录,不然不能在 courses表 里删除该课程的信息
  3. SET NULL:
    就是当主键更改或删除时,使得相应的外键变为空,这样的子表记录就没有对应的主键和对应的父表记录了(no parent),被称为孤儿记录(orphan record),这是垃圾数据,让我们不知道是谁注册的课程或不知道注册的是什么课程,一般不用,只在极其特殊的情况可能有用。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值