2010-04-09 49 views
0

好吧我有兩個表。他們都有鑰匙。我有另一個表引用這兩個鍵。當我添加到第三個表中時,如果任何一個鍵不存在於前兩個表中,我不能將該元組插入到第三個表中。我正在插入phpMyAdmin。謝謝。使用尚未創建的外鍵插入到mySQL表中

回答

1

編輯

對不起,誤讀了你的問題。 Mysql只支持某些引擎的限制。 InnoDB是我所瞭解和普遍使用的,但其他人可能真的不確定。因此,與INNO DB你幾乎需要日以下模式:

CREATE TABLE my_table_a (
    `id` INTEGER UNSIGNED NOT NULL auto_increment, 
    # your other column definitions 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

CREATE TABLE my_table_b (
    `id` INTEGER UNSIGNED NOT NULL auto_increment, 
    # your other column definitions 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB; 

CREATE TABLE my_table_a_b (
    `id` INTEGER UNSIGNED NOT NULL auto_increment, 
    `table_a_id` INTEGER UNSIGNED NOT NULL, 
    `table_b_id` INTEGER UNSIGNED NOT NULL 
    PRIMARY KEY (`id`), 
    KEY (`table_a_id`), 
    KEY (`table_b_id`), 
    CONSTRAINT `ab_FK_a` 
     FOREIGN KEY (`table_a_id`) 
     REFERENCES `my_table_a` (`id`), 
    CONSTRAINT `ab_FK_b` 
     FOREIGN KEY (`table_b_id`) 
     REFERENCES `my_table_b` (`id`) 
) ENGINE=InnoDB; 

SET FOREIGN_KEY_CHECKS=0; 

# Your INSERTS 

SET FOREIGN_KEY_CHECKS=1; 

這將禁用FK檢查AST的SQL語句反映,直到你完成你的插入之後。如果我沒有記錯的話,它會再次檢查鑰匙。正因爲如此,您可能想要使用一個事務,以便您可以回滾,如果您犯了一個錯誤,最終不會匹配鍵。否則,你可能有部分數據這是從來沒有的樂趣:-)

+1

不回答問題。事實上,刪除所有與要求相反的完整性檢查。 – 2010-04-09 20:55:28

+1

是的,我真的不明白他在說什麼。我希望有一種方法,如果在一個表中不存在密鑰,並且我嘗試將其添加爲外鍵,則不起作用。 – ranzy 2010-04-09 20:57:16

+0

哦,我誤讀了..我雖然他想添加相關記錄,但不是爲了他的批次。見上面的編輯。 – prodigitalson 2010-04-10 00:05:23

0

我不知道約束,但是你可以使用這個插入查詢:
INSERT INTO TAB3(TAB3_key1,TAB3_key2)SELECT VAL1,VAL2 FROM TAB1 JOIN TAB2 ON EXISTS(SELECT * FROM TAB1 JOIN TAB2 ON TAB1_key = val1 AND TAB2_key = val2)LIMIT 1;

其中val1,val2 - 要插入的值。