天天看点

关系数据库的三种外键

此处以Oracle为例

1、普通外键约束

ALTER TABLE USER_ROLE ADD CONSTRAINT FK_BS_USER_ROLE_USERID FOREIGN KEY(USERID) REFERENCES USER(USERID);
ALTER TABLE USER_ROLE ADD CONSTRAINT FK_BS_USER_ROLE_ROLEID FOREIGN KEY(ROLEID) REFERENCES ROLE(ID);
           

2、级联外键约束

ALTER TABLE USER_ROLE ADD CONSTRAINT FK_BS_USER_ROLE_USERID FOREIGN KEY(USERID) REFERENCES USER(USERID) ON DELETE CASCADE;
ALTER TABLE USER_ROLE ADD CONSTRAINT FK_BS_USER_ROLE_ROLEID FOREIGN KEY(ROLEID) REFERENCES ROLE(ID) ON DELETE CASCADE;
           

3、置空外键约束:

ALTER TABLE USER_ROLE ADD CONSTRAINT FK_BS_USER_ROLE_USERID FOREIGN KEY(USERID) REFERENCES USER(USERID) ON DELETE SET NULL;
ALTER TABLE USER_ROLE ADD CONSTRAINT FK_BS_USER_ROLE_ROLEID FOREIGN KEY(ROLEID) REFERENCES ROLE(ID) ON DELETE SET NULL;
           

上面分别是三种外键的创建语句

现在举个例子

现在有三张表USER,ROLE,USER_ROLE

分别对应用户表,角色表,用户角色关系表

普通外键:当用户角色表中存在用户表中的用户或者角色表中的角色时,无法删除用户表中的用户或角色表中的角色

级联外键:当用户角色表中存在用户表中的用户或者角色表中的角色时,删除用户表中的用户或角色表中的角色会同时删除以此用户或角色作为外键的用户角色关系

置空外键:当用户角色表中存在用户表中的用户或者角色表中的角色时,删除用户表中的用户或角色表中的角色会同时将用户角色关系中的值置空(此处可修改为其他默认值)

外话:之前给权限系统建表踩得坑,推荐使用级联外键,会减少很多代码开发量