2015-09-24 32 views
0

我正在关注此数据库类的book。该数据库有6个表格。从他们中的6位我将发布两个表。如何在MySQL数据库中存在关系约束时插入数据

/*EMPLOYEE Table */ 
CREATE TABLE EMPLOYEE( 
    Fname VARCHAR(15) NOT NULL, 
    Minit CHAR, 
    Lname VARCHAR(15) NOT NULL, 
    Ssn CHAR(9) NOT NULL, 
    Bdate DATE, 
    Address VARCHAR(30), 
    Sex CHAR, 
    Salary DECIMAL(10,2), 
    Super_ssn CHAR(9), 
    Dno INT NOT NULL, 
    PRIMARY KEY (Ssn), 
    FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn) 
    FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber)); 

员工表具有递归关系来演示“员工是另一员工的主管”。它还引用DEPARTMENT表来显示员工在部门工作。以下是DEPARTMENT表的模式。

CREATE TABLE DEPARTMENT( 
    Dname VARCHAR(15) NOT NULL, 
    Dnumber INT NOT NULL, 
    Mgr_ssn CHAR(9) NOT NULL, 
    Mgr_start_date DATE, 
    PRIMARY KEY (Dnumber), 
    UNIQUE (Dname), 
    FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn) 
    ); 

DEPARTMENT表引用员工表来显示员工管理部门。 插入时的数据,如

insert into EMPLOYEE values 
    ('John','B','Smith','123456789','1965-01-09','731 Fondren, Houston, TX', 
    'M',30000,'333445555',5); 

我们将无法执行上述查询,但由于是参照完整性FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)。同样如果我尝试下面的查询

insert into department values ('Research',5,'333445555','1988-05-22'); 

上面的查询不会执行,因为员工表中没有数据。我的问题是我们应该先插入数据,然后改变表格并强制引用完整性约束。或者有办法解决。您的建议/意见将不胜感激。谢谢。

+1

它不需要像放下约束一样激烈。只要允许该列为空。 – e4c5

回答

2

外键可以有空值。因此,您可以输入将具有外键值的值,如最高级主管,他的主管不会超过他。

所以总体思路是输入数据自下而上,就像在一个没有外键,然后输入在它上面的值引用该表,所以在表中输入值...

确切的方法将取决于您在示例中使用的其余表格。

+0

谢谢@Ankit Deshpande。这篇文章我读并不真正支持具有空值的外键。刚刚有点困惑。尽管感谢您的回复。 – karma

+0

我同意你的意见。但是,如果员工实际上没有上司,会发生什么? –

+0

明白了你的观点@Ankit Deshpande。我的外键允许为空。事情工作正常。谢谢 – karma

相关问题