我有一个这样的表架构:
CREATE TABLE statuses
(
id int,
lang int,
name varchar(30)
);
ALTER TABLE `statuses` ADD PRIMARY KEY (`id`, `lang`) ;
ALTER TABLE `statuses` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT ;
该表包含一些可能使用不同语言的数据。因此,我希望对应于相同数据但不同语言的每一行具有相同的
id
但不同的lang
。这样,双键是唯一的。我想使用以下查询来插入和更新值。INSERT INTO statuses (id, lang, name)
VALUES (null,1,'Third'),(null,2,'Trzeci')
ON DUPLICATE KEY UPDATE name = VALUES(name)
如果我想更新值,它可以正常工作,但是当我要实际插入内容时,它会中断,因为自动递增功能会为每个新创建的行在
id
列中放置不同的值。在这里您可以检查SQLfiddle:http://sqlfiddle.com/#!2/62fbfd/1
是否可以更正我的表结构或sql查询来完成这项工作,还是我应该首先使用多个查询来插入第一行以表示新的
id
,然后再使用此新创建的id
插入其余的行? ?我更喜欢只使用一个查询,所以这就是为什么在这里询问。 最佳答案
如果将模式更改为此:
CREATE TABLE statuses
(
id int,
lang int,
name varchar(30)
);
ALTER TABLE `statuses` ADD UNIQUE INDEX (`id`, `lang`) ;
ALTER TABLE `statuses` CHANGE `id` `id` INT;
那会做你想要的吗?当我在您的sqlfiddle中尝试插入时,插入起作用了。
您可以通过拥有另一个仅包含所需auto_increment值的表来解决id问题(如果需要auto_increment)。因此,您将插入表,获取和ID,然后在插入中使用该ID。但是您不能使用auto_increment,然后在多个行上使用相同的ID。如果那有意义的话...