我有张很简单的桌子:
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';我需要能够使用各种值运行update这个表。例如,有时我会,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')我希望只有辛克莱。
我需要做些什么才能让它发生?
发布于 2020-04-09 09:14:47
PRIMARY键必须是唯一的。因此,当您用(111, 'IOS')替换时,它将任何现有条目替换为user_id = 111,因此最终只能在表中得到(111, 'IOS')。如果要插入所有值,则需要删除PRIMARY KEY on 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请注意,一旦移除user_id上的user_id,REPLACE将与INSERT相同,因此可以多次插入相同的值。如果这不是您想要的,请考虑在UNIQUE上使用comment键
ALTER TABLE test ADD UNIQUE (comment)这将防止重复的(user_id, comment)组合。
https://stackoverflow.com/questions/61117490
复制相似问题