2015-09-24 75 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

相關問題