概述
锁机制
共享锁与排他锁
共享锁(读锁):其他事务可以读,但不能写。
排他锁(写锁) :其他事务不能读取,也不能写。
1、MyISAM 表锁
1.1PHP操作
<?php/**
* Created by PhpStorm.
* User: Administrator
* Date: 2021/4/29 0029
* Time: 11:20
*/$link = new mysqli('127.0.0.1', 'root', '123', 'db_school'); // 连接数据库if(mysqli_connect_errno()){ // 检查连接错误
printf("连接失败:%s<br>", mysqli_connect_error());
exit();}//(s1)$table = "account";$type = "read";$sql1 = "LOCK TABLES $table $type";$link->query($sql1);//处理逻辑//$sql1 = "select * from $table;"; //(s1)true//$sql1 = "select * from hero;"; //false//$sql1 = "update hero set name='ss' where number=1; "; //false$sql1 = "update account set name='ssss' where id=1;"; //false$result = $link->query($sql1);var_dump($result);sleep(20); //测试 //假设还没释放锁,开启cmd进mysql(s2)可以查询,但不能执行更改和删除操作,会等待这边释放锁$link->query("unlock tables"); //取消全部的锁//解锁后正常操作//$result = $link -> query($sql1);//var_dump($result);$link->close();
登录后复制
2.InnoDB加锁方法:
2.1PHP操作
<?php/**
* Created by PhpStorm.
* User: Administrator
* Date: 2021/4/29 0029
* Time: 10:06
*/$link = new mysqli('127.0.0.1', 'root', '123', 'db_school'); // 连接数据库if(mysqli_connect_errno()){ // 检查连接错误
printf("连接失败:%s<br>", mysqli_connect_error());
exit();}//案例1$id = 1; //明确指定主键,并且有此数据,row lock (行锁)//$id = -1; //明确指定主键,若查无此数据,无lock (无锁)$link->autocommit(0); // 开始事务(s1)//FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。$sql = "select * from account where id=$id for update";$link->query($sql);/***
* 此时其他mysql进程可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁。
*///(s1)可以进行更改,和查询等操作//$sql1 = "update account set name='aaa' where id=$id;"; //进行更改//$sql1 = "select * from account where id=$id;"; //进行查询$sql1 = "delete from account where id=$id;"; //进行删除$result = $link -> query($sql1);var_dump($result);sleep(20); //测试 //假设还在事务处理中,开启cmd进mysql(s2)执行更改和删除操作,会等待这边释放锁$link->commit();$link->close();
登录后复制
以上就是浅析php简单操作mysql锁机制的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是酷炫招牌为你收集整理的浅析php简单操作mysql锁机制的全部内容,希望文章能够帮你解决浅析php简单操作mysql锁机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复