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

v8wbuo2f  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(328)
UPDATE AggregatedData SET datenum="734152.979166667", 
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";

如果 datenum 存在,但如果 datenum 不存在。
更新
datenum是唯一的,但不是主键

u91tlkcl

u91tlkcl1#

我遇到了一种情况,需要根据两个字段(都是外键)更新或插入一个表,而这两个字段不能设置唯一约束(所以插入。。。重复密钥更新将不起作用)。以下是我最终使用的:

replace into last_recogs (id, hasher_id, hash_id, last_recog) 
  select l.* from 
    (select id, hasher_id, hash_id, [new_value] from last_recogs 
     where hasher_id in (select id from hashers where name=[hasher_name])
     and hash_id in (select id from hashes where name=[hash_name]) 
     union 
     select 0, m.id, h.id, [new_value] 
     from hashers m cross join hashes h 
     where m.name=[hasher_name] 
     and h.name=[hash_name]) l 
  limit 1;

这个示例来自我的一个数据库,输入参数(两个名称和一个数字)替换为[hasher\u name]、[hash\u name]和[new\u value]。嵌套的select…limit 1提取现有记录或新记录(last\u recogs.id是一个自动递增主键)中的第一个,并将其用作replace into的值输入。

iecba09b

iecba09b2#

你应该使用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)
pgky5nke

pgky5nke3#

尝试使用以下选项:
如果您指定 ON DUPLICATE KEY UPDATE ,并插入一行,该行将导致 UNIQUE index or 主键 , MySQL performs an [ 更新](http://dev.mysql.com/doc/refman/5.7/en/update.html)在旧的一排。。。 这个ON DUPLICATE KEY UPDATE子句可以包含多个列赋值,用逗号分隔。 与ON DUPLICATE KEY UPDATE,如果将行作为新行插入,则每行受影响的行值为1;如果更新现有行,则每行受影响的行值为2;如果将现有行设置为其当前值,则每行受影响的行值为0。如果您指定CLIENT_FOUND_ROWS标记到mysql_real_connect()` 连接到mysqld时,如果现有行设置为其当前值,则受影响的行值为1(而不是0)。。。

相关问题