Home  >  Article  >  Backend Development  >  php 如何执行mysql的 行锁定

php 如何执行mysql的 行锁定

WBOY
WBOYOriginal
2016-06-23 13:20:581760browse

要锁定一行,
require_once ("config.inc.php"); //数据库连接

mysql_query("set autocommit=0");
mysql_query("BEGIN");
mysql_query("SELECT * FROM `news` where id=1  for update ");
 echo "test";
?>
然后我在 ie窗口执行这个语,正常显示执行

我用chrome开一个窗口中,打开phpmyadim ,执行sql 语句 

delete  FROM `news` where id=1

居然删除了第一行,说明锁定没有成功,

在php中应该怎么写才对?


回复讨论(解决方案)

如果您对存储引擎使用FOR UPDATE,则受到查询检验的行会被进行写锁定,直到当前事务结束为止。

显然你的测试不符合描述的情况

如果您对存储引擎使用FOR UPDATE,则受到查询检验的行会被进行写锁定,直到当前事务结束为止。

显然你的测试不符合描述的情况


感谢版主回复 ,我现在最重要的是不知道在php中应该怎么写,上面的写法是否正确?

我主要想知道在php中如何写 悲观锁定行。请朋友 们帮忙

你写的并没有错,但你传递测试是错的
锁定(表锁、行锁)都只在当前连接中有效,关闭连接就解锁了

你的测试设计应该是在程序 a 正在执行
SELECT * FROM `news` where id=1  for update
时,程序 b 去执行
delete  FROM `news` where id=1

这个度是很难把握的,早了晚了都不行

你写的并没有错,但你传递测试是错的
锁定(表锁、行锁)都只在当前连接中有效,关闭连接就解锁了

你的测试设计应该是在程序 a 正在执行
SELECT * FROM `news` where id=1  for update
时,程序 b 去执行
delete  FROM `news` where id=1

这个度是很难把握的,早了晚了都不行



谢谢版主,知道写的没问题就好了
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn