所以我是新的使用多个表。在今天之前,有一张桌子适合我的需求(我也可以在这里使用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