全国咨询/投诉热线:400-618-4000

JAVA培训之外键约束

更新时间:2016年10月19日17时24分 来源:传智播客JAVA培训学院 浏览次数:

外键约束
外键是构成表与表关联的唯一途径。一个表的外键引用另一个表或自身表的主键,外键所在的表称为从表,外键引用的表称为主表。
创建外键有以下两个途径:
  • 在创建表的时候指定某个列为外键列;
  • 在修改表的时候添加某个列为外键列。
外键有以下特性:
  • 外键必须是另一表或自身表的主键的值;
  • 外键可以重复;
  • 外键可以为空;
  • 一张表中可以有多个外键。

1.创建表时指定外键列

(1)外键的关键词是FOREIGN KEY,创建一个数据库exam,然后在该数据库中先创建一个部门表dept,然后再创建一个员工表emp,如图1-1所示:
图1-1 创建数据库与表
图1-1中,建立外键的语句如下:
  • CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键)
创建emp表的sql语句如下:
CREATE TABLE emp(
empno INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(50),
deptno INT ,
CONSTRAINT fk_emp_dept FOREIGN KEY(deptno) REFERENCES dept(deptno)
语句中,外键列名deptno是指emp表中外键的名称,关联表是dept,关联表的主键名为deptno,与外键名称相同,也可以不同。需要注意的是emp表中引用了dept表的主键,因此创建表时要先创建dept表,再创建emp表,否则会出错。
(2)向dept表中插入记录,如图1-2所示:

图1-2 dept表记录
(3)emp表的主键是自增长的,因此向emp表中插入记录时可以不用指定主键值,如图1-3所示:

图1-3 向emp表中插入记录
图1-3中,插入的记录没有提供外键的值,外键的值为null,表明了外键可以为null。
(4)向emp表中插入外键值相同的两条记录,如图1-4所示:

图1-4 插入外键值相同的记录
图1-4中,张三和李四的部门号相同,表明了外键是可以重复的。
(5)向emp表中插入一条记录,该记录的部门号在部门表中并不存在,如图1-5所示:

图1-5 插入不存在的外键值
图1-5中,当插入的记录的外键值没有引用dept表中的主键时,插入失败,因此,外键值如果不为空,那么一定要是主表的主键中的任意一个。

2.修改表是指定外键列

修改表时添加外键列的语句如下:
  • ALERT TABLE 表名

 ADD CONSTRAINT 约束名称 FOREIGN KEY(外键列名) REFERENCES 关联表(关联表的主键);
(1)将emp表删除,重新创建一个emp表,如图1-6所示:

图1-6 创建无外键的emp表
(2)为emp表添加外键,如图1-7所示:

图1-7 为表添加外键约束
(3)向emp表中添加一条记录,如图1-8所示:

图1-8  插入记录
图1-8中,插入一条记录,该记录的外键值为50,而dept表的主键值不存在这个值,因此违反了外键约束,所以插入失败,表明修改表时添加外键约束成功。

本文版权归传智播客java学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客java学院

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额