说我有桌子:
CREATE TABLE texts
(
id INT PRIMARY KEY AUTO_INCREMENT,
body TEXT
);
我想更新几个ID,并插入一些新ID。如果id为null,我想插入,否则,我想更新。所以我想要这样的东西:
INSERT INTO OR UPDATE
texts (id, body)
VALUES
(NULL, 'create new row'),
(NULL, 'create other new row'),
(1, 'update id 1'),
(2, 'update id 2'),
(3, 'update id 3');
如果匹配的id不存在,我想忽略更新,因为在此期间该行显然被删除了。
答案 0 :(得分:2)
有一条声明INSERT ... ON DUPLICATE KEY UPDATE
INSERT INTO texts (id, body) VALUES(1, "body text") ON DUPLICATE KEY UPDATE
body="body text"
如果你想跳过表中不存在的ID,也许你可以试试这个
INSERT INTO
texts (id, body)
VALUES
(NULL, 'create new row'),
(NULL, 'create other new row');
UPDATE texts SET
`body` = CASE
WHEN `id` = 1 THEN 'update id 1'
WHEN `id` = 2 THEN 'update id 2'
WHEN `id` = 3 THEN 'update id 3'
ELSE `body` END
WHERE `id`=1 OR `id`=2 OR `id`=3;
答案 1 :(得分:1)
试试这个:
INSERT INTO texts(id, body) VALUES(1, "20") ON DUPLICATE KEY UPDATE body=20
答案 2 :(得分:1)
如果执行两个查询不是问题,您可以单独更新和插入。首先,UPDATE查询:
UPDATE my_table SET field1 =
(CASE id
WHEN 1 THEN 'value1'
WHEN 2 THEN 'value2'
WHEN 3 THEN 'value3'
END),
field2 =
(CASE id
WHEN 1 THEN 'value4'
WHEN 2 THEN 'value5'
WHEN 3 THEN 'value6'
END)
WHERE id IN(1,2,3)
在插入侧
INSERT INTO my_table(id, field1, field2) VALUES
(NULL, 'value7', 'value8'),
(NULL, 'value9', 'value10'),
(NULL, 'value11', 'value12')
;
这会导致类似:
id | field1 | field 2
-----------------------
1 | value1 | value4
2 | value2 | value5
3 | value3 | value6
4 | value7 | value8
5 | value9 | value10
6 | value11 | value12
自己测试
您可以通过创建架构来尝试自己
CREATE TABLE `my_db`.`my_table` (
`id` INT NOT NULL AUTO_INCREMENT,
`field1` VARCHAR(45) NULL,
`field2` VARCHAR(45) NULL,
PRIMARY KEY (`id`)
);
一些初始数据,以便您查看更新
INSERT INTO `my_db`.`my_table` (`field1`, `field2`) VALUES ('value', 'anotherValue');
INSERT INTO `my_db`.`my_table` (`field1`, `field2`) VALUES ('moreValue', 'justAnother');
INSERT INTO `my_db`.`my_table` (`field1`, `field2`) VALUES ('moreAndMore', 'valuesEverywhere');
然后只需执行查询就可以亲眼看看。
希望它有所帮助!
答案 3 :(得分:0)
REPLACE INTO
texts (id, body)
VALUES
(NULL, 'create new row'),
(NULL, 'create other new row'),
(1, 'update id 1'),
(2, 'update id 2'),
(3, 'update id 3');