java-数据库――外键约束

匿名 (未验证) 提交于 2019-12-02 21:53:52
外键约束
是很常用的一种保证数据完整性的约束
具体表现是: 在从表中保存主表的主键
先有的是主表 后有的是从表



实例

创建 部门表

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);
能不加尽量不加外键 有外键 会降低一些性能



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!