MySql中使用INSERT INTO语句更新多条数据的例子_Mysql

我们知道当插入多条数据的时候insert支持多条语句:

复制代码 代码如下:

INSERT INTO t_member (id, name, email) VALUES
    (1, 'nick', 'nick@126.com'),
    (4, 'angel','angel@163.com'),
    (7, 'brank','ba198@126.com');

但是对于更新记录,由于update语法不支持一次更新多条记录,只能一条一条执行:

复制代码 代码如下:

UPDATE t_member SET name='nick', email='nick@126.com' WHERE id=1;
UPDATE t_member SET name='angel', email='angel@163.com' WHERE id=4;
UPDATE t_member SET name='brank', email='ba198@126.com' WHERE id=7;

这里问题就出现了,倘若这个update list非常大时(譬如说5000条),这个执行率可想而知。

这就要介绍一下在MySql中INSERT语法具有一个条件DUPLICATE KEY UPDATE,这个语法和适合用在需要判断记录是否存在,不存在则插入存在则更新的记录。

具体的语法可以参见:http://dev.mysql.com/doc/refman/5.0/en/insert.html

基于上面这种情况,针对更新记录,仍然使用insert语句,不过限制主键重复时,更新字段。如下:

复制代码 代码如下:

INSERT INTO t_member (id, name, email) VALUES
    (1, 'nick', 'nick@126.com'),
    (4, 'angel','angel@163.com'),
    (7, 'brank','ba198@126.com')
ON DUPLICATE KEY UPDATE name=VALUES(name), email=VALUES(email);

注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!

时间: 2024-10-26 06:05:38

MySql中使用INSERT INTO语句更新多条数据的例子_Mysql的相关文章

MySQL中索引优化distinct语句及distinct的多字段操作_Mysql

MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个不能利用索引完成DISTINCT操作的实例.   实例1 使用索引优化DISTINCT操作 create table m11 (a int, b int, c int, d int, primary key(a)) engine=INNODB

MySQL中使用case when 语句实现多条件查询的方法_Mysql

举例如下: 数据表为DemoTable,字段有id, condition1,condition2,condition3,condition4,condition5 要求是查询DemoTable中,condition1,condition2,condition3,condition4,condition5五个字段中符合任意两个或两个以上的条件的内容. 可使用case when来实现这个条件,需要嵌套子查询语句 sql语句代码示例如下: 复制代码 代码如下: SELECT * FROM DemoTa

mysql中实现WITH AS语句

问题描述 mysql中实现WITH AS语句 WITH n(parentId) AS (SELECT menuId FROM TSYS_MENU WHERE menuid in #{item} UNION ALL SELECT parentId FROM TSYS_MENU WHERE menuid in #{item} UNION ALL SELECT nplus.parentId FROM TSYS_MENU as nplus n WHERE n.parentId = nplus.menui

mysql中创建视图时视图的名称对数据有影响?!?

问题描述 mysql中创建视图时视图的名称对数据有影响?!? 这学期刚刚学数据库,关于mysql创建视图的问题 创建视图的语句: create view supply(sno, pno, qty) as select spj.sno, spj.pno, spj.qty from spj, j where j.jno = spj.jno and j.jname = '三建'; 这样视图创建成功,但是select * from supply;时查询结果是空empty set. 如果将视图名由supp

mysql中关于左连接,取出来的数据顺序和主表不一样

问题描述 mysql中关于左连接,取出来的数据顺序和主表不一样 如题,楼主最近在跟着视频学习SQL语句,发送自己做出来的效果和老师不一样 如图 这时两张表,学生表和班级表 要求是查询班级一样的学生信息,查出左连接显示是这样的: 右连接显示这样 请问一下为什么左连接查询出来显示数据的顺序不是按照学生表的顺序来啊?学生表不是主表么?为什么我显示出来的itcast顺序完全乱了,而是按照后面右表的id顺序来排? 求求求,急求大神解疑 解决方案 这个结果就是这样的.因为你的左连接写的是pr_student

使用C# 在sqlite数据库中更新一条数据,当前应用程序中是有效的,当我关闭应用程序后,再次打开应用程序,查询,发现更改失败,请各位大神们看看什么原因,谢谢。

问题描述 使用C#在sqlite数据库中更新一条数据,当前应用程序中是有效的,当我关闭应用程序后,再次打开应用程序,查询,发现更改失败,请各位大神们看看什么原因,谢谢代码:sql="UPDATESchoolSETdelegate='北航'WHEREID=2";cmd.CommandText=sql;cmd.ExecuteNonQuery();表结构: 解决方案 本帖最后由 yyyy1999 于 2015-06-09 16:50:07 编辑解决方案二:你的cmd支持sqlite数据库吗?

sql实现插入数据主键重复或数据已经存在,则更新这条数据

在做数据库开发的时候,经常会遇到这样的一种情景: 当一条数据不存在的时候,插入这条数据,如果这条数据的主键已经在数据库中存在,那么更新这条数据. 你们一般怎么做呢?先根据主键查询数据,然后判断是否存在数据,如果存在数据,则update字段,否则insert数据. 这样做的弊端就是需要两次连接数据库服务器,然后利用高级语言来判断是否存在的逻辑. 下面教你一条SQL语句,教你解决这类问题! 例如数据表weixin_user的表结构如下所示:(博客转移,图片丢失) $sql = "insert int

Laravel 批量更新多条数据的示例

引言 最近在写任务中,碰到一个问题,需要批量更新多条数据,但是Laravel没有提供这样的方法,Google了一些方法,刚好借着任务来举例说明一下. 任务要求 任务是一个简单的清除未读通知的API,其实就是把通知表中符合user id 和 is read = 0 的行中的 is_read改为1(0代表未读,1代表已读). 方法1 我首先想到的是利用where()方法查出user id和is read符合条件的notices,然后利用foreach循环和save()更新数据表. $notices

请教高手如何优化下面oracle语句,19W条数据花了几个小时

问题描述 请教高手如何优化下面oracle语句,19W条数据花了几个小时 3C update agz set fa_id=(select B from B123 where a=agz.old_fa_id);commit;update agz set person_id=(select ry.id from dm_gy_ry ry where ry.sfzjhm=agz.ry_sfz and ry.yxbz='Y' and rownum=1);commit;update agz set pers