【发布时间】:2016-10-14 02:39:43
【问题描述】:
我需要你的小帮助,我想更新现有记录,如果它已经存在于表中,否则插入新记录。我没有在Where 子句中使用主键列。
每次它在表中插入具有相同第 1 列和第 2 列值的新记录。
我得到的回应很少,比如使用 REPLACE。但 REPLACE 将适用于唯一 / 主键的情况,否则插入新记录。
我使用了以下查询
方法一:
IF EXISTS (select * from mytable3 WHERE field1 = 'A') THEN
BEGIN
UPDATE mytable3
SET (field1 ='A', field2 = 'DD')
WHERE field1 = 'A'
END
ELSE
BEGIN
INSERT INTO mytable3 (field1, field2) VALUES ('A', 'DD')
END
方法二:
REPLACE mytable3 (field1, field2) VALUES ('A', 'DD');
表结构:
CREATE TABLE mytable3
(
users int(11) NOT NULL AUTO_INCREMENT,
field1 varchar(10),
field2 varchar(10),
PRIMARY KEY(users)
);
insert into mytable3 (field1, field2) values('A', 'AA');
insert into mytable3 (field1, field2) values('B', 'BB');
insert into mytable3 (field1, field2) values('C', 'CC');
注意:每次它在表中插入新记录,字段1和字段2的值相同
-------------- 原始问题------
如果不存在,我正在努力编写 MySql 查询以插入新记录,否则更新现有记录。但我面临如下语法错误:
错误代码:1064。您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在 'IF EXISTS(SELECT * FROM wnduty.
parcel-status-log附近使用的语法 WHEREparcel-id= 1 AND `sh' 在第 1 行
SQl 查询如下:
IF EXISTS(SELECT * FROM wnduty.`parcel-status-log` WHERE `parcel-id` = 1 AND `shipping-status-id` = 4)
THEN
BEGIN
UPDATE wnduty.`parcel-status-log` SET (`status-date` ='2016-06-10 10:41:58', `is-synced`= 3)
WHERE `parcel-id` = 1 AND `shipping-status-id` = 4
END
ELSE
BEGIN
INSERT INTO wnduty.`parcel-status-log` (`parcel-id`,`shipping-status-id`, `is-synced`,`status-date`)
values(1, 4, 1, '2016-06-10 10:41:58')
END
END IF
我也尝试过下面的查询,但仍然有语法错误..
INSERT INTO wnduty.`parcel-status-log` (`parcel-id`, `shipping-status-id`, `is-synced`, `status-date`) values(1, 4, 1, '2016-06-10 10:41:57')
ON DUPLICATE KEY UPDATE
`status-date` ='2016-06-13 11:41:58',`is-synced` = 3, `shipping-status-id` = 4 ;
我使用的MySql版本如下:
- innodb_version 5.7.12
- protocol_version 10
- version_compile_os Win64
【问题讨论】:
-
可能你不能拥有-
-
每次插入新记录时都会更新现有记录。问题未解决