所以我是新的使用多個表。在今天之前,有一張桌子適合我的需求(我也可以在這裏使用1)。SQL多個表插入
我正在爲我玩的遊戲創建一個插件,但我正在使用MySQL數據庫來存儲所有信息。我有3張牌桌,球員,戰士和警告。警告中有2個外鍵(一個引用玩家,另一個引用Warner)。
此刻我需要做3個查詢。將這些信息添加到玩家& Warners中,然後發送給Warns。有沒有辦法可以減少查詢的數量,如果我只是省略前兩個查詢會發生什麼?
查詢示例:
INSERT INTO slimewarnsplayers VALUES ('123e4567-e89b-12d3-a456-426655440000', 'Spedwards');
INSERT INTO slimewarnswarners VALUES ('f47ac10b-58cc-4372-a567-0e02b2c3d479', '_Sped');
INSERT INTO slimewarnswarns VALUES ('', '123e4567-e89b-12d3-a456-426655440000', 'f47ac10b-58cc-4372-a567-0e02b2c3d479', 'spamming', 'medium');
表:
CREATE TABLE IF NOT EXISTS SlimeWarnsPlayers (
uuid VARCHAR(36) NOT NULL,
name VARCHAR(26) NOT NULL,
PRIMARY KEY (uuid)
);
CREATE TABLE IF NOT EXISTS SlimeWarnsWarners (
uuid VARCHAR(36) NOT NULL,
name VARCHAR(26) NOT NULL,
PRIMARY KEY (uuid)
);
CREATE TABLE IF NOT EXISTS SlimeWarnsWarns (
id INT NOT NULL AUTO_INCREMENT,
pUUID VARCHAR(36) NOT NULL,
wUUID VARCHAR(36) NOT NULL,
warning VARCHAR(60) NOT NULL,
level VARCHAR(60) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (pUUID) REFERENCES SlimeWarnsPlayers(uuid),
FOREIGN KEY (wUUID) REFERENCES SlimeWarnsWarners(uuid)
);
這是兩個實體,一個關係(引用其他兩個插入),正確的外鍵,因此需要三個插入。 – 2014-11-21 14:10:26
@ lx42.de,絕對正確。雖然使用動態查詢也是可能的(你將不得不從主表中捕獲最後插入的鍵值),但我不會去做;但值得一提。 – Rahul 2014-11-21 14:17:40
我沒有抓住你的想法(好處),因爲你可以得到最新的插入ID而不是最後兩個(http://dev.mysql.com/doc/refman/5.0/en/information-functions.html #function_last-insert-id)你必須插入mem = LAST_INSERT_ID(),插入,插入(mem,LAST_INSERT_ID(),...),產生四個查詢。 – 2014-11-21 14:57:21