PDO事物
1:事物:在MySQL中,事务由单独单元的一个或多个SQL语句组成。在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事务开始以前的状态;如果单元中的所有SQL语句均执行成功,则事务被顺利执行。
2:何时使用事物:事物是为了保证数据一致性,要么一致修改,要么都不修改。比如A给B转账,A转了100,需要把A账号减少100;B账号加上100;如果A转了100,由于其他原因B并没有收到,这时候就需要把A的100返回回去。
3:PDO实现事物的两个基本条件:
(1):数据库引擎用InnoDB,注意MyISAM不支持事物(2):关闭PDO的自动提交
4:PDO实现步骤:
(1):开启事物
(2):预处理SQL
(3):执行事物
(4):回滚
5:举例说明:下面两个mysql语句,第二个表是不存在的,执行回滚。
<?php try{ $pdo=new pdo("mysql:host=127.0.0.1;dbname=liu","root","123",array(PDO::ATTR_AUTOCOMMIT=>0)); //关闭自动提交 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //开启异常处理 $pdo->exec('set names utf8'); }catch(PDOException $e){ dir('数据库连接失败,错误信息:'. $e->getMessage()); } try { $pdo->beginTransaction(); //开启事物 $pdo->exec("insert into js_message (ip, dates, count) values ('126.0.0.1', '123456', 253)"); $pdo->exec("insert into d (id, amount, changedate) values (23, 50000, NOW())"); // 表不存在,报错 $pdo->commit(); //提交事务 } catch (Exception $e) { $pdo->rollBack(); //回滚 echo "Failed: " . $e->getMessage(); }
MyIASM和Innodb区别
1、MyIASM是非事务安全的,而InnoDB是事务安全的
2、MyIASM锁的粒度是表级的,而InnoDB支持行级锁
3、MyIASM支持全文类型索引,而InnoDB不支持全文索引
4、MyIASM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyIASM
5、MyIASM表保存成文件形式,跨平台使用更加方便