mysql 事务处理
知识点:
事务处理是什么?
当数据库表呈树状机构设计时,我们对一个表进行增、删、改的操作,可能会要求对另外的表进行相同的操作,为了保证这多个sql能同时执行成功,就要使用mysql的事务处理。
注意:只有增删改的操作可以进行回滚,alter等操作不可行!
事务特性:
1、原子性:所有的sql执行操作必须全部成功,否则则回滚到处理前状态
2、一致性: 确保数据库正确地改变状态后,成功提交的事务。
3、隔离性: 使事务操作彼此独立的和透明的。
4、持久性: 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在。
目前mysql支持的事务处理的有两种引擎,基本上大家都在使用innodb引擎,注意,所有进行sql操作事务处理的表都必须是innodb引擎。
关键词1:commit,当事务处理是成功的时候,进行事务处理sql的提交工作
关键词2:rollback,当其中有一个sql执行操作有误时,进行回滚,此操作将会将所有被操作的数据库表回滚到之前的状态。
关键词3:start trasaction, 开启事务功能
关键词4 :autocommit,自动提交,如果为0则关闭,如果为1则开启,所以使用时需要将它赋值为0(关闭),使用完后再赋值为1(重新开启),一般mysql默认是开启的
PHP执行事务处理代码:
1 $con = mysql_connect('localhost','root','root'); 2 mysql_select_db("test",$con); 3 mysql_query("set names utf8"); 4 mysql_query('START TRANSACTION') or die(mysql_error());//开启事务功能 5 $sql1 = "insert into student (name,age)values('xiaoming','16')"; 6 $sql2 = "insert into score (sid,computer,english)values(2,90,98)"; 7 if(!mysql_query($sql1)){ 8 mysql_query("ROLLBACK");//sql执行失败则表数据回滚到之前的状态 9 echo '1'; 10 } 11 if(!mysql_query($sql2)){ 12 mysql_query("ROLLBACK");//sql执行失败则表数据回滚到之前的状态 13 echo '2'; 14 } 15 16 mysql_query('COMMIT')or die(mysql_error());//执行事务
sql语句故意写错后,结果都不提交,事务处理是可行的
另:start transaction 等同于 set autocommit = 0