2016-06-13 116 views
0

我需要你的小帮助,我想更新现有记录,如果它已经存在于表中否则插入新记录。我没有使用Where子句中的主键列。在MySql查询中需要帮助INSERT IF NOT EXISTS否UPDATE

每次它在表中插入新的记录具有相同的列1和列2值。

我得到了很少的回应,就像使用REPLACE一样。但REPLACE将适用于唯一/主键的情况,否则插入新记录。

我已经使用了以下查询

方法1:

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 

方法2:

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 WHERE parcel-id = 1和'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的
+0

的可能的复制,如果不存在'in MySQL?](http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql) – Scott

+0

可能是你不可能的 - – coder771

+0

每次插入新记录时更新现有的。 问题未解决 – skt

回答

0

您可以使用UPDATE与相同的语法INSERT INTO如果该记录是表中任何唯一键上的重复记录,则它将更新该记录,否则将使用相同的SQL语句插入该记录。

+0

仍在IF IF EXTS附近收到如下错误 错误代码:1064.您的SQL语法错误;检查与你的MySQL服务器版本相对应的手册,在'IF EXISTS'(选择* – skt

+0

)附近使用正确的语法时,我开始时在IF位置发生实际系统错误,当我发生以下错误时翻转 'IF'在这个位置是无效的输入 – skt

0

只需使用REPLACE而不是INSERT,但它确实是你寻找什么......

INSERT INTO wnduty.parcel-status-log ...

REPLACE wnduty.parcel-status-log ...

从MySQL人:

更换作品酷似INSERT,不同之处在于,如果一个老行的表具有相同的值作为一个PRIMARY新行KEY或UNIQUE索引,旧行在插入新行之前被删除。请参见第14.2.5节“INSERT语法”。

全部更换例如:

mysql> CREATE TABLE mytable (users TINYINT(1), field varchar(10), PRIMARY KEY(users)); 
mysql> insert into mytable values(1, 'A'); 
mysql> insert into mytable values(2, 'B'); 
mysql> insert into mytable values(3, 'C'); 

现在更换一排新的值不管它存在与否:【如何“插入

mysql> REPLACE mytable (users, field) VALUES (2, "New Value"); 
mysql> REPLACE mytable (users, field) VALUES (4, "D"); 
+0

我已经尝试了替换,但仍然是相同的错误 如果EXISTS(SELECT * FROM wnduty.'parcel-status-log' where'parcel-id' = 1 AND'shipping-status-id ('status-date' ='2016-06-10 10:41:58','is-synced' = 3) WHERE 'parcel-id' = 1 AND'shipping-status-id' = 4 END ELSE BEGIN('parcel-id','shipping-status-id','is-synced','status-date') 值(1,4,1,'2016- 06-10 10:41:58') END END IF – skt

+0

其实系统错误在IF位置开始。当我摩西翻转如下错误 'IF'(如果)不是在该位置 – skt

+0

请帮助通过下面示例 CREATE TABLE MYTABLE ( 用户VARCHAR(10), 字段VARCHAR(10) )有效的输入; - insert into mytable values('abc','hdgsh'); insert into mytable values('abdc','hdsagsh'); insert into mytable values('abcd','hdgshfg'); insert into mytable values('something','hdgshfg'); SELECT * FROM MYTABLE - 我需要下面的查询 IF EXISTS(SELECT * FROM MYTABLE,用户= '东西'),然后从 选择mytable的领域,用户= '东西' END IF; else REPLACE mytable(users)values('something2'); – skt