mysql 存在也插入_我如何更新如果存在,插入如果没有(AKA“向上插入”或“合并”)在MySQL?...

24d5adacc4d5bc78d55513c999accfd0.png

HUH函数

我知道这是个老生常谈的问题,但谷歌最近带领我来到这里,所以我想其他人也会来这里。@混沌是正确的:INSERT ... ON DUPLICATE KEY UPDATE语法。但是,最初的问题是关于MySQL的,在MySQL中有REPLACE INTO ...语法。IMHO,这个命令更容易使用,也更简单。从手册中:“替换”的工作方式与INSERT完全一样,但如果表中的旧行与主键或唯一索引的新行的值相同,则在插入新行之前删除旧行。注意,这不是标准SQL。手册中的一个例子:CREATE TABLE test (  id INT UNSIGNED NOT NULL AUTO_INCREMENT,  data VARCHAR(64) DEFAULT NULL,  ts TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY (id));mysql> REPLACE INTO test VALUES (1, 'Old', '2014-08-20 18:47:00');Query OK, 1 row affected (0.04 sec)mysql> REPLACE INTO test VALUES (1, 'New', '2014-08-20 18:47:42');Query OK, 2 rows affected (0.04 sec)mysql> SELECT * FROM test;+----+------+---------------------+| id | data | ts                  |+----+------+---------------------+|  1 | New  | 2014-08-20 18:47:42 |+----+------+---------------------+1 row in set (0.00 sec)只是一个公平的警告REPLACE INTO不像UPDATE..就像手册上说的,REPLACE如果行存在,则删除该行,然后插入一个新行。(请注意上面示例中有趣的“2行受影响”。)也就是说,它将取代全现有记录的列(而不仅仅是更新)一些(纵队)MySQL的行为REPLACE INTO很像斯奎特的INSERT OR REPLACE INTO..看见这个问题对于某些解决方案,如果记录已经存在,则只想更新几个列(而不是所有列)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值