如果不存在MySql表插入,否则更新

OHL*_*ÁLÁ 96 mysql insert

UPDATE AggregatedData SET datenum="734152.979166667", 
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
Run Code Online (Sandbox Code Playgroud)

如果datenum存在,它可以工作,但如果不存在,我想将此数据作为新行插入datenum.

UPDATE

datenum是唯一的,但这不是主键

Ike*_*ker 133

你应该使用Jai是正确的INSERT ... ON DUPLICATE KEY UPDATE.

请注意,您不需要在update子句中包含datenum,因为它是唯一键,因此不应更改.您需要包含表中的所有其他列.您可以使用该VALUES()函数确保在更新其他列时使用正确的值.

以下是使用适当INSERT ... ON DUPLICATE KEY UPDATE的MySQL语法重写的更新:

INSERT INTO AggregatedData (datenum,Timestamp)
VALUES ("734152.979166667","2010-01-14 23:30:00.000")
ON DUPLICATE KEY UPDATE 
  Timestamp=VALUES(Timestamp)
Run Code Online (Sandbox Code Playgroud)

  • 在对具有多个唯一键或主键的表的表上使用INSERT ... ON DUPLICATE KEY UPDATE时要小心.取自[MySQL文档](http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html):_此外,从MySQL 5.5.24开始,INSERT ... ON针对具有多个唯一键或主键的表的DUPLICATE KEY UPDATE语句也被标记为不安全.(Bug#11765650,Bug#58637)_错误58637说明http://bugs.mysql.com/bug.php?id=58637 (17认同)

Jai*_*Jai 13

试试这个:

如果指定ON DUPLICATE KEY UPDATE,则插入一行将导致旧行的UNIQUE index orPRIMARY KEY , MySQL performs an [UPDATE`](http://dev.mysql.com/doc/refman/5.7/en/update.html)中出现重复值. ..

ON DUPLICATE KEY UPDATE子句可以包含多个列分配,以逗号分隔.

对于ON DUPLICATE KEY UPDATE,如果将行作为新行插入,则每行的受影响行值为1;如果更新现有行,则为2,如果现有行设置为其当前值,则为0.如果在连接到mysqld时指定了CLIENT_FOUND_ROWS标志,那么如果将现有行设置为其当前值,则受影响的行值为1(不为0)...mysql_real_connect()