使用删除旧值更新表

韦德兰·马里切维奇(Vedran Maricevic)。

我有一个非常简单的表:

CREATE TABLE `test` (
  `user_id` int(11) NOT NULL,
  `comment` varchar(45) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='no';

我将需要能够使用各种VALUES运行更新此表。例如,有时我会有3个插入,有时会有6个插入。它们都有相同的user_id,但注释会更改。运行更新时,应首先删除旧值,然后插入新值。这是我尝试过的:

REPLACE INTO test (
user_id,
comment
)
VALUES
(111, 'ANDROID'),
(111, 'IOS')

该语句仅插入最后一个值(IOS)。我的期望是同时拥有两个值(ANDROID和IOS)。

现在,如果我运行此命令:

REPLACE INTO mama (
user_id,
name
)
VALUES
(111, 'COMMODORE'),
(111, 'SINCLAIR'),
(111, 'AMIGA')

我希望所有这三个值。

如果我运行此命令:

REPLACE INTO test (
user_id,
name
)
VALUES
(111, 'SINCLAIR')

我希望只有SINCLAIR。

我需要做些什么才能实现它?

尼克:

PRIMARY必须是唯一的。因此,当您将(111, 'IOS')其替换为时,会将所有现有条目替换为user_id = 111,因此最终只能(111, 'IOS')在表中进行。如果要插入所有值,则需要删除PRIMARY KEYon user_id(也许用索引替换它)。例如:

ALTER TABLE test DROP PRIMARY KEY;
ALTER TABLE test ADD INDEX (user_id);
REPLACE INTO test (
user_id,
comment
)
VALUES
(111, 'ANDROID'),
(111, 'IOS');

SELECT *
FROM test

输出:

user_id     comment
111         ANDROID
111         IOS

dbfiddle上的演示

请注意,一旦删除PRIMARY KEYon user_idREPLACE其与相同INSERT,因此可以多次插入相同的值。如果这不是您想要的,请考虑以下方面的UNIQUE关键comment

ALTER TABLE test ADD UNIQUE (comment)

这样可以防止重复的(user_id, comment)组合。

dbfiddle上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章