MySQL数据库事务与锁实例演示
本次实验主要通过cmd命令终端进行数据库的“事务与锁”的简单演示。
实例演示一:
首先,在windows下,开启一个cmd命令行终端,登陆MySQL数据库,打开xxx数据库,查询其下的emp表,如下:
然后,输入:set autocommit=false;(非自动commit模式,需要手动提交后才生效)回车,再删除一笔数据:delete from emp where id=11;查询发现id为11的数据确实已删除。
此时,再打开另一个新的cmd命令行终端。同样打开xxx数据库并查询emp表,我们发现,在新的cmd终端中看到的emp表中id为11的数据依然存在!
接着,我们在第一个被打开的cmd终端中输入commit; 然后再查询emp表中的记录,此时发现,无论是在哪个终端查询,结果都一样是查不到id为11的记录了,说明commit之后,delete from emp where id=11;这个删除操作才起作用。
实例演示二:
mysql_query("BEGIN"); //开始一个事务
mysql_query("SET AUTOCOMMIT=0"); //设置事务不自动commit
$insert="insert into emp(name,sex,salary,deparment) ('翔宇后生',1,'10000','开发部')";
mysql_query($insert);
mysql_query("COMMIT"); //非autocommit模式,必须手动执行COMMIT使操作生效
$insert="insert into emp(name,sex,salary,deparment) ('翔宇',1,'5000','运营部')";
$insert="insert into emp(name,sex,salary,deparment) ('后生',1,'6000','设计部')";
if(mysql_num_rows==0)
{
mysql_query("ROLLBACK"); //非autocommit模式,执行ROLLBACK使事务操作无效
}
else{
echo "两笔数据均插入成功!";
}
mysql_query("SET AUTOCOMMIT=1"); //恢复autocommit模式
$insert="insert into emp(name,sex,salary,deparment) ('翔宇先生',1,'100000','总经理')";
mysql_query($insert); //不需要手动执行COMMIT就可以使事务操作生效
注意:执行BEGIN之后,其作用与set autocommit=0相同,而且之后设置set autocommit=0或1时BEGIN无效。因此,一般不使用BEGIN。