(出处: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. JavaScript 对数据处理的5个API

    JavaScript对数据处理包括向上取整.向下取整.四舍五入.固定精度和固定长度5种方式,分别对应ceil,floor,round,toFixed,toPrecision等5个API,本文将对这5个 ...

  2. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  3. 深入理解JS 执行细节

    javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等 ...

  4. UML课程复习重点

    第一章 一.UML图示建模工具 二.UML--统一建模语言,以图形符号为基础,描述软件模型既简洁又清晰.它不是开发方法,是独立于任何开发方法之外的语言.它用于描述软件系统分析.设计和实施中的各种模型. ...

  5. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  6. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  7. dedecms 后台栏目添加图片

    前台调用栏目时需要显示图标,整理一下: 第一步:“系统->SQL命令工具” , 插入sql语句 alter table dede_arctype add typeimg varchar() 第二 ...

  8. mysql查询性能优化

    mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...

  9. 如何编译Zookeeper源码

    1. 安装Ant Ant下载地址:http://ant.apache.org/bindownload.cgi 解压即可. 2. 下载Zookeeper源码包 https://github.com/ap ...

  10. 在rem布局下使用背景图片以及sprite

    现在移动端页面用rem布局已经是一大流派了,成熟的框架如淘宝的flexiable.js,以及我的好友@墨尘写的更轻量级的hotcss.用rem作单位使得元素能够自适应后,还有一块需要关注的,那就是背景 ...