java-数据库——外键约束

外键约束
是很常用的一种保证数据完整性的约束
具体表现是: 在从表中保存主表的主键
先有的是主表 后有的是从表
比如 部门和员工 


实例

创建 部门表

create table dept (
dept_id int primary key auto_increment,
dept_name char(10),
dept_manager char(10)
);


insert into dept values
(null,"财务部","张有钱"),
(null,"行政部","王大力"),
(null,"市场部","牛大迈");

创建员工表emp 编号 姓名 性别 部门编号
CREATE table emp(
emp_id int primary key auto_increment,
emp_name char(10),
emp_gender char(1),
dept_id int
);


insert into emp values
(null,"老王","男",1),
(null,"老李","男",2),
(null,"老菜","男",3);


insert into emp values
(null,"小王","女",1),
(null,"小李","女",2),
(null,"小菜","女",1);

此时两个表之间没有任何联系
通常情况 只有存在响应的部门才能在部门中添加员工


一个部门被解散了 那么下面的员工应该更换部门或辞退


也就是说 我们希望两个表之间有一个参照 来保证数据完整
这时候 外键约束闪亮登场


给已经创建的表添加外键约束
alter table emp add foreign key(dept_id) references dept(dept_id);
此时代表emp表中的dept_id 字段参照着dept表中的dept_id


1.如果从表中有数据参照着主表的某个主键
那么这个主键对应数据 将不能直接删除 
如果一定要删 先把从表对应的数据删除 
后删除该主键


2.如果在从表中插入一个新的数据 那么 这个新数据的外键的值必须已经存在于主表中


当主键设置了自动增长时  就算插入语句执行失败了  主键也会增长




级联操作的作用
当主表发生update 或 delete 事件时 从表也相应的删除或更新


相应的动作有一下几种
1.CASCADE   同步更新或删除
2.NO ACTION  不允许执行更新或删除
3.SET NULL  当主表中某个主键被删除时  从表中将外键设为NULL
4.RESTRICT 拒绝主表的删除和更新操作




例:
当部门被删除时 将对应的员工一并删除
当部门编号更新时 将对应的员工一并更新
CREATE table emp(
emp_id int primary key auto_increment,
emp_name char(10),
emp_gender char(1),
dept_id int
);


insert into emp values
(null,"老王","男",1),
(null,"老李","男",2),
(null,"老菜","男",3);


insert into emp values
(null,"小王","女",1),
(null,"小李","女",2),
(null,"小菜","女",1);
能不加尽量不加外键 有外键 会降低一些性能



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值