mysql事务处理及表锁定深入简析
mysql 深入 锁定 事务处理 简析 及表
2023-06-13 09:14:41 时间
MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
setautocommit=0禁止自动提交
setautocommit=1开启自动提交
来实现事务的处理。
当你用setautocommit=0的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
***:一般MYSQL数据库默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
方法如下:
1.修改c:\appserv\mysql\my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。
2.在运行中输入:services.msc,重启mysql服务。
3.到phpmyadmin中,mysql->showengines;(或执行mysql->showvariableslike"have_%";),查看InnoDB为YES,即表示数据库支持InnoDB了。
也就说明支持事务transaction了。
4.在创建表时,就可以为StorageEngine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->altertabletable_nametype=InnoDB;
或mysql->altertabletable_nameengine=InnoDB;来改变数据表的引擎以支持事务。
以下是测试的实例代码
复制代码代码如下:
1、用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
setautocommit=0禁止自动提交
setautocommit=1开启自动提交
来实现事务的处理。
当你用setautocommit=0的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
***:一般MYSQL数据库默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
方法如下:
1.修改c:\appserv\mysql\my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。
2.在运行中输入:services.msc,重启mysql服务。
3.到phpmyadmin中,mysql->showengines;(或执行mysql->showvariableslike"have_%";),查看InnoDB为YES,即表示数据库支持InnoDB了。
也就说明支持事务transaction了。
4.在创建表时,就可以为StorageEngine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->altertabletable_nametype=InnoDB;
或mysql->altertabletable_nameengine=InnoDB;来改变数据表的引擎以支持事务。
以下是测试的实例代码
mysql_query("BEGIN");//或者mysql_query("STARTTRANSACTION");
//若不使用事务,?t$sql执行成功,$sql1执行失败
$sql="insertintotestvalues("11","88")";
$sql1="insertintotestvalues("11","88","444")";
$res=mysql_query($sql);
$res1=mysql_query($sql1);
//因为使用了事务,?t???insert都执行失败
if($res&&$res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");
mysql_query("SETAUTOCOMMIT=0");//?置mysql不自?犹峤唬?枳孕杏?ommit?句提交
$sql="insertintotestvalues("11","88")";
$sql1="insertintotestvalues("11","88","444")";
$res=mysql_query($sql);
$res1=mysql_query($sql1);
//因为使用了事物,则两个insert都执行失败
if($res&&$res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");
对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:
代码如下:
//MyISAM&InnoDB都支持,
//Notes:query语句不能写在一起如:mysql_query("select*froma;select*fromb;");
$sql_1="LOCKTABLEStestWRITE";
mysql_query($sql_1);
$sql_2="INSERTINTOtestVALUES("".$a."","".$b."")";
if(mysql_query($sql_2)){
echo"successful!";
}else{
echo"Unsuccessful!";
}
$sql_3="UNLOCKTABLES";
mysql_query($sql_3);
相关文章
- 深入探究MySQL索引类型及使用方式(mysql索引方式)
- MySQL数据库建表:一步一步学习深入(mysql数据库建表)
- 深入学习:如何使用XAMPP管理MySQL(xampp使用mysql)
- 一步一步学习访问MySQL数据库(如何访问mysql数据库)
- 深入学习:如何使用Bat执行MySQL命令(bat执行mysql命令)
- 深入探索MySQL自定义查询方法(mysql自定义查询)
- Mysql性能测试:一款可靠的自动化工具.(mysql性能测试软件)
- MySQL中保存和操作数组(mysql保存数组)
- 安装 MySQL:从 bat 脚本中启动(bat安装mysql)
- 中的数据深入MySQL:查看数据库表中的数据(mysql显示数据库表)
- 深入了解MySQL分区类型(mysql分区类型)
- MySQL 数据不同步:解决方案探索(mysql数据不同步)
- 深入剖析MySQL:实用案例分析探究数据库技术(mysql案例分析)
- 深入解析MySQL存储过程:全面掌握这一技术!(mysql存储过程详解)
- 高效可靠的MySQL数据库部署方案详解(mysql数据库部署方案)
- 深入了解MySQL数据库类型(查看mysql数据库类型)
- MySQL中什么是实体深入了解MySQL实体的定义和应用(mysql中什么是实体)
- cmd轻松连接多个MySQL服务器(cmd链接其他mysql)
- 数据ASP解析MySQL中文数据实现无缝互联(asp接受mysql中文)
- 深入比较MySQL与Oracle的差异(mysql改oracle)
- MySQL在1060上的应用及其趋势(1060 mysql)
- MySQL如何准确判断特殊字符(mysql中判断特殊字符)
- 深入剖析MySQL三级分类结构实现数据分类和检索(mysql 三级分类结构)
- MySQL 学习之路深入理解上一级数据库架构(mysql 上一级)
- 深入探究MySQL不支持级联插入的原因及解决方式(mysql不支持级联插入)
- MySQL不能处理大规模数据更新问题(mysql不支持大量更新)