mysql 事务处理学习资料+示例说明
根据提供的文件信息,本文将详细解释MySQL事务处理的相关知识点,并结合具体的示例代码进行说明。 ### MySQL事务处理基础 在数据库操作中,事务处理是非常重要的一个环节,它能够确保数据的一致性和完整性。MySQL提供了完整的事务处理支持,尤其是在使用InnoDB存储引擎时,可以实现ACID(原子性、一致性、隔离性、持久性)事务特性。 #### 事务的基本概念 事务是作为单个逻辑工作单元执行的一系列操作。事务必须满足以下四个条件: 1. **原子性(Atomicity)**:事务中的所有操作要么全部完成,要么一个也不做。 2. **一致性(Consistency)**:事务始终使数据库从一个一致状态转换到另一个一致状态。 3. **隔离性(Isolation)**:并发执行的事务彼此之间不会干扰。 4. **持久性(Durability)**:一旦事务提交,即使发生系统崩溃,其对数据库的更改也是永久性的。 #### 事务控制语句 - **BEGIN**:开始一个新的事务。 - **ROLLBACK**:撤销当前事务中的所有更改。 - **COMMIT**:提交当前事务中的所有更改。 ### PHP与MySQL事务处理示例 #### 示例1:使用BEGIN/COMMIT/ROLLBACK ```php $conn = mysql_connect('localhost', 'root', 'root') or die("连接失败!!!"); mysql_select_db('test', $conn); mysql_query("set names 'GBK'"); // 设置编码为GBK // 开始一个新事务 mysql_query("BEGIN"); // 或者使用 "START TRANSACTION"; $sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')"; $sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')"; // 错误写法 $res = mysql_query($sql); $res1 = mysql_query($sql2); if ($res && $res1) { mysql_query("COMMIT"); echo '提交成功'; } else { mysql_query("ROLLBACK"); echo '回滚'; } // 结束事务 mysql_query("END"); // 此处应该是 COMMIT 或 ROLLBACK ``` #### 示例2:自动提交模式 ```php mysql_query("SET AUTOCOMMIT = 0"); // 关闭自动提交模式 $sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')"; $sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')"; // 错误写法 $res = mysql_query($sql); $res1 = mysql_query($sql2); if ($res && $res1) { mysql_query("COMMIT"); echo '提交成功'; } else { mysql_query("ROLLBACK"); echo '回滚'; } // 恢复自动提交模式 mysql_query("SET AUTOCOMMIT = 1"); ``` ### 自动提交模式 默认情况下,MySQL处于自动提交模式,这意味着每个SQL语句都会立即执行并提交。可以通过`SET AUTOCOMMIT = 0`来关闭自动提交模式,此时所有的更改都不会被提交,直到执行`COMMIT`命令。 ### MySQL存储引擎与事务 MySQL的不同存储引擎对于事务的支持也不同。例如,MyISAM不支持事务处理,而InnoDB支持完整的ACID事务。 #### 启用InnoDB支持 1. 如果默认使用的存储引擎是MyISAM,需要在配置文件`my.ini`中取消注释`skip-InnoDB`行。 2. 重启MySQL服务。 3. 使用`SHOW ENGINES`检查InnoDB是否已启用。 4. 将表的存储引擎更改为InnoDB: ```sql ALTER TABLE table_name ENGINE = InnoDB; ``` ### 表锁 除了事务之外,MySQL还提供了表级锁定机制。`LOCK TABLES`用于锁定一张或多张表,阻止其他事务访问这些表,直到使用`UNLOCK TABLES`解锁。 ```php mysql_query("LOCK TABLES `user` WRITE"); // 锁定表`user`以写入模式 $sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')"; $res = mysql_query($sql); if ($res) { echo '插入成功!'; } else { echo '插入失败!'; } mysql_query("UNLOCK TABLES"); // 解锁表 ``` 以上就是关于MySQL事务处理的学习资料及示例说明,希望对你有所帮助。通过理解和掌握这些基本概念和操作,你可以更好地利用MySQL的强大功能来管理数据。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
***:一般MYSQL数据库默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
方法如下:1.修改c:\appserv\mysql\my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。
2.在运行中输入:services.msc,重启mysql服务。
3.到phpmyadmin中,mysql->show engines;(或执行mysql->show variables like 'have_%'; ),查看InnoDB为YES,即表示数据库支持InnoDB了。
也就说明支持事务transaction了。
4.在创建表时,就可以为Storage Engine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->alter table table_name type=InnoDB;
或 mysql->alter table table_name engine=InnoDB;来改变数据表的引擎以支持事务。
*/
/*************** transaction--1 ***************/
$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Unity In-game Debug Console
- (3292010)Java图书管理系统(源码)
- 新建 Microsoft Word 文档
- (176102016)MATLAB代码:考虑灵活性供需不确定性的储能参与电网调峰优化配置 关键词:储能优化配置 电网调峰 风电场景生成 灵活性供需不
- SINAMICS S120驱动第三方直线永磁同步电机系列视频-配置和优化.mp4
- (175601006)51单片机交通信号灯系统设计
- Starter SINAMICS S120驱动第三方直线永磁同步电机系列视频-调试演示.mp4
- (174755032)抽烟、烟雾检测voc数据集
- 基于滑膜控制的差动制动防侧翻稳定性控制,上层通过滑膜控制产生期望的横摆力矩,下层根据对应的paper实现对应的制动力矩分配,实现车辆的防侧翻稳定性控制,通过通过carsim和simulink联合仿真
- 伺服系统基于陷波滤波器双惯量伺服系统机械谐振抑制matlab Simulink仿真 1.模型简介 模型为基于陷波滤波器的双惯量伺服系统机械谐振抑制仿真,采用Matlab R2018a Simul