外部关键字
在以后我们统一将外部关键字叫做外键,外键就是另一张表中的主键。
问:外键有啥用啊?
答:外键的主要作用就是保持数据的一致性,完整性。
再问:怎么保证的呢?
答:看图。
如图有两张表,classId
是T_Student
的外键,是T_class
表的主键, 如果我们要删除T_class
表中classId
为1
的字段,程序是会报错的,因为t_student
表中有数据和classId
为1
的字段关联了,是不能删除的,这样子就保证了数据的一致性和完整性。
继续问:那怎么才能删除呢?
接着答:需要先删除T__student
表中classId
为1
的两个字段。
如何给表添加外部关键字
在MySQL
中给表中字段添加外键约束的语法规则如下:
CONSTRAINT 外键名 FOREIGN KEY 字段名 REFERENCES 主表名(主键名)
举个例子:现在有两张表,t_emp
、t_dept
如下。
t_dept表
t_emp表
我们来创建两张表,并给员工表(t_emp)
添加外键:
CREATE TABLE t_dept(deptId INT PRIMARY KEY,name VARCHAR(22),location VARCHAR(50));
CREATE TABLE t_emp(id INT PRIMARY KEY,name VARCHAR(22),deptId INT,CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES t_dept(deptId));
实际操作如图:
编程要求
创建两张表如下,给t_student
表添加外键约束,外键为classId
,外键名称为fk_stu_class1
。
表t_class
表t_student
mysql> create database MyDb-> ;Query OK, 1 row affected (0.01 sec)mysql> use MyDb;Database changedmysql> create table t_class(-> id int primary key,-> name varchar(22)-> );Query OK, 0 rows affected (0.00 sec)mysql> desc t_class;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int(11)| NO | PRI | NULL | || name | varchar(22) | YES || NULL | |+-------+-------------+------+-----+---------+-------
mysql> CREATE TABLE t_student(-> id int primary key,-> name varchar(22),-> classId int,-> CONSTRAINT fk_stu_class1 FOREIGN KEY(classId) REFERENCES t_class(id)-> );Query OK, 0 rows affected (0.01 sec)
在创建表之前你需要先创建数据库:MyDb
,并且将两张表创建在MyDb
数据库中