php mysql事务

这里记录一下php操作mysql事务的一些知识

要知道,MySQL默认的行为是在每条SQL语句执行后执行一个COMMIT语句,从而有效的将每条语句独立为一个事务。但是,在使用事务时,是需要执行多条sql语句的,那么针对执行多条SQL语句来完成一个事务有两种办法:

1、关闭自动提交

如果SET AUTOCOMMIT=0;也就是关闭了自动提交,那么任何commit或rollback语句都可以触发事务提交;如果SET AUTOCOMMIT=1;也就是开启了自动提交(默认值),那么必须要以begin或者START TRANSACTION声明事务的开始,然后再以commit或rollback语句都可以触发事务提交。

例子:

[php] view plaincopy

  1. $db->query(‘SET autocommit=0‘);
  2. $db->query(‘update member set money=money+‘.$money.‘ where memberId=‘.$memberId);
  3. $db->query(‘insert into mem_log(money) values(‘.$money.‘)‘);
  4. $db->query(‘commit‘);
  5. $db->query(‘insert into test(str) values(‘.sql_encode($msg).‘)‘);//该条数据无法插入。因为autocommit=0

因此使用该方法时,注意,在事务结束。要恢复autocommit的值。

[php] view plaincopy

  1. $db->query(‘SET autocommit=0‘);
  2. $db->query(‘update member set money=money+‘.$money.‘ where memberId=‘.$memberId);
  3. $db->query(‘insert into mem_log(money) values(‘.$money.‘)‘);
  4. $db->query(‘commit‘);
  5. $db->query(‘SET autocommit=1‘);
  6. $db->query(‘insert into test(str) values(‘.sql_encode($msg).‘)‘);//恢复autocommit=1后,该语句可成功插入

2、显示打开一个事务

显示打开一个事务,就比上面的方法要简单些,不需要设置autocommit的值,也不用在事务结束后恢复autocommit的值。即,如果想保留autocommit开关打开,则通过begin或者START TRANSACTION声明事务,声明后,autocommit开关将会被禁用,直到您使用COMMIT或ROLLBACK结束事务为止,事务结束,autocommit开关将被打开。

[php] view plaincopy

  1. $db->query(‘START TRANSACTION‘);
  2. $db->query(‘update member set money=money+‘.$money.‘ where memberId=‘.$memberId);
  3. $db->query(‘insert into mem_log(money) values(‘.$money.‘)‘);
  4. $db->query(‘commit‘);
  5. $db->query(‘insert into test(str) values(‘.sql_encode($msg).‘)‘);//该条数据可以插入
时间: 2024-10-14 09:10:06

php mysql事务的相关文章

数据库-mysql事务

MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行. 事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(A

MySQL 事务

MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务. 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行. 事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(A

MySQL事务详解

事务:Transaction 多个sql语句,要么同时都执行,要么同时都不执行 事务就是一组原子性的(select)查询语句,也即将多个查询当作一个独立的工作单元 ACID测试:能够满足ACID测试就表示其支持事务,或兼容事务 A:Atomicity,原子性,都执行或者都不执行 C:Consistency,一致性,从一个一致性状态转到另外一个一致性状态 I:Isolaction,隔离性.一个事务的所有修改操作在提交前对其他事务是不可见的 D: Durability, 持久性,一旦事务得到提交,其

Mysql事务&字符集

Mysql事务 Innodb存储引擎的中的事务完全服务ACID: 原子性.2.一致性.3.隔离性.4.持久性 理解上和oracle类似. 事务隔离级别 1.Read uncommitted 读未提交: 2.Read committed 读已提交: 3.Repeatable read 可重复读,类似oracle利用undo的闪回查询: 4.Serializable 串行读,很少用. 隔离级别的修改: 通过set命令: 通过修改配置文件,启动数据库的默认隔离级别-mysqld Mysql字符集 My

MYSQL事务及存储引擎对比

Innodb支持事务,而myisam不支持事务. 事务的定义: 当多个用户访问同一份数据时,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据的更新从一个一致性状态变更为另一个一致性状态,这时有必要引入事务的概念. Mysql提供了多种引擎支持Innodb和BDB.Innodb存储引擎事务主要通过UNDO日志和REDO日志实现,Myisam和memory引擎则不支持事务.下图分别给出三种mysql引擎的区别和特性: Myisam存储引擎:由于该引擎不支持事务.也不支持外键,所以

十、mysql事务的简介

1. myisam跟memory支持表级别锁定 BDB 页级锁定 Innodb 行级锁定 2.表锁(不是表嫂哈) lock table read //只读表锁,也就是说执行了这个锁后,锁内的操作只能为读操作 select * from ..... unlock tables; lock table write //读写表锁,可读可写 insert ... update ... select ... delete ... unlock tables; PS::表被锁定后,其他连接的操作将被挂起,直

查询mysql事务隔离级别

查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava 1.查看当前会话隔离级别 select @@tx_isolation; 2.查看系统当前隔离级别 select @@global.tx_isolation; 3.设置当前会话隔离级别 set session transaction isolatin level repeatable read; 4.设置系统当前隔离级别 s

MySQL 事务功能

MySQL 事务功能 事务:  1.介绍 ★事务: 一组原子性的SQL查询.或者是一个或多个SQL语句组成的独立工作单元: ★ACID测试: ☉A:AUTOMICITY,原子性: 整个事务中的所有操作要么全部成功执行,要么全部失败后回滚: ☉C:CONSISTENCY,一致性: 数据库总是应该从一个一致性状态转为另一个一致性状态: ☉I:ISOLATION,隔离性: 一个事务所做出的操作在提交之前,是否能为其它事务可见:出于保证并发操作之目的,隔离有多种级别: ☉D:DURABILITY,持久性

Mysql事务-隔离级别

MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被视为一个不可分割的单元: 一致性(Consistency):数据库总是从一种状态切换到另一种状态: 隔离性(Isolation):通常来说,事务在提交前对于其他事务不可见: 持久性(Durablity):一旦事务提交,所做修改永久保存数据库: 事务最常用的例子就是银行转账.假设polo需给lynn转

PHP mysql事务问题实例分析

本文实例分析了PHP的mysql事务问题.分享给大家供大家参考,具体如下: 对于myisam数据库,可以控制事务的进行: $mysqlrl = mysql_connect ( $db_config ["host"], $db_config ["user"], $db_config ["pass"], true ); if (! $mysqlrl) { $msg = mysql_error (); die ( 'Could not connect: