• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql如果数据不存在,则插入新数据,否则更新的实现方法

mysql如果数据不存在,则插入新数据,否则更新的实现方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql数据存在哪里,mysql 数据存在哪,mysql数据类型,mysql插入数据,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; </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • mysql如果数据不存在,则插入新数据,否则更新的实现方法

相关文章

  • 2018-12-05 Redis学习笔记-List数据类型
  • 2018-12-05有关Oracle数据库的备份情况
  • 2017-05-11windows下忘记MySQL密码的修改方法
  • 2017-05-11关于mysql delete的问题小结
  • 2017-05-11MySQL 的CASE WHEN 语句使用说明
  • 2018-12-05mysql5.6在ubuntu下的docker中安装的方法详解
  • 2017-05-11详解用SELECT命令在MySQL执行查询操作的教程
  • 2017-05-11在Centos 5.5 上编译安装mysql 5.5.9
  • 2018-12-05使用mysql_num_rows()函数逐行获取结果集中的记录数(PHP操作MySQL数据库的方法七)
  • 2017-05-11Mysql数据库安装完成后需要进行的6个后续操作

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL BETWEEN 用法
    • MySQL 统计数据之和 Select Sum
    • SQL数据操作基础(初级)4
    • mysql执行时间为负数的原因分析
    • 将mysql转换到oracle必须了解的50件事
    • SQLSERVER查询所有数据库名,表名,和字段名的语句
    • Oracle 当前用户下所有表的记录总数
    • 详细介绍mysql 协议的FieldList命令包及解析
    • PHP程序员经常碰到的11个MySQL错误
    • 关于MySQL5.7.18主从复制搭建一主一从实例详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有