免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2625 | 回复: 0
打印 上一主题 下一主题

存在该记录则更新,不存在则插入的sql [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-08 17:14 |只看该作者 |倒序浏览
6.4.3 INSERT 句法
INSERT INTO  tbl_name [(col_name,...)]
        VALUES ((expression | DEFAULT),...),(...),...
         ON DUPLICATE KEY UPDATE col_name=expression, ...
如果你指定 ON DUPLICATE KEY UPDATE 子句(在 MySQL 4.1.0 中被新加入),并且被插入的一个记录行在 PRIMARY
或 UNIQUE 键上将会产生一个重复值,那么老的记录行将被 UPDATE。举例来说:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
   --> ON DUPLICATE KEY UPDATE c=c+1;
假设列 a 被定义为 UNIQUE,并且已存在了一个 1,它将与下面的语句产生同样的结果:
mysql> UPDATE table SET c=c+1 WHERE a=1;
注意:如果列 b 也是唯一的,UPDATE 命令将要被写成这样:
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
并且如果 a=1 OR b=2 匹配几个记录行,只有 一个 记录行将被更新!大体上,在有多重 UNIQUE 键的表上,
你应该尽是避免使用 ON DUPLICATE KEY 子句。
让我们来看一下数据变化:
a表id,name上有一个联合唯一索引
select *  from a
---------------------------------
id name value
10 ff
10 aa dd
执行这个命令
INSERT    a   (id, name) values (10, 'aa')       ON DUPLICATE KEY UPDATE  value='ff', name='ee'
然后查看表的变化
select * from a
------------------------------
id name value
10 ff
10 ee ff
可以看到,第二行由于已经存在id=10, name=aa, 所以更新了这一行,使得name=ee, values=ff



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/13433/showart_82631.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP