主键语法:
在创建表指定列数据类型时在后面加(可以结合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的 失败了
这就是主外键约束,外键与主键关联后只能插入和主键相同的数据
选项
- CASCADE:
瀑布/串联/级联,表示随着主键改变而改变,如主键某学生的 student_id 从1变成2,则该学生的所有注册课程记录的 student_id 也会全部变为2 (注意主键一般也最好是永远不要变的,这里讨论的是特殊情况) - RESTRICT / NO ACTION:
两者等效,作用都是禁止更改或删除主键。如:对于有过注册记录的课程,除非先删除该课程的注册购买记录,不然不能在 courses表 里删除该课程的信息 - SET NULL:
就是当主键更改或删除时,使得相应的外键变为空,这样的子表记录就没有对应的主键和对应的父表记录了(no parent),被称为孤儿记录(orphan record),这是垃圾数据,让我们不知道是谁注册的课程或不知道注册的是什么课程,一般不用,只在极其特殊的情况可能有用。