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为外键 并且和主键连接

扫描二维码关注公众号,回复: 15747947 查看本文章

插入主键数据

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),这是垃圾数据,让我们不知道是谁注册的课程或不知道注册的是什么课程,一般不用,只在极其特殊的情况可能有用。

猜你喜欢

转载自blog.csdn.net/chara9885/article/details/131500941