MySql - InnoDB - 事务 , Php版
(出处: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版的更多相关文章
- 搞懂MySQL InnoDB事务ACID实现原理
前言 说到数据库事务,想到的就是要么都做修改,要么都不做.或者是ACID的概念.其实事务的本质就是锁和并发和重做日志的结合体.那么,这一篇主要讲一下InnoDB中的事务到底是如何实现ACID的. 原子 ...
- Mysql InnoDB事务
http://www.cnblogs.com/benshan/archive/2013/01/19/2867244.html 事务的四个特性 1.原子性(atomicity)原子性是指整个数据库事务是 ...
- MySQL InnoDB 事务实现过程相关内容的概述
MySQL事务的实现涉及到redo和undo以及purge,redo是保证事务的原子性和持久性:undo是保证事务的一致性(一致性读和多版本并发控制):purge清理undo表空间背景知识,对于Inn ...
- 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
- MySQL——InnoDB事务
事务:全部成功 或 全部失败! ------------------------------------------------------------------------------------ ...
- mysql innodb事务的ACID及其实现的保证机制
MySQL事务的ACID,一致性是最终目的.保证一致性的措施有:A原子性:靠undo log来保证(异常或执行失败后进行回滚).D持久性:靠redo log来保证(保证当MySQL宕机或停电后,可以通 ...
- MySQL InnoDB四个事务级别 与 脏读、不反复读、幻读
MySQL InnoDB事务隔离级别脏读.可反复读.幻读 希望通过本文.能够加深读者对ySQL InnoDB的四个事务隔离级别.以及脏读.不反复读.幻读的理解. MySQL InnoDB事务的隔离级别 ...
- MySQL InnoDB MVCC
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
- MySQL InnoDB 实现高并发原理
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 My ...
随机推荐
- SSH实战 · 唯唯乐购项目(下)
后台模块 一:后台用户模块 引入后台管理页面 创建adminuser表: CREATE TABLE `adminuser` ( `uid` int(11) NOT NULL AUTO_INCREM ...
- C语言 · 时间转换
问题描述 给定一个以秒为单位的时间t,要求用"<H>:<M>:<S>"的格式来表示这个时间.<H>表示时间,<M>表示分 ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- System.FormatException: GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。
在NHibernate数据库查询中出现了这个错误,由于是数据库是mysql的,当定义的字段为char(36)的时候就会出现这个错误. [解决方法] 将char(36) 改成varchar(40)就行了 ...
- 神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观
前言 哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本 ...
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
- nodejs模块发布及命令行程序开发
前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...
- [原] KVM 环境下MySQL性能对比
KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...
- 工行ICBC_WAPB_B2C支付接口
一. 前期准备 手机银行(WAP)B2C在线支付接口说明V1.0.0.6.doc 手机银行移动生活商户及门户网站js接口API.doc 支付组件ICBCEBankUtil.dll和infosecapi ...
- 【SAP业务模式】之ICS(七):IDOC配置
这是ICS业务模式系列的最后一篇了,主要讲解IDOC的配置. 一.指定EDI传输的供应商逻辑地址 事务代码:WEL1 注意:上面逻辑地址是生产公司+内部客户.有以下两种情形: 1.如果内部客户都是纯数 ...