2011-02-15 47 views
0

我有2個表:讓說表1(用戶ID,用戶名,密碼)和表2(用戶ID,A,B,C)。Mysql數據庫 - 主鍵問題

表1具有用戶ID字段(主鍵),表2還具有用戶ID(參照表1)。

如果我做一個INSERT語句添加行到表2,如何表2生成的用戶ID字段?

編輯: 我想插入東西到表2,其中表2中的用戶ID必須在表1匹配用戶ID - 做什麼限制,我需要建立

+0

您必須將表2的userid分配給引用表1,但您很可能希望爲表2自身具有唯一的主ID。所以,你會有(tableid,userid,a,b,c) – kjy112 2011-02-15 13:46:25

回答

0

如果對錶2的用戶ID字段不自動增量然後必須提供值或插入將失敗。

+0

沒問題,所以如果我在表2中爲用戶標識添加自動增量,它會根據表1的用戶標識改變字段? – Steve 2011-02-15 13:47:13

+0

不,它會生成一個全新的ID - 你需要自己提供一個ID爲1的ID自己 – 2011-02-15 13:48:08

0

如果如果定義在表2用戶ID作爲foriegn鍵約束用戶名和密碼不爲空,那麼請不要在TABEL 1插入並給出錯誤

0

,那麼你就需要有相應的用戶ID在table1作爲將行插入到table2時的引用,否則如果您尚未定義任何此類約束,則無關緊要。

請記住,如果約束定義,然後表2本身不會產生ID。它將要求該ID存在於被引用的table1列中。

1

數據庫不理解table1table2之間的關係,除非你明確的指定。如果您使用支持它們的數據庫引擎(InnoDB),則可以使用SQL foreign keys

CREATE TABLE table1 (
    userid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    username VARCHAR(255) UNIQUE NOT NULL, 
    password VARCHAR(255) NOT NULL); 
CREATE TABLE table2 (
    rowid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    userid INTEGER NOT NULL 
     REFERENCES table1(userid) 
     ON DELETE CASCADE ON UPDATE CASCADE 
    -- other columns here 
); 

REFERENCES選項會告訴table2.userid需要一個行中table1這樣table1.userid = table2.userid存在的數據庫引擎。 ON DELETEON UPDATE子句將導致刪除table1中的行以自動刪除/更新table2中的行。

您不能在table2中創建一行,直到您在table1中爲用戶創建了一行。 table1中的行將自動生成userid。當您插入table2時,您將顯式包含table1中的用戶標識以建立行之間的鏈接。