第一句子大全,网罗天下好句子,好文章尽在本站!

mysql批量语句 怎么保证操作都成功?

时间:2022-11-25

第三种情况:一条语句,批量插入,有事务控制测试代码如下:$sql1 = insert into member name,password values yang,vincent,yang,lily,1;

友情提示:本文共有 2211 个字,阅读大概需要 5 分钟。

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

在一个批量操作的sql中,如果一个失败,其他的会怎么样呢对于大数据表,线上更新而不影响用户使用事务与锁的关系建立测试表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,所以这样不能保证超卖情况!还需要锁机制。

锁的作用是什么?

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

本文如果对你有帮助,请点赞收藏《mysql批量语句 怎么保证操作都成功?》,同时在此感谢原作者。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
20条关于成功的句子 成功需要君子的鼓励 也需要小人的刺激!

20条关于成功的句子 成功需要君子的鼓励 也需要小人的刺激!

1.是的,在人生的旅途中,我们总会遇到困难和挫折,它们如同玫瑰,刺痛了你我的手,但是,心灵的创伤要我们自己修补,手上的伤口还得让别人为我们包扎。我们相信自己会战胜困难,但我们从不否定他人的帮助,没有谁能...

2023-05-08 #经典句子

成功坚持励志的句子 坚持和希望的励志句子 句句都是现实!

成功坚持励志的句子 坚持和希望的励志句子 句句都是现实!

千金难买是光阴,千金难买是生命,千金难买是快乐,千金难买是人生。只要走过、路过、奋斗过、拼搏过就是成功,百年人生,不过浮云,走好自己的路。幸福并不是出生在富贵家庭,什么东西都唾手可得。太过轻易得到的东...

2022-11-24 #经典句子

奋斗句子事业的成功没有止境

奋斗句子事业的成功没有止境

1:事业的成功没有止境,它是一场无终点的追求。 2:如果你具备开始的勇气,就有了成功的豪情。3:成功与不成功之间有时距离很短,只是后者再向前了几步。 4:向往成功的桂冠,就别空费每一天。 5:如果你能成功地选择劳动,...

2022-11-22 #经典句子

正能量早安成功句子配图 努力生活 积极向上!

正能量早安成功句子配图 努力生活 积极向上!

当狂风在你耳边呼啸时,你只当它微风拂面;当暴雨在你眼前倾泻时,你只当它屋檐滴水;当闪电在你头顶肆虐时,你只当它萤火流逝。人,决不能在逆境面前屈服。周末,早安!每一次挑战,都是成长之路上的蜕变!周末,早...

2022-11-25 #经典句子

关于坚持与成功的英文句子你知道哪些

关于坚持与成功的英文句子你知道哪些

#坚持##英语# Patience is bitter, but its fruit is sweet.忍耐是痛苦的,但它的果实是甜蜜的。-卢梭Laughter is the sun that drives winter from the human face.微笑就像太阳,从人们的脸上融化冬季的寒冷。Winners never quit and quitters never win.退缩者永无胜...

2022-11-25 #经典句子

想成功的自己 一定读读下面的句子

想成功的自己 一定读读下面的句子

有些有时候,过于精明其实是一种愚蠢,而诚实却恰恰是一种真正的精明。如果对别人有价值。你就尽可能放手去做,不会让你劳而无果的。给别人一种美,给生活一种时尚,那么就是给自己一把成功的钥匙。做别人没有做过的...

2022-11-25 #经典句子

简短唯美的句子 当你成功的时候 你说的所有话都是真理

简短唯美的句子 当你成功的时候 你说的所有话都是真理

1.制度上的漏洞不一定是坏事。你可以通过把握领导思路,用有利的方式弥补。2.有时候,你必须意识到,有些人可以留在你的心里,但不能留在你的生活中。3.当你成功了,你说的都是真的。4.那些不可理解的柔情,缠绕在指尖...

2022-11-25 #经典句子

非常经典的句子:成功靠的不是豪言壮语 而是脚踏实地

非常经典的句子:成功靠的不是豪言壮语 而是脚踏实地

努力不是为了超越别人,而是给自己一个交代。美好的东西从不会轻易获得,成功靠的不是豪言壮语,而是脚踏实地!你不买房,你的孩子就要买;你不想奋斗,你的孩子就要奋斗;两代人总有一代人要拼了命努力,这不是鸡汤...

2022-11-25 #经典句子

很有哲理励志的句子 失败没有什么 只是更走近成功一步

很有哲理励志的句子 失败没有什么 只是更走近成功一步

失败是什么?没有什么,只是更走近成功一步;成功是什么?就是走过了所有通向失败的路,只剩下一条路,那就是成功的路。在逆境的时候,你要问自己是否有足够的条件。当我自己逆境的时候,我认为我够!因为我勤奋、节...

2022-12-21 #经典句子