您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL批量操作语句,会部分成功吗?

时间:2020-08-24 10:30:27  来源:  作者:

今天就讨论以下几个数据批量操作的问题

1. 在一个批量操作的sql中,如果一个失败,其他的会怎么样呢

2. 对于大数据表,线上更新而不影响用户使用

3. 事务与锁的关系

建立测试表member表

MySQL批量操作语句,会部分成功吗?

表结构

1. 在一个批量操作的sql中,如果一个失败,其他的会怎么样呢

第一种情况:先看一下,多条语句没有事务控制的代码

$conn = Yii::$App->db1;
    $sql1 = 'insert into member (name,password) values ("yang","vincent")';
	$sql2 = 'insert into member (name,password,gender) values ("yang","vincent1")';
	    $conn->createCommand($sql1)->execute();
	    $conn->createCommand($sql2)->execute();

执行结果怎么呢 ,下面我们来看看,结果大家也猜得到,报错了

SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row.....

字段不匹配,但是,数据表第一条已经插入成功,只是第二条语句出错了!

第二种情况:多条语句,有事务控制

测试代码如下:

$conn = Yii::$app->db1;
		$transaction = $conn->beginTransaction();
		try {
			$sql1 = 'insert into member (name,password) values ("yang","vincent")';
			$sql2 = 'insert into member (name,password,gender) values ("yang","vincent1")';
		    $conn->createCommand($sql1)->execute();
		    $conn->createCommand($sql2)->execute();
		    // ... executing other SQL statements ...
		    $transaction->commit();
		} catch (Exception $e) {
		    $transaction->rollBack();
		}

结果同样出错,错误信息和第一种情况一致,但是这次数据表一条记录也没有,不难理解,我们都知道,在一个事务中,多个操作,要么都失败,要么都成功。

第三种情况:一条语句,批量插入,有事务控制

测试代码如下:

$sql1 = 'insert into member (name,password) values ("yang","vincent"),("yang","lily",1)';
		    $conn->createCommand($sql1)->execute();
		    $transaction->commit();

执行代码出错,错误和上面情况一致,数据表一条也没有写入成功,所以批量操作的sql语句是原子性的操作,相当于事务 控制。

总结:

在进行批量插入时,要么都成功,要么都失败,比如:在一个有唯一性索引的表批量插入时,只要有一个重复,整个操作都会失败,并不是部分成功,部分失败,在实际开发中要注意!

2. 大数据表,如何做到线上更新而不影响用户使用

我们的应用上线以后,功能在不停的迭代更新,数据表难免会修改,当数据量很大时,进行table更新,如修改表结构、增加字段、修改字段值、加索引,这些操作肯定会对用户有影响的。

比如增加索引,一张表千万数量级,可能会卡住几十分钟或长达几个小时。

常用的方法是:

在测试环境测试修改的影响,如果是几分钟,可以直接在线修改,如果时间长则不行

选一个用户使用最少的时间,停服更新;这应该是最常用的方法,这也是程序猿苦逼的原因,经常要熬夜功能上线。

业界的其他方案,也只有大公司能玩得转:

fecebook自己开发的工具,地址

http://bazaar.launchpad.net/~MySQLatfacebook/mysqlatfacebook/tools/files/head:/osc

也是8年前的版本,没有更新过了,只适用于mysql5.0,5.1 ,用php写的脚步,有兴趣的可以看一下,也许有借鉴意义;

像BAT这些大公司内部应该都有自己研发的工具,毕竟他们更有这些需求,技术大牛也多!

在线表结构的在线修改是一个业界难题!

3. 事务与锁的关系

事务中会不会加锁?

事务加不加锁,和事务的隔离级别有关,隔离级别中的可重复读和串行化,本身事务已经完全隔离了,所以事务内操作就没必要加锁了。

事务本身并不加锁,加不加锁取决于执行的语句,一旦加锁直到事务提交或 回滚才会释放。

事务的作用是什么?

事务保证操作的完整性,如订单和库存的操作,但不保证数据的正确性,如 update goods set num=num-1 where goods_id=1,所以这样不能保证超卖情况!还需要锁机制。

锁的作用是什么?

锁是避免并发的操作导致数据破坏,导致结果不是预期,常用在一些数据敏感的场合!



Tags:MySQL 批量操作   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天就讨论以下几个数据批量操作的问题1. 在一个批量操作的sql中,如果一个失败,其他的会怎么样呢2. 对于大数据表,线上更新而不影响用户使用3. 事务与锁的关系建立测试表member...【详细内容】
2020-08-24  Tags: MySQL 批量操作  点击:(191)  评论:(0)  加入收藏
▌简易百科推荐
作者:雷文霆 爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。 本文来源:原创投稿 *爱可生...【详细内容】
2021-12-24  爱可生    Tags:MySQL   点击:(6)  评论:(0)  加入收藏
生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章...【详细内容】
2021-12-14  python数据分析    Tags:MySQL记录锁   点击:(17)  评论:(0)  加入收藏
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二...【详细内容】
2021-12-14  linux上的码农    Tags:mysql   点击:(13)  评论:(0)  加入收藏
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查...【详细内容】
2021-12-09  元宇宙iwemeta    Tags:mysql   点击:(15)  评论:(0)  加入收藏
测试的目的和原因,公司有很多程序员,每个程序员对数据库和表结构都有自己的理解。而且每个程序员的理解往往是以效率考虑。既然都是为了效率考虑,那么我就来测试一下究竟哪种使...【详细内容】
2021-12-08  吴彬的分享    Tags:Mysql数据库   点击:(14)  评论:(0)  加入收藏
当你们考虑项目并发的时候,我在部署环境,当你们在纠结使用ArrayList还是LinkedArrayList的时候,我还是在部署环境。所以啊,技术不止境,我在部环境。今天这篇文章缕一下在同一台服...【详细内容】
2021-12-08  秃头码哥    Tags:MySQL数据库   点击:(16)  评论:(0)  加入收藏
对于数据分析来说,MySQL使用最多的是查询,比如对数据进行排序、分组、去重、汇总及字符串匹配等,如果查询的数据涉及多个表,还需要要对表进行连接,本文就来说说MySQL中常用的查询...【详细内容】
2021-12-06  笨鸟学数据分析    Tags:MySQL   点击:(20)  评论:(0)  加入收藏
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。...【详细内容】
2021-11-24  笨鸟学数据分析    Tags:SQL语句   点击:(23)  评论:(0)  加入收藏
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域...【详细内容】
2021-11-05  Java云海    Tags:分布式锁   点击:(31)  评论:(0)  加入收藏
MySQL的进阶查询 一、 按关键字排序 使用ORDERBY语句来实现排序排序可针对一个或多个字段ASC:升序,默认排序方式 【升序是从小到大】DESC:降序 【降序是从大到小】ORDER BY的...【详细内容】
2021-11-05  Java热点    Tags:SQL语句   点击:(27)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条