`

php 在 控制 mysql 事务中的方法

    博客分类:
  • php
阅读更多

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 ***************/

       /* 方法一 */

mysql_query("BEGIN"); // 或者 mysql_query("START TRANSACTION");

       // 若不使用事務,則 $sql 執行成功, $sql1 執行失敗   

       $sql = " insert into test values('11','88') ";

      $sql1 = " insert into test values('11','88','444') ";

       $res = mysql_query($sql);

       $res1 = mysql_query($sql1);  

    // 因爲使用了事務,則兩個 insert 都執行失敗

       if($res && $res1){

          mysql_query("COMMIT");

       }

       else{

          mysql_query("ROLLBACK");

       }

       mysql_query("END");

/**************** transaction--2 *******************/

/* 方法二 */

mysql_query("SET AUTOCOMMIT=0"); // 設置 mysql 不自動提交,需自行用 commit 語句提交

       $sql = " insert into test values('11','88') ";

       $sql1 = " insert into test values('11','88','444') ";

       $res = mysql_query($sql);

       $res1 = mysql_query($sql1);  

    // 因爲使用了事務,則兩個 insert 都執行失敗

       if($res && $res1){

          mysql_query("COMMIT");

       }

       else{

          mysql_query("ROLLBACK");

       }

       mysql_query("END");

/*************************** END ***************/

 

对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:

代码如下:

//MyISAM & InnoDB 都支持,
//Notes:query語句不能寫在一起如:mysql_query("select * from a;select * from b;");

$sql_1=" LOCK TABLES test WRITE ";
mysql_query($sql_1);

$sql_2=" INSERT INTO test VALUES('".$a."','".$b."') ";
if(mysql_query($sql_2)){
        echo 'successful!';
    }else{
        echo 'Unsuccessful!';
    }

    $sql_3=" UNLOCK TABLES ";
    mysql_query($sql_3);

/*************************** END ***************/

分享到:
评论

相关推荐

    mySQL事务处理

    } 通常都是上述的写法, 在mysql 不支持事务的时候 , 中间的 setAutoCommit 的事务操作是不是都不生效. 现在innoDB支持 事务了, 上述的 java 代码是否能实现 以下的 事务隔离的 操作, 在修改的时候处于锁定状态 ...

    PHP MySQL 与 MsSQL 中的事务

    在PHP中使用MySQL事务,通常涉及到几个关键函数:`mysql_query()`、`mysql_rollback()` 和 `mysql_commit()`。下面通过示例代码来详细说明: ```php // 开启事务 mysql_query("SET AUTOCOMMIT=0"); mysql_query(...

    php实现mysql事务处理的方法

    本文实例讲述了php实现mysql事务处理的方法。分享给大家供大家参考。具体分析如下: 要实现本功能的条件是环境 mysql 5.2 /php 5 支持事务的table 类型,需要InnoDB,有了这些条件你就可以做上面的实现了,这个事物回滚...

    Apache+mysql+php

    在WAMP环境中,Apache负责接收HTTP请求并返回响应,PHP作为Apache的模块,解析.php文件中的代码并生成动态内容,而MySQL则作为数据存储的后端,保存和处理来自应用程序的数据。 安装与配置WAMP服务器通常涉及以下...

    PHP6与MySQL5-php6.rar

    1. **连接与断开**:通过`mysqli_connect()`或`PDO`扩展在PHP中建立与MySQL服务器的连接,完成后使用`mysqli_close()`或`PDO::disconnect()`断开连接。 2. **SQL查询**:PHP可以执行SQL语句来操作数据库,如`SELECT`...

    基于MySQL和PHP的分布式事务处理.pdf

    这些扩展提供了原生支持事务的功能,可以通过设置`PDO::ATTR_AUTOCOMMIT`选项为`false`来开启事务模式,然后使用`beginTransaction()`、`commit()`和`rollBack()`等方法来控制事务的生命周期。 ##### 3.3 实现案例...

    新手学习,php7中mysql数据库操作类实例,非常清晰易懂

    在PHP7中,MySQL数据库操作通常使用mysqli或PDO_MySQL扩展进行,但对于新手来说,创建一个封装好的数据库操作类可以简化很多工作。这个实例主要介绍如何构建一个PHP7中的MySQL数据库操作类,以实现连接、查询、插入...

    Practical PHP and MySQL(php Mysql实战案例)

    1. PHP基础:本书首先会介绍PHP的基本语法,包括变量、数据类型、流程控制结构(如if-else,for,while循环)、函数、数组等,以及如何在HTML中嵌入PHP代码进行动态网页开发。 2. MySQL入门:接着,书中将讲解MySQL...

    php_pdo_mysql.dll_dll_PDO_MYSQL_php_

    这些标签说明了讨论的内容集中在如何在PHP环境中使用DLL文件来通过PDO接口操作MySQL数据库。 在压缩包中的文件 "php_pdo_mysql.dll" 是实际的扩展库文件,它是PHP在Windows平台上执行MySQL数据库操作时必须的。另一...

    PHP and MySQL Web Development(Fourth Edition)

    在结合PHP和MySQL进行Web开发部分,本书涵盖了连接和断开数据库、执行SQL查询、处理结果集以及事务管理等内容。此外,还讨论了如何使用PHP的预处理语句防止SQL注入攻击,确保应用程序的安全性。 随着Web应用复杂性...

    PHP+MYSQL网站

    在PHP+MySQL组合中,MySQL负责存储和处理网站的数据,如用户信息、文章内容等。通过SQL(Structured Query Language)语句,开发者可以对数据进行查询、插入、更新和删除操作。MySQL还支持事务处理,确保数据的一致...

    Head First PHP & MySQL 电子书和源码.rar

    电子书将涵盖PHP的基本语法,如变量、数据类型、流程控制结构、函数等,同时也会介绍MySQL的安装、配置、数据库和表的创建、数据的增删改查以及更高级的主题,如事务处理、存储过程和触发器等。书中会通过丰富的实例...

    php Mysql 开发 字典 大全

    2. **PHP连接MySQL**:使用`mysqli`或`PDO`扩展在PHP中建立与MySQL数据库的连接,执行SQL语句。 3. **SQL基础**:掌握SQL语言的基本语法,如SELECT、INSERT、UPDATE、DELETE等操作,以及JOIN、WHERE、GROUP BY、...

    PHP+MySQL编程实例:PHP+MySQL编程实例.rar

    在IT行业中,PHP和MySQL是两个非常重要的技术,它们共同构建了互联网上众多动态网站的基础。PHP是一种服务器端脚本语言,广泛用于网页开发,而MySQL则是一款关系型数据库管理系统,用于存储和管理网站的数据。...

    Mysql 5.1 中文手册

    9. **程序接口**:MySQL提供了多种编程语言的API,如ODBC、JDBC、PHP和Python,这部分会介绍如何在这些语言中连接和操作MySQL数据库。 10. **附录和参考**:包含各种系统变量、函数、错误代码和配置选项的详细列表...

    PHP MYSQL操作类

    在PHP开发中,与MySQL数据库进行交互是常见的需求。为了方便高效地处理数据库操作,开发者通常会封装一个MySQL操作类,如`PHP_DataSet`。这个类可以提供一系列的方法,包括连接数据库、执行SQL语句、获取结果集、...

    PHP+MYSQL教程

    此外,你还将学习如何安全地在PHP中操作MySQL,以及如何调试和优化代码。 总之,通过本教程的学习,你将具备使用PHP和MySQL开发Web应用的能力,无论是初学者还是有一定经验的开发者,都能从中受益。请参照“PHP培训...

    php下pdo的mysql事务处理用法实例

    通过以上步骤,我们可以确保在PHP中使用PDO进行MySQL事务处理时,能够有效地控制数据的完整性和一致性。在实际项目中,事务处理是防止数据损坏和确保业务逻辑正确性的重要手段。了解和熟练掌握PDO的事务处理机制,...

    php手册和mysql手册CHM

    对于高级用户,手册还会讲解事务处理、并发控制和性能优化策略,确保开发者能够充分利用MySQL的强大功能。 PHP与MySQL的结合是Web开发中的常见实践,它们共同构成了动态网站的基础。通过PHP,开发者可以在服务器端...

Global site tag (gtag.js) - Google Analytics