• 售前

  • 售后

热门帖子
入门百科

PHP+MySQL高并发加锁事件处理题目办理方法

[复制链接]
123457092 显示全部楼层 发表于 2021-10-25 20:30:42 |阅读模式 打印 上一主题 下一主题
本文实例陈诉了PHP+MySQL高并发加锁事件处理问题办理方法。分享给各人供各人参考,详细如下:
1、配景:
现在有如许的需求,插入数据时,判定test表有无username为‘mraz'的数据,无则插入,有则提示“已插入”,目的就是想只插入一条username为‘mraz'的记录。
2、一样平常步调逻辑如下:
  1. $conn = mysqli_connect('127.0.0.1', 'root', '111111') or die(mysqli_error());
  2. mysqli_select_db($conn, 'mraz');
  3. $rs = mysqli_query($conn, 'SELECT count(*) as total FROM test WHERE username = "mraz" ');
  4. $row = mysqli_fetch_array($rs);
  5. if($row['total']>0){
  6.   exit('exist');
  7. }
  8. mysqli_query($conn, "insert into test(username) values ('mraz')");
  9. var_dump('error:'.mysqli_errno($conn));
  10. $insert_id = mysqli_insert_id($conn);
  11. echo 'insert_id:'.$insert_id.'<br>';
  12. mysqli_free_result($rs);
  13. mysqli_close($conn);
复制代码
3、一样平常少量哀求的时间,步调逻辑不会有问题。但是一旦高并发哀求实行的话,步调并没有按预期实行,会插入多条username为‘mraz'的记录。
4、办理方案利用mysql的FOR UPDATE 语句和事件的隔离性。留意的是FOR UPDATE仅实用于InnoDB,且必须在事件(BEGIN/COMMIT)中才华生效。
调整代码后如下:
  1. $conn = mysqli_connect('127.0.0.1', 'root', '111111') or die(mysqli_error());
  2. mysqli_select_db($conn, 'mraz');
  3. mysqli_query($conn, 'BEGIN');
  4. $rs = mysqli_query($conn, 'SELECT count(*) as total FROM test WHERE username = "mraz" FOR UPDATE');
  5. $row = mysqli_fetch_array($rs);
  6. if($row['total']>0){
  7.   exit('exist');
  8. }
  9. mysqli_query($conn, "insert into test(username) values ('mraz')");
  10. var_dump('error:'.mysqli_errno($conn));
  11. $insert_id = mysqli_insert_id($conn);
  12. mysqli_query($conn, 'COMMIT');
  13. echo 'insert_id:'.$insert_id.'<br>';
  14. mysqli_free_result($rs);
  15. mysqli_close($conn);
复制代码
5、再利用php的curl模仿高并发哀求该php脚本,检察数据库会只有一条username为‘mraz'的记录。到达步调实行的预期结果~
更多关于PHP相关内容感爱好的读者可检察本站专题:《php+mysql数据库操作入门教程》、《php+mysqli数据库步调计划技巧总结》、《php面向对象步调计划入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对各人PHP步调计划有所资助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作