MySql - InnoDB - 事务 , Php版
Posted 爱漂泊人生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql - InnoDB - 事务 , Php版相关的知识,希望对你有一定的参考价值。
1,前序
由于要重构APP(社交类) 服务端接口的部分代码,故接触到了 innoDB,以及事务这个词,下面主要是以例子的形式显示它的用法,理论的东西不过多讲述。
2,何为事务
鄙人在编程方面的解释:多条命令操作放在一起处理 , 例如提交的时候一起提交,撤销的时候也是一起撤销,书本对这个词的定义内容很多。
3,myisam 与 innoDB
它们都是 mysql数据库的引擎,我们一般建表默认的是 myisam 引擎,比较:http://www.cnblogs.com/vicenteforever/articles/1613119.html,个人认为,类 似于insert、update、delete 这种操作如果涉及多表或单表互联操作的情况,为了避免数据写脏,请使用事务。因为整个过程中若一条错误,便可以回滚到开始时的状态。
4,分享个基于php的类
1 <?php
2
3 /**
4 * Created by PhpStorm.
5 * User: 林冠宏
6 * Date: 2016/4/28
7 * Time: 10:20
8 */
9 include "Config.php"; /** 数据库配置信息类,自行完善 */
10
11 class Sql{
12 public $link = null;
13 private $config = null;
14 /**
15 * 是否直接开启事务
16 */
17 public function Sql($begin = false){
18 $this->config = new Config();
19 $this->connect();
20 mysql_query("SET AUTOCOMMIT=0",$this->link); /** 设置不自动提交,默认是自动提交 */
21 if($begin){
22 $this->SWBegin();
23 }
24 }
25
26 public function connect(){
27 $this->link = mysql_connect($this->config->host,$this->config->user,$this->config->pw); /** 连接数据库 */
28 mysql_query("SET NAMES \'utf8\'",$this->link); /** 经验总结,使用mysql设置页面编码,最好等链接了,再设置,意思是在连库函数后面使用 */
29
30 if(!$this->link){
31 exit("connect_dataBase_wrong");
32 }
33 if(!mysql_select_db($this->config->db,$this->link)){
34 exit("select_db_wrong");
35 }
36 }
37
38 /**
39 * 命令、是否判断行数、出错是否自动启用回滚、链式提交
40 */
41 public function exec($query,$judgeLength=false,$rollBack = false,$isCommit=false){
42 $res = mysql_query($query,$this->link);
43 if($judgeLength){ /** 是否判断行数 */
44 if(mysql_num_rows($res)<=0){
45 return null;
46 }
47 }else{
48 if(!$res){
49 if($rollBack) {
50 $this->rollBack();
51 }
52 exit($query); /** 抛出出错的 sql 语句 */
53 }
54 }
55 if($isCommit){
56 return $this;
57 }else{
58 return $res;
59 }
60 }
61
62 /** 开始事务 */
63 public function SWBegin(){
64 mysql_query("BEGIN",$this->link);
65 }
66
67 /** 回滚 */
68 public function rollBack(){
69 mysql_query("ROLLBACK",$this->link);
70 }
71
72 /** 提交事务 */
73 public function commit($getThis=false){
74 mysql_query("COMMIT",$this->link);
75 if($getThis){
76 return $this;
77 }else{
78 return null;
79 }
80 }
81 }
82
83 ?>
5,例子
1 <?php
2 /**
3 * Created by PhpStorm.
4 * User: 林冠宏
5 * Date: 2015/10/24
6 * Time: 11:23
7 */
8
9 include "Sql.php";
10 $sql = new Sql();
11
12 /** 往 aa 表中插入一批数据,注意建aa表的时候要选择 innoDB 引擎 */
13 for($i=0;$i<10;$i++){
14 $temp = $i."k";
15 $query = "insert into aa (a,w) values(\'$i\',\'$temp\')";
16 $sql->exec($query);
17 }
18
19 /** 下面的注释君请自行开启看效果 */
20 //$sql->rollBack(); /** 回滚的话,上面的所有insert不会被执行 */
21 //$sql->commit(); /** 不commit提交的话,上面的insert也不会被执行 */
22
23 /** select 操作不用commit也可以直接使用 结果集 */
24 /*
25 $result = $sql->exec("select * from aa");
26 while($row = mysql_fetch_assoc($result)){
27 print($row)."</br>";
28 }
29 */
30
31 ?>
以上是关于MySql - InnoDB - 事务 , Php版的主要内容,如果未能解决你的问题,请参考以下文章