MySQL的InnoDB事务

选择正确的存储引擎
以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。
MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到update操作完成。
另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。
InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。
但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

事务的四个特性

  1、原子性(atomicity)原子性是指整个数据库事务是不可分割的工作单位

  2、一致性(consistency)一致性指事务将数据库从一种状态转变为下一种一致的状态。在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。

  3、隔离性(isolation)一个事务的影响在该事务提交之前对其他事务都不可见------这通过锁来实现

  4、持久性(durability)事务一旦提交,其结果就是永久性的

事物的概念,记也记不住,直接实践理解得了。
<?php header("Content-type: text/html; charset=utf-8"); $link_id = @mysql_connect('localhost', 'root', ''); if (!$link_id) { die('连接服务器失败'); } $db = @mysql_select_db('test', $link_id); //确认自己数据库引擎是InnoDB的 if (!$db) { die('连接数据库失败'); } /*if (!@mysql_query("set names 'utf8'", $link_id)) { die('设置utf8格式失败'); }*/ $sql1 = "UPDATE 5_user SET sex = '2' WHERE user_id = '274'"; $sql2 = "UPDATE 5_user SET telephone = '134255' WHERE user_id = '274' AND sex = '5'"; mysql_query("SET AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行,1是自动提交...这里就会遇到问题 mysql_query("BEGIN");//开始事务定义 if(!mysql_query($sql1)){ mysql_query("ROOLBACK");//判断当执行失败时回滚 return false; } if(!mysql_query($sql2)){ mysql_query("ROOLBACK");//判断执行失败回滚 return false; } mysql_query("COMMIT");//执行事务 mysql_close($link_id);
原文地址:https://www.cnblogs.com/sunscheung/p/4626763.html