后端开发|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);