我有一个非常简单的表:
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 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
请注意,一旦删除PRIMARY KEY
on user_id
,REPLACE
其与相同INSERT
,因此可以多次插入相同的值。如果这不是您想要的,请考虑以下方面的UNIQUE
关键comment
:
ALTER TABLE test ADD UNIQUE (comment)
这样可以防止重复的(user_id, comment)
组合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句