//如果不存在,则插入新数据
$sql = "INSERT INTO {$ecs->table(‘cat_lang')} (cat_id,lang_id,cat_name,keywords,cat_desc)
VALUES({$cat_id},{$k},'{$val['cat_name']}','{$val['keywords']}','{$val['cat_desc']}')
ON DUPLICATE KEY UPDATE cat_name='{$val['cat_name']}',cat_desc='{$val['cat_desc']}',keywords='{$val['cat_desc']}'";
这里要注意的是:必须表主键唯一 。这里,这里我采用的是 分类id和语言id双主键机制。
key为唯一键或者主键
(1) key存在则替换,不存在则插入
replace into t_test | CREATE TABLE `t_test` (
`ikey` int(11) NOT NULL default '0',
`value` varchar(21) NOT NULL default '',
`icount` int(11) NOT NULL default '0',
PRIMARY KEY (`ikey`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk |
对于这样一个表.当要记录ikey=1,value='a',icount=0时,由于不知道表里有没有ikey=1的项.我们可能会先select,然后看有没有结果,如果有,则使用update进行更新.如果没有,则使用insert进行插入.
不过在大并发量的数据操作时,可能有时一个有主键的select查询都要用上2s,如果对旧数据不关心,减少不必要的操作显得犹为重要.
使用replace一个语句可以完成上面两个语句的功能,其语法与insert差不多.如上面的操作可以写为replace into t_test set ikey=1,value='a',icount=0;则表中有ikey为1时,先删除旧数据.然后插入新数据.否则直接插入数据.
(2) key存在则更新,不存在则插入
insert into .... on duplicate key update
对于需要根据原记录进行操作的.如表中icount字段用于计数,当没有记录时,插入的value为0,当有记录时,value需要更新为value+1,这时replace就不能完成这个功能.使用insert则可以,其基本语法是insert into ... on duplicate key update...,如上述语句为
insert into t_test set ikey=1,value='a',value2=1 on duplicate key update value2=value2+1;
如果表中有多个唯一索引,如对value字段加个unique key.这时表中有ikey和value两个唯一索引,replace会把所有与其唯一索引值相同的数据项删除,再插入新记录.如表中有两个记录
+------+-------+--------+
| ikey | value | icount |
+------+-------+--------+
| 2 | a | 10 |
| 1 | b | 40 |
+------+-------+--------+
则replace into t_test set ikey=1,value='a',icount=0;会把表中的两条记录都删除,然后插入新记录.
而insert into t_test set ikey=1,value='a',icount=0 on duplicate key update icount=icount+1则只更新一条记录.其效果相当于update t_test set icount=icount+1 where ikey=1 or value='a' limit 1;
mysql如果数据不存在,则插入新数据,否则更新的实现方法
2019-11-27 16:49MYSQL教程网 Mysql
mysql如果数据不存在,则插入新数据,否则更新的实现方法
延伸 · 阅读
- 2019-11-27mysql处理添加外键时提示error 150 问题的解决方法
- 2019-11-27MySQL DBA 常用手册小结
- 2019-11-26ubuntu linux 下使用Qt连接MySQL数据库
- 2019-11-26Ubuntu修改mysql默认编码的方法
- 2019-11-26忘记mysql数据库root用户密码重置方法[图文]
- 2019-11-26让MySQL支持中文排序的实现方法
精彩推荐
- Mysql
不使用MySQL数据库的五个给力理由解析
众所周知,MySQL数据库虽然功能未必很强大,但因为它的开源、广泛传播,导致很多人都了解到这个数据库。 ...
- Mysql
mysql proxy问题的解决方法
最近试用mysql proxy,遇到若干问题,好在一一找到了解决方案,列出来备忘。这次使用的版本是0.6.x,也许新版本就没有这些问题了。 ...
- Mysql
MySQL 管理
对于网站的开发者来说,MySQL是一个较受欢迎的选择,这不仅是因为它对于任何平台上的非商业应用都是免费的,而且也因为它的架设和使用非常的简单。...
- Mysql
MYSQL随机抽取查询 MySQL Order By Rand()效率问题
MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研...
- Mysql
MySQL与MSSQL使用While语句循环生成测试数据的代码
有时候我们测试性能的时候经常需要生产大量的测试数据,用sql语句直接生成的数据更快,需要的朋友可以参考下。 ...
- Mysql
mySQL 延迟 查询主表
在主外键表存在关系的时候如果加上"lazy=true"的话,则表明延迟,即只查询主表中的内容,而不查询外键表中的内容。 ...
- Mysql
mysql 索引分类以及用途分析
MySQL索引分为普通索引、唯一性索引、全文索引、单列索引、多列索引等等。这里将为大家介绍着几种索引各自的用途。 ...
- Mysql
mysql "too many connections" 错误 之 mysql解决方法
解决方法是修改/etc/mysql/my.cnf,添加以下一行 ...