如何在 SQL 中强制执行同一表格列上的外键约束,同时输入以下表格中的值:
employee:
- empid number,
- manager number(必须是现有的员工)
如何在 SQL 中强制执行同一表格列上的外键约束,同时输入以下表格中的值:
employee:
Oracle称之为自引用完整性约束。具体文档说明请参考此处。
你可以像创建普通约束一样创建自引用约束:
alter table employees
add constraint employees_emp_man_fk
foreign key ( manager_no )
references employees ( emp_id )
on delete set null
;
我假设你的 manager_no
可为空。我在这里添加了设置为 null,因为使用 delete cascade
会清空大量表格数据。create table employees
( emp_id number
, other_columns ...
, manager_no number
, constraint employees_pk
primary key (emp_id)
, constraint employees_man_emp_fk
foreign key ( manager_no )
references employees ( emp_id )
on delete set null
);
编辑:
回复@popstack的评论:
虽然你可以在一个语句中完成这个操作,但不能够修改表是一个相当荒谬的情况。你应该绝对分析一个你要选择的表,并且你仍然需要在外键上建立索引(可能是更多的列和/或索引),否则每次使用外键时都会进行完整的表扫描。参见我上面提到的asktom链接。
如果你无法修改表,那么按重要性递减的顺序应该:
Alter table table_name ADD constraints constraints_name foreign key(column_name1,column_name2..) references table_name(column_name1,column_name2...) ON DELETE CASCADE;
例子- ALTER TABLE 员工 ADD CONSTRAINTS Fr_key( 管理员编号) references 员工(员工编号) ON DELETE CASCADE;
CREATE TABLE TABLE_NAME (
`empid_number` int ( 11) NOT NULL auto_increment,
`employee` varchar ( 100) NOT NULL ,
`manager_number` int ( 11) NOT NULL ,
PRIMARY KEY (`empid_number`),
CONSTRAINT `manager_references_employee`
FOREIGN KEY (`manager_number`) REFERENCES (`empid_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
希望能对你有所帮助!
ON DELETE
子句,它的功能类似于其他关系型数据库管理系统中的ON DELETE RESTRICT
子句,防止删除具有子记录的父记录。 - Adam MuschON DELETE CASCADE
或ON DELETE SET NULL
,它将阻止您删除父项,从而通过抛出ORA-02292
来防止非明显的孤立记录。 - Adam Musch