如果插入的值已经在另一个表中,如何使用CHECK(或TRIGGER?)创建表?
示例
CREATE TABLE Employee(
Name VARCHAR(10),
Adress VARCHAR(20)
);
CREATE TABLE Section(
Section_name VARCHAR(10),
Managers_name VARCHAR(10)
);
我想检查一下,插入到Managers_name的值已经在Employee中了,如果不是,那么打印错误。
我找到了任何方法,如何做到这一点,但我在Oracle中尝试的一切都没有奏效。
将PRIMARY KEY
约束添加到员工表,将FOREIGN KEY
约束添加到部门表:
CREATE TABLE Employee(
Name VARCHAR(10) CONSTRAINT Employee_Name_PK PRIMARY KEY,
Adress VARCHAR(20)
);
CREATE TABLE Section(
Section_name VARCHAR(10),
Managers_name VARCHAR(10)
CONSTRAINT section_manager_fk REFERENCES Employee( Name )
);
Check约束,正如mt0所解释的,专门用于单个表。出于一致性原因,应避免触发:当您选择记录时,另一个会话可能正在删除它
外键是实现它的正确方法:在代码中捕获FK约束冲突(我想是ORA-02291),在消息中搜索"section_manager_FK",最后重写一条用户友好的错误消息。