外键约束
是很常用的一种保证数据完整性的约束
具体表现是: 在从表中保存主表的主键
先有的是主表 后有的是从表
实例
创建员工表emp 编号 姓名 性别 部门编号
此时两个表之间没有任何联系
通常情况 只有存在响应的部门才能在部门中添加员工
一个部门被解散了 那么下面的员工应该更换部门或辞退
也就是说 我们希望两个表之间有一个参照 来保证数据完整
这时候 外键约束闪亮登场
给已经创建的表添加外键约束
alter table emp add foreign key(dept_id) references dept(dept_id);
此时代表emp表中的dept_id 字段参照着dept表中的dept_id
1.如果从表中有数据参照着主表的某个主键
后删除该主键
2.如果在从表中插入一个新的数据 那么 这个新数据的外键的值必须已经存在于主表中
级联操作的作用
当主表发生update 或 delete 事件时 从表也相应的删除或更新
相应的动作有一下几种
4.RESTRICT 拒绝主表的删除和更新操作
例:
当部门被删除时 将对应的员工一并删除
当部门编号更新时 将对应的员工一并更新
是很常用的一种保证数据完整性的约束
具体表现是: 在从表中保存主表的主键
先有的是主表 后有的是从表
实例
创建 部门表
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 事件时 从表也相应的删除或更新
相应的动作有一下几种
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);能不加尽量不加外键 有外键 会降低一些性能
文章来源: java-数据库――外键约束