MySql - InnoDB - 事务 , Php版

(出处:https://cloud.tencent.com/developer/user/1148436/activities)

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 ?>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式系统和大数据处理

使用Spark进行数据统计并将结果转存至MSSQL

在 使用Spark读取Hive中的数据 中,我们演示了如何使用python编写脚本,提交到spark,读取并输出了Hive中的数据。在实际应用中,在读取完数据后...

1792
来自专栏xingoo, 一个梦想做发明家的程序员

开启服务和停止服务

Start函数用于开启服务 1 初始化状态变量 2 创建监听套接字 3 加载使用扩展API函数 4 创建完成端口对象 5 建立监听套接字和完成端口对象间的关联 ...

2628
来自专栏程序员的SOD蜜

不使用DalFactory和IDAL,支持多种数据库应用

MS的PetShop示例应用程序的“多层架构”被很多.NET开发人员奉为经典的架构,我以前做的项目团队的Leader也是照搬它的,甚至来到现在这个公司后,好几个...

1878
来自专栏iOS122-移动混合开发研究院

写给iOS小白的MVVM教程(序)

这几天,需要重构下部分代码,这里简要记录下.但是涉及的技术要点还是很多,所以分为多个篇章叙述.此教程来源于,并将于应用于实践,不做过多的概念性阐释和争论.每个篇...

18410
来自专栏程序员的SOD蜜

使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题

最近给客户做了基于SQLServer的发布订阅的“读写分离”功能,但是某些表数据很大,经常发生某几条数据丢失的问题,导致订阅无法继续进行。但是每次发现问题重新做...

2727
来自专栏欧阳大哥的轮子

Windows服务编程

一、服务(Service) 服务程序是NT系统支持的一种可执行文件,通常服务程序不与用户进行交互,在系统启动时会自动启动服务程序。所有的服务程序都由SCM进行...

793
来自专栏云计算

腾讯云支持 Terraform 开发实践

这篇文章从系统架构开始,到核心库讲解,到实践开发,再到单元测试,比较完整的描述了支持Terraform的开发全过程。

2.7K16
来自专栏女程序员的日常

M41T11-RTC(实时时钟)

一、理论准备 1. 主要器件:STM8单片机、M41T11时钟IC、32.768kHz晶振等。 2. 外围设备:烧录工具ST-Link/v2、串口、5v供电SA...

1891
来自专栏Android开发实战

WorkManager _Android新架构组件

5月8号, I/O大会上推出了Architeture新组件WorkManager。 由于Android版本的不断更新,后台任务的处理变得越来越复杂。 因此,Go...

812
来自专栏乐沙弥的世界

SQL server 数据导入导出BCP工具使用详解

    数据的导入导出是数据库管理员常见的工作任务之一,尤其是平面文件的导入导出。BCP 工具则为这些任务提供了强有力的支持,它是基于DB-Library,尤其...

982

扫码关注云+社区