我有2個表:讓說表1(用戶ID,用戶名,密碼)和表2(用戶ID,A,B,C)。Mysql數據庫 - 主鍵問題
表1具有用戶ID字段(主鍵),表2還具有用戶ID(參照表1)。
如果我做一個INSERT語句添加行到表2,如何表2生成的用戶ID字段?
編輯: 我想插入東西到表2,其中表2中的用戶ID必須在表1匹配用戶ID - 做什麼限制,我需要建立
我有2個表:讓說表1(用戶ID,用戶名,密碼)和表2(用戶ID,A,B,C)。Mysql數據庫 - 主鍵問題
表1具有用戶ID字段(主鍵),表2還具有用戶ID(參照表1)。
如果我做一個INSERT語句添加行到表2,如何表2生成的用戶ID字段?
編輯: 我想插入東西到表2,其中表2中的用戶ID必須在表1匹配用戶ID - 做什麼限制,我需要建立
如果對錶2的用戶ID字段不自動增量然後你必須提供值或插入將失敗。
沒問題,所以如果我在表2中爲用戶標識添加自動增量,它會根據表1的用戶標識改變字段? – Steve 2011-02-15 13:47:13
不,它會生成一個全新的ID - 你需要自己提供一個ID爲1的ID自己 – 2011-02-15 13:48:08
如果如果定義在表2用戶ID作爲foriegn鍵約束用戶名和密碼不爲空,那麼請不要在TABEL 1插入並給出錯誤
,那麼你就需要有相應的用戶ID在table1作爲將行插入到table2時的引用,否則如果您尚未定義任何此類約束,則無關緊要。
請記住,如果約束定義,然後表2本身不會產生ID。它將要求該ID存在於被引用的table1列中。
數據庫不理解table1
和table2
之間的關係,除非你明確的指定。如果您使用支持它們的數據庫引擎(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 DELETE
和ON UPDATE
子句將導致刪除table1
中的行以自動刪除/更新table2
中的行。
您不能在table2
中創建一行,直到您在table1
中爲用戶創建了一行。 table1
中的行將自動生成userid
。當您插入table2
時,您將顯式包含table1
中的用戶標識以建立行之間的鏈接。
您必須將表2的userid分配給引用表1,但您很可能希望爲表2自身具有唯一的主ID。所以,你會有(tableid,userid,a,b,c) – kjy112 2011-02-15 13:46:25