(出处:http://www.cnblogs.com/linguanh/)

1,前序

  由于要重构APP(社交类) 服务端接口的部分代码,故接触到了 innoDB,以及事务这个词,下面主要是以例子的形式显示它的用法,理论的东西不过多讲述。

2,何为事务

  鄙人在编程方面的解释:多条命令操作放在一起处理 , 例如提交的时候一起提交,撤销的时候也是一起撤销,书本对这个词的定义内容很多。

3,myisam 与 innoDB

  它们都是mysql数据库的引擎,我们一般建表默认的是 myisam 引擎,比较:http://www.cnblogs.com/vicenteforever/articles/1613119.html,个人认为,类似于insert、update、delete 这种操作如果涉及多表或单表互联操作的情况,为了避免数据写脏,请使用事务。因为整个过程中若一条错误,便可以回滚到开始时的状态。

4,分享个基于php的类

 <?php

 /**
* Created by PhpStorm.
* User: 林冠宏
* Date: 2016/4/28
* Time: 10:20
*/
include "Config.php"; /** 数据库配置信息类,自行完善 */ class Sql{
public $link = null;
private $config = null;
/**
* 是否直接开启事务
*/
public function Sql($begin = false){
$this->config = new Config();
$this->connect();
mysql_query("SET AUTOCOMMIT=0",$this->link); /** 设置不自动提交,默认是自动提交 */
if($begin){
$this->SWBegin();
}
} public function connect(){
$this->link = mysql_connect($this->config->host,$this->config->user,$this->config->pw); /** 连接数据库 */
mysql_query("SET NAMES 'utf8'",$this->link); /** 经验总结,使用mysql设置页面编码,最好等链接了,再设置,意思是在连库函数后面使用 */ if(!$this->link){
exit("connect_dataBase_wrong");
}
if(!mysql_select_db($this->config->db,$this->link)){
exit("select_db_wrong");
}
} /**
* 命令、是否判断行数、出错是否自动启用回滚、链式提交
*/
public function exec($query,$judgeLength=false,$rollBack = false,$isCommit=false){
$res = mysql_query($query,$this->link);
if($judgeLength){ /** 是否判断行数 */
if(mysql_num_rows($res)<=0){
return null;
}
}else{
if(!$res){
if($rollBack) {
$this->rollBack();
}
exit($query); /** 抛出出错的 sql 语句 */
}
}
if($isCommit){
return $this;
}else{
return $res;
}
} /** 开始事务 */
public function SWBegin(){
mysql_query("BEGIN",$this->link);
} /** 回滚 */
public function rollBack(){
mysql_query("ROLLBACK",$this->link);
} /** 提交事务 */
public function commit($getThis=false){
mysql_query("COMMIT",$this->link);
if($getThis){
return $this;
}else{
return null;
}
}
} ?>

5,例子

 <?php
/**
* Created by PhpStorm.
* User: 林冠宏
* Date: 2015/10/24
* Time: 11:23
*/ include "Sql.php";
$sql = new Sql(); /** 往 aa 表中插入一批数据,注意建aa表的时候要选择 innoDB 引擎 */
for($i=0;$i<10;$i++){
$temp = $i."k";
$query = "insert into aa (a,w) values('$i','$temp')";
$sql->exec($query);
} /** 下面的注释君请自行开启看效果 */
//$sql->rollBack(); /** 回滚的话,上面的所有insert不会被执行 */
//$sql->commit(); /** 不commit提交的话,上面的insert也不会被执行 */ /** select 操作不用commit也可以直接使用 结果集 */
/*
$result = $sql->exec("select * from aa");
while($row = mysql_fetch_assoc($result)){
print($row)."</br>";
}
*/ ?>

 

MySql - InnoDB - 事务 , Php版的更多相关文章

  1. 搞懂MySQL InnoDB事务ACID实现原理

    前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...

  2. Mysql InnoDB事务

    http://www.cnblogs.com/benshan/archive/2013/01/19/2867244.html 事务的四个特性 1.原子性(atomicity)原子性是指整个数据库事务是 ...

  3. MySQL InnoDB 事务实现过程相关内容的概述

    MySQL事务的实现涉及到redo和undo以及purge,redo是保证事务的原子性和持久性:undo是保证事务的一致性(一致性读和多版本并发控制):purge清理undo表空间背景知识,对于Inn ...

  4. 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)

    这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...

  5. MySQL——InnoDB事务

    事务:全部成功 或 全部失败! ------------------------------------------------------------------------------------ ...

  6. mysql innodb事务的ACID及其实现的保证机制

    MySQL事务的ACID,一致性是最终目的.保证一致性的措施有:A原子性:靠undo log来保证(异常或执行失败后进行回滚).D持久性:靠redo log来保证(保证当MySQL宕机或停电后,可以通 ...

  7. MySQL InnoDB四个事务级别 与 脏读、不反复读、幻读

    MySQL InnoDB事务隔离级别脏读.可反复读.幻读 希望通过本文.能够加深读者对ySQL InnoDB的四个事务隔离级别.以及脏读.不反复读.幻读的理解. MySQL InnoDB事务的隔离级别 ...

  8. MySQL InnoDB MVCC

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

  9. MySQL InnoDB 实现高并发原理

    MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...

随机推荐

  1. UWP中实现自定义标题栏

    UWP中实现自定义标题栏 0x00 起因 在UWP开发中,有时候我们希望实现自定义标题栏,例如在标题栏中加入搜索框.按钮之类的控件.搜了下资料居然在一个日文网站找到了一篇介绍这个主题的文章: http ...

  2. [Java 缓存] Java Cache之 DCache的简单应用.

    前言 上次总结了下本地缓存Guava Cache的简单应用, 这次来继续说下项目中使用的DCache的简单使用. 这里分为几部分进行总结, 1)DCache介绍; 2)DCache配置及使用; 3)使 ...

  3. 在.Net中实现自己的简易AOP

    RealProxy基本代理类 RealProxy类提供代理的基本功能.这个类中有一个GetTransparentProxy方法,此方法返回当前代理实例的透明代理.这是我们AOP实现的主要依赖. 新建一 ...

  4. 用FSM一键制作逐帧动画雪碧图 Vue2 + webpack

    因为工作需要要将五六十张逐帧图拼成雪碧图,网上想找到一件制作工具半天没有找到,就自己用canvas写了一个. 写成之后就再没有什么机会使用了,因此希望有人使用的时候如果遇到bug了能及时反馈给我. 最 ...

  5. C#调用C++代码遇到的问题总结

    最近在开发服务后台的时候,使用c#调用了多个c++编写的dll,期间遇到了一系列的问题,经过一番努力最后都一一解决了,在此做个总结,方便以后参考,毕竟这些问题也都是很常见的,主要有以下问题: 类型对照 ...

  6. 6_Win7下Chrome主页被流氓网站hao123.com劫持后的解决方法。

    今天安装了一个PDF阅读器,免费的,你懂的,结果自己安装的时候没有将默认的选项取消,就被hao123流氓网站劫持啦. 说实话某免费PDF阅读器还算好的,有一个可以供你选择的项.不想某些软件直接就默认选 ...

  7. C#语法糖大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  8. Android程序中--不能改变的事情

    有时,开发人员会对应用程序进行更改,当安装为以前版本的更新时出现令人惊讶的结果 - 快捷方式断开,小部件消失或甚至根本无法安装. 应用程序的某些部分在发布后是不可变的,您可以通过理解它们来避免意外. ...

  9. Linux 权限设置chmod

    Linux中设置权限,一般用chmod命令 1.介绍 权限设置chmod 功能:改变权限命令.常用参数: 1=x(执行权execute) 2=w(写权write) 4=r(读权Read) setuid ...

  10. hibernate5.2需要的最少jar文件

    hibernate5.2需要的最少jar文件: required文件夹中的所有jar文件 + mysql-connector-java-bin.jar.