mysql本身没这个功能,你要自己模拟了

解决方案 »

  1.   

    mysql支持!但需要在建立表时,选择支持事务功能的表类型。如innoDB或BDB。同时需要在安装mysql时安装inioDB,DDB扩展模块。
      

  2.   

    偶也没有用过。
    暂时还没有用到这个功能。
    可能参考
    http://www.phpe.net/mysql_manual/06-7.html#COMMIT
      

  3.   

    ...数据库连接...
    mysql_query('BEGIN'); 开启事务$SQL = "...";
    mysql_query($SQL);
    if(mysql_errno) {
      print mysql_error();
      mysql_query('ROLLBACK');  出错就回卷
      exit();
    }
    ... 可以重复上述自 $SQL = "..."; 开始的过程(中间可以加入其他操作,不局限于数据库更新,但是注意,最好不要让一个事务时间过长,因为它锁定所有你用到的表,会影响其他程序使用) ...
    你也可以在几条正确的sql更新语句后故意写一句错误的,看看是否回卷了。mysql_query('COMMIT'); 能够到这里,代表上述数据库操作都没有错,正式提交执行如果mysql版本太低还没有事务支持,只能锁定那些表来替代。
    还有就是注意要建立能用事务操作的表类型。以及除了 commit 外还有什么语句能结束一个事务。看帮助吧。
      

  4.   

    如果mysql版本太低还没有事务支持,只能锁定那些表来替代。
    怎么用“锁定那些表来替代”?能讲一个例子吗?
      

  5.   

    mysql的innodb支持事务处理的Suppose that you have started the MySQL client with the command mysql test. To create an InnoDB table, you must specify and ENGINE = InnoDB or TYPE = InnoDB option in the table creation SQL statement: CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB;
    CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) TYPE=InnoDB;
    操作的时候
    begin
    rollback
    commit
    15.7.1. How to Use Transactions in InnoDB with Different APIs
    By default, each client that connects to the MySQL server begins with autocommit mode enabled, which automatically commits every SQL statement you run. To use multiple-statement transactions, you can switch autocommit off with the SQL statement SET AUTOCOMMIT = 0 and use COMMIT and ROLLBACK to commit or roll back your transaction. If you want to leave autocommit on, you can enclose your transactions between START TRANSACTION and COMMIT or ROLLBACK. Before MySQL 4.0.11, you have to use the keyword BEGIN instead of START TRANSACTION. The following example shows two transactions. The first is committed and the second is rolled back. shell> mysql test
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5 to server version: 3.23.50-log
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql> CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A))
        -> TYPE=InnoDB;
    Query OK, 0 rows affected (0.00 sec)
    mysql> BEGIN;
    Query OK, 0 rows affected (0.00 sec)
    mysql> INSERT INTO CUSTOMER VALUES (10, 'Heikki');
    Query OK, 1 row affected (0.00 sec)
    mysql> COMMIT;
    Query OK, 0 rows affected (0.00 sec)
    mysql> SET AUTOCOMMIT=0;
    Query OK, 0 rows affected (0.00 sec)
    mysql> INSERT INTO CUSTOMER VALUES (15, 'John');
    Query OK, 1 row affected (0.00 sec)
    mysql> ROLLBACK;
    Query OK, 0 rows affected (0.00 sec)
    mysql> SELECT * FROM CUSTOMER;
    +------+--------+
    | A    | B      |
    +------+--------+
    |   10 | Heikki |
    +------+--------+
    1 row in set (0.00 sec)
    mysql>In APIs like PHP, Perl DBI/DBD, JDBC, ODBC, or the standard C call interface of MySQL, you can send transaction control statements such as COMMIT to the MySQL server as strings just like any other SQL statements such as SELECT or INSERT. Some APIs also offer separate special transaction commit and rollback functions or methods.