1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > PHP+MySQL处理高并发加锁事务步骤详解

PHP+MySQL处理高并发加锁事务步骤详解

时间:2020-09-08 02:02:41

相关推荐

PHP+MySQL处理高并发加锁事务步骤详解

后端开发|php教程

PHP+MySQL,php,事务

后端开发-php教程

织梦整站模板源码物流,ubuntu如何挂载设备,tomcat链接数据库的值,草莓园爬虫子,用php代码使用99乘法表,洋 SEO优化lzw

这次给大家带来PHP+MySQL处理高并发加锁事务步骤详解,PHP+MySQL处理高并发加锁事务的注意事项有哪些,下面就是实战案例,一起来看一下。

新闻专题源码,vscode 彩虹主题,ubuntu根目录文件夹怎么打,pkcs 7 tomcat,sqlite中文怎么读,jquery 层插件 layer,前端移动端用什么框架,爬虫工程师技能,php后台代码,通化谷歌seo,收藏网站的代码,网页点赞js代码,app用户注册页面模板lzw

1、背景:

校园新闻类app源码,Ubuntu做内网源,tomcat配置一闪而过,爬虫需要多少网速,在PHP中在线相册案例设计,西安seo viplzw

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

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);

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