怎么在php中操作mysql锁机制

  介绍

今天就跟大家聊聊有关怎么在php中操作mysql锁机制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

php的框架有哪些

php的框架:1,Laravel, Laravel是一款免费并且开源的php应用框架。2,Phalcon, Phalcon是运行速度最快的一个php框架。3,Symfony, Symfony是一款为Web项目准备的php框架。4,Yii, Yii是一款快速、安全和专业的php框架。5,CodeIgniter, CodeIgniter是一款非常敏捷的开源php框架。6,CakePHP, CakePHP是一款老牌的php框架1:8)。Kohana, Kohana是一款敏捷但是功能强大的PHP框架。


1, MyISAM表锁

MyISAM表级锁模式:

<李>

表共享读锁(表读锁):不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;

<李>

表独占写锁(表写锁):会阻塞其他用户对同一表的读和写操作,

MyISAM加表锁方法:

<李>

用锁表命令给MyISAM表显式加锁

<李>

锁表real_table(读|写),insert_table(读|写);//加锁

<李>

解锁表;//解锁

列子:
比如有账户(id、名称、现金),英雄(数量、名称、国家)这两张表

<李>

账户锁定表读;将账户加为只读锁
当前进程查询:select * from英雄;会报表“英雄”不是锁锁表。
当前进程更改其他表:更新英雄集名称=暗澄谰?数量=1;会报表“英雄”与锁没有锁表
当前进程更改表:更新帐户设置name=皊ss”id=1;会报表“帐户”读锁是锁着的,不能更新
如果别mysql进程进来,可以查询其他表和账户,但不能更改账户,会一直等待,需要释放锁才执行

1.1 php操作

& lt; ? php/* *   ,*/link 美元;=,new  mysqli(& # 39; 127.0.0.1 # 39;,, & # 39;根# 39;,,& # 39;123 & # 39;,,& # 39;db_school& # 39;);,//,连接数据库如果(mysqli_connect_errno()){,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,//,检查连接错误   ,,,printf(“连接失败:% s
“,, mysqli_connect_error ());   ,,,退出();}//(s1) table 美元;=,“account" type 美元;=,“read" sql1 美元;=,“LOCK  TABLES  table 美元;type"美元;;美元链接→查询(sql1美元);//处理逻辑sql1 美元//=,“select  *,得到表美元;“,,,,,,,,,//(s1)真//sql1 美元;=,“select  *,得到英雄;“,,,,,,,,,//错误//sql1 美元;=,“update  hero  set  name=& # 39;党卫军# 39;,where 数量=1,,,,,,,,,//假sql1 美元;=,“update  account  set  name=& # 39; ssss& # 39;, where  id=1,,,,,,//假result 美元;=,美元链接→查询(sql1美元);var_dump(结果)美元;睡眠(20);,,//测试,,,,//假设还没释放锁,开启cmd进mysql (s2)可以查询,但不能执行更改和删除操作,会等待这边释放锁美元链接→查询(“unlock  tables");,,,,//取消全部的锁//解锁后正常操作result 美元//=,link 美元;→,查询(sql1美元);//var_dump()美元,美元的链接→关闭();

查询表级锁争用情况
显示状态如表%的;

<李>

Table_locks_immediate指的是能够立即获得表级锁的次数

<李>

Table_locks_waited指的是不能立即获取表级锁而需要等待的次数

2。InnoDB加锁方法:

对于普通选择语句,InnoDB不会加任何锁;<强>只能在事务执行过程中使用加锁
锁只有在执行提交或者回滚的时候才会释放,并且所有的锁都是在同一时刻被释放。

<李>

共享锁(S): SELECT * FROM table_name…锁在分享模式。其他会话仍然可以查询记录,并也可以对该记录加分享模式的共享锁。但是如果当前事务需要对该记录进行更新操作,则很有可能造成死锁。大家都能读,但是不能改,只有其中一个独占共享锁时候才能改;

<李>

排他锁(X): SELECT *从table_name…更新。其他会话可以查询该记录,但是不能对该记录加共享锁或排他锁,而是等待获得锁。我要改,你们都不能改,也不能读
#选择…锁定共享模式//共享锁
#选择更新/?排他锁
# #在MySQL 8.0中

<李>

共享锁(S): SELECT *从table_name为分享…

<李>

排他锁(X): SELECT *从table_name…更新(NOWAIT SKIP LOCKED) |
-NOWAIT:发现有锁等待后会立即返回错误,不用等待锁超时后报错。
跳过锁定:跳过被锁定的行,直接更新其他行,但是这样要注意是否会造成更新结果不符合预期。

怎么在php中操作mysql锁机制