`
ssxxjjii
  • 浏览: 931598 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一条mysql 存在该记录则更新,不存在则插入记录的sql

阅读更多

一条mysql教程 存在该记录则更新,不存在则插入记录的sql

INSERT table (auto_id, auto_name) values (1, ‘yourname') ON DUPLICATE KEY UPDATE auto_name='yourname'

ON DUPLICATE KEY UPDATE的使用
如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:
复制代码 代码如下:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
mysql> UPDATE table SET c=c+1 WHERE a=1;

如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。
注释:如果列b也是唯一列,则INSERT与此UPDATE语句相当:
复制代码 代码如下:
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常,您应该尽量避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句。
您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT...UPDATE语句的INSERT部分引用列值。换句话说,如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT...UPDATE语句中有意义,其它时候会返回NULL。
示例:
复制代码 代码如下:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

本语句与以下两个语句作用相同:
复制代码 代码如下:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=3;
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6)
-> ON DUPLICATE KEY UPDATE c=9;

当您使用ON DUPLICATE KEY UPDATE时,DELAYED选项被忽略。

------------------------------------------------------------------------------------------------------------------------

MySQL has a special construct for this. Assume the 'username' column below is UNIQUE:

INSERT INTO users (username, email) VALUES ('Jo', 'jo@email.com')
ON DUPLICATE KEY UPDATE email = 'jo@email.com'


The 'ON DUPLICATE KEY' statement only works on PRIMARY KEY and UNIQUE columns.<!-- google_ad_section_end -->

分享到:
评论

相关推荐

    MySQL数据库:单条数据记录的插入一.pptx

    若表名后不给出列名,则在VALUES子句中要给出每一列(除IDENTITY和timestamp类型的列)的值,如果列值为空,则值必须置为NULL,否则会出错。VALUES子句中的值: (1)表达式:可以是一个常量、变量或一个表达式,也...

    MySQL创建存储过程批量插入10万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    Python语句实现Mysql多条插入语句

    本代码,用python语句,实现了一次插入多条sql语句。希望能对大家带来帮助。

    DBHelper数据库操作类(支持OleDb、MySQL、Oracle、SQL、SQLite).zip

    执行一条计算查询结果语句,返回查询结果 执行查询语句,返回MySqlDataReader 执行查询语句,返回DataSet 执行SQL语句,返回影响的记录数 执行多条SQL语句,实现数据库事务。 执行带一个存储过程参数的的SQL语句。 ...

    MySQL批量SQL插入性能优化详解

    对于一些数据量较大的系统,数据库...1. 一条SQL语句插入多条数据。 常用的插入语句如: INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0); INSERT I

    mysql中获取一天、一周、一月时间数据的各种sql语句写法

    今天抽时间整理了一篇mysql中与天、周、月有关的时间数据的sql语句的各种写法,部分是收集资料,全部手工整理,自己学习的同时,分享给大家,并首先默认创建一个表、插入2条数据,便于部分数据的测试,其中部分名词...

    MySQL批量SQL插入性能优化

    对于一些数据量较大的系统,数据库... 一条SQL语句插入多条数据。  常用的插入语句如:  INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)  VALUES ('0', 'userid_0', 'content_0', 0

    MySQL命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为的名为Tom的成绩为.45, 编号为 的名为Joan 的成绩为.99,编号为 的名为Wang 的成绩为.5. mysql&gt;insert into MyClass values(1,’Tom’,96.45),(2,’Joan...

    MYSQL常用命令大全

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成绩为82.99,编号为3 的名为Wang 的成绩为96.5. mysql&gt; insert into MyClass values(1,'Tom',96.45),(2,...

    mysql 一次更新(update)多条记录的思路

    工作中遇到一个问题:要更新一个数据表。 这个表是我自己创建的,有7个字段,id、name、...一次更新多条信息的思路如下: UPDATE table_name SET field_name = CASE other_field WHEN 1 THEN 'value' WHEN 2 THEN '

    MySQL实现两张表数据的同步

    有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录。两张表的结构不同,需要将其中几个字段对应起来。可以用下面的触发器实现。 表A的触发器: ...

    mysql如何优化插入记录速度

    插入记录时,影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。根据这些情况,可以分别进行优化,本节将介绍优化插入记录速度的几种方法。 一. 对于MyISAM引擎表常见的优化方法如下: 1. 禁用索引。对于...

    mysql insert if not exists防止插入重复记录的方法

    MySQL 当记录不存在时插入(insert if not exists) 在 MySQL 中,插入(insert)一条记录很简单,但是一些特殊应用,在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,本文介绍的...

    用一条mysql语句插入多条数据

    主要介绍了在mysql中使用一条sql语句插入多条数据,效率非常高,但是原理其实很简单,希望对大家有所帮助

    my sql与sql server实时同步源码,自定义设置同步时间

    //本程序的功能是实时从mysql中读取一条记录中的一个字段,插入到sqlserver 中,经过长时间的运行,基本无错了, 而这数据同步,目前没有实时性强的软件,至少1分钟,太久了,自己写了一个, //可以自己设置同步时间...

    mysql分组取每组前几条记录(排名) 附group by与order by的研究

    –按某一字段分组取最大(小)值所在行的数据 代码如下: /* 数据如下: nameval memo a 2 a2(a的第二个值) a 1 a1–a的第一个值 a 3 a3:a的第三个值 b 1 b1–b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b ...

    最全Mysql数据库命令

    例如,往表 MyClass中插入二条记录, 这二条记录表示:编号为1的名为Tom的成绩为96.45, 编号为2 的名为Joan 的成 绩为82.99,编号为3 的名为Wang 的成绩为96.5. mysql&gt; insert into MyClass values(1,'Tom',96.45),(2...

    MySQL与SQL的触发器的不同写法

    触发器作用&gt; 当在SQL、MySQL数据库中一张表中插入一条记录时,触动触发器,使同一数据库的另一张表插入相同记录。 在学习的过程中,发现两者的写法是不同的。 &lt;触发器作用&gt; 1、在SQL中建立两张表sql_test,sql_tem...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    每插入多少行提交一次,-1表示不提交,默认-1,如果设置了ac参数为1,则此参数无效。 注意:如果设置了此参数,每到此行数会执行一次commit,如果是外部调用此过程要注意所有数据会被提交 -ac all commit 0.插入成功的...

Global site tag (gtag.js) - Google Analytics