第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > PHP+MySQL高并发加锁事务处理问题解决方法

PHP+MySQL高并发加锁事务处理问题解决方法

时间:2020-04-05 09:59:47

相关推荐

PHP+MySQL高并发加锁事务处理问题解决方法

后端开发|php教程

PHP+MySQL,处理问题,php

后端开发-php教程

这篇文章主要介绍了关于PHP+MySQL高并发加锁事务处理问题解决方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

等级代挂源码美化版,vscode适配鸿蒙,深度学习ubuntu怎么样,tomcat的句子,sqlite3 更新,宝cms 5.0插件,安卓前端布局框架,python制造业爬虫,php mysql 函数,招聘SEO简介,购买视频网站源码,看微信网页源码,杰奇免费模板,php网页注册程序 登陆lzw

1、背景:

彩票运营版源码下载,vscode使用git更改,ubuntu内核漏洞,tomcat去掉8080,qt4sqlite问题,有没有毕业论文爬虫软件,php取request,酒店seo干货分享,金融网站psd,可导入excel表格的网页源码,dede黄页模板lzw

现在有这样的需求,插入数据时,判断test表有无username为‘mraz’的数据,无则插入,有则提示“已插入”,目的就是想只插入一条username为‘mraz’的记录。

o2o微商城源码下载,ubuntu开机进tty,tomcat反序列化漏洞,switch简易爬虫,linux下php7安装,济南seo课程lzw

2、一般程序逻辑如下:

$conn = mysqli_connect(127.0.0.1, oot, 111111) or die(mysqli_error());mysqli_select_db($conn, mraz);$rs = mysqli_query($conn, SELECT count(*) as total FROM test WHERE username = "mraz" );$row = mysqli_fetch_array($rs);if($row[ otal]>0){ exit(exist);}mysqli_query($conn, "insert into test(username) values (mraz)");var_dump(error:.mysqli_errno($conn));$insert_id = mysqli_insert_id($conn);echo insert_id:.$insert_id.

;mysqli_free_result($rs);mysqli_close($conn);

3、一般少量请求的时候,程序逻辑不会有问题。但是一旦高并发请求执行的话,程序并没有按预期执行,会插入多条username为‘mraz’的记录。

4、解决方案:利用mysql的FOR UPDATE 语句和事务的隔离性。注意的是FOR UPDATE仅适用于InnoDB,且必须在事务(BEGIN/COMMIT)中才能生效。

调整代码后如下:

$conn = mysqli_connect(127.0.0.1, oot, 111111) or die(mysqli_error());mysqli_select_db($conn, mraz);mysqli_query($conn, BEGIN);$rs = mysqli_query($conn, SELECT count(*) as total FROM test WHERE username = "mraz" FOR UPDATE);$row = mysqli_fetch_array($rs);if($row[ otal]>0){ exit(exist);}mysqli_query($conn, "insert into test(username) values (mraz)");var_dump(error:.mysqli_errno($conn));$insert_id = mysqli_insert_id($conn);mysqli_query($conn, COMMIT);echo insert_id:.$insert_id.

;mysqli_free_result($rs);mysqli_close($conn);

5、再利用php的curl模拟高并发请求该php脚本,查看数据库会只有一条username为‘mraz’的记录。达到程序执行的预期结果~

PHP+Mysql防止SQL注入的方法

PHP+MySQL如何实现分页显示

PHP+MySQL定时数据统计优化

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。