mysql如果数据不存在,则插入新数据,否则更新的实现方法
作者:平凡简单 | 来源:互联网 | 2021-11-04 23:47
mysql如果数据不存在,则插入新数据,否则更新的实现方法
//如果不存在,则插入新数据 $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 8.0 的核心新功能,包括增强的安全性、用户管理、新的索引类型、CTE 和窗口函数等。 ...
[详细]
蜡笔小新 2024-11-25 19:24:24
本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ...
[详细]
蜡笔小新 2024-11-25 19:07:53
本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ...
[详细]
蜡笔小新 2024-11-25 10:21:47
System Center Operations Manager 2007(简称SCOM 2007)作为MOM 2005的升级版,不仅整合了监控与管理功能,还显著简化了操作流程,提供了更加全面和精准的服务管理。 ...
[详细]
蜡笔小新 2024-11-25 09:59:04
本文介绍如何通过创建数据库触发器来限制Oracle数据库中特定用户的登录IP地址,以增强系统的安全性。示例代码展示了如何阻止非授权IP地址的登录尝试。 ...
[详细]
蜡笔小新 2024-11-25 09:11:22
本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ...
[详细]
蜡笔小新 2024-11-25 05:32:41
本文提供了一个SQL脚本,用于在Microsoft SQL Server中创建一个数据字典视图,该视图详细列出了表名、表描述、字段名称、字段描述、字段类型、字段大小、字段精度、是否可为空、默认值以及是否为标识或主键等信息。 ...
[详细]
蜡笔小新 2024-11-24 20:04:23
本文详细介绍了MyBatis的基础配置流程,包括在Maven项目中添加MyBatis依赖、IDEA中配置数据库连接、导入SQL脚本以及编写mybatis-config.xml配置文件等关键步骤。 ...
[详细]
蜡笔小新 2024-11-24 18:58:57
本文基于最新版SQLite 3.33.0(发布于2020年8月20日),详细介绍如何使用ORDER BY语句进行数据排序,包括单列和多列排序的方法。 ...
[详细]
蜡笔小新 2024-11-24 18:49:26
本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ...
[详细]
蜡笔小新 2024-11-24 18:04:54
本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ...
[详细]
蜡笔小新 2024-11-24 16:35:09
本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ...
[详细]
蜡笔小新 2024-11-24 15:36:41
本文通过一系列实验,探讨了Oracle 11g数据库中密码错误验证延迟特性对用户登录速度的影响。实验旨在验证当某个用户因输入错误密码而触发延迟时,是否会影响其他用户的正常登录速度。 ...
[详细]
蜡笔小新 2024-11-24 15:11:52
本文详细介绍了SQL查询的基本结构和高级特性,包括选择、分组查询以及权限控制等内容,并探讨了事务管理中的并发控制策略,旨在为数据库管理员和开发人员提供实用指导。 ...
[详细]
蜡笔小新 2024-11-24 12:53:26
本文详细介绍了如何在 PHP 的图形函数中正确显示汉字,包括具体的步骤和注意事项,适合初学者和有一定基础的开发者阅读。 ...
[详细]
蜡笔小新 2024-11-24 10:58:45