支持事务处理的表必须是BDB类型
SET AUTOCOMMIT=0
BEGIN;
UPDATE table1 SET field1='aaa' WHERE type=1;
UPDATE table2 SET field2='bbb' WHERE type=1;
COMMIT;//或ROLLBACK;

解决方案 »

  1.   

    INNODB也可以,但是MYSQL目前还不支持TWO-PHASE transaction
    使用方法同上
      

  2.   

    我在事务中用insert可以么??
      

  3.   

    那我怎么在MySQL的客户端输入呢??我输入一条,它就执行一条,怎么能将一个事物的那些语句一起输入呢??
      

  4.   

    在客户端也是一样,在BEGIN后执行的语句,只有当执行了COMMIT后才真正写入硬盘!他们相当于一个不可分割的原子操作。
      

  5.   

    还是有些不明白~~~~
    我在MySQL中建立了个表tmp
    tmp的表结构是这样的:
    mysql> describe tmp;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) |      | PRI | 0       |       |
    | data  | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    2 rows in set (0.00 sec)然后我做了如下的操作(最开始表格中没有记录)
    mysql> select * from tmp;
    Empty set (0.00 sec)mysql> begin;
    Query OK, 0 rows affected (0.00 sec)mysql> insert into tmp(id,data) values(1,1);
    Query OK, 1 row affected (0.00 sec)mysql> insert into tmp(id,data) values(1,1);
    ERROR 1062: Duplicate entry '1' for key 1
    mysql> commit;
    Query OK, 0 rows affected (0.00 sec)那因为关键字的原因,这个事务应该不会插入任何纪录,tmp表应该还是空的
    可是
    mysql> select * from tmp;
    +----+------+
    | id | data |
    +----+------+
    |  1 |    1 |
    +----+------+
    1 row in set (0.00 sec)
    这是为什么呀?!?!
      

  6.   

    如果发现错误,不要用COMMIT;改用ROOLBACK;
      

  7.   

    好像mysql不支持事务回滚哦~~~
      

  8.   

    改用rollback出现了如下的错误:
    mysql> rollback;
    ERROR 1196: Warning:  Some non-transactional changed tables couldn't be rolled back
      

  9.   

    楼上几位说的都是help文档中说的,但是只有这些资料还是不能实现事务的,首先要用mysqld什么的命令启动它的console模式(这个dos窗口不能关闭),然后建立表的时候用innodb,具体的命令等国庆结束后贴上来,因为我的同事最近正好在搞这个东西。
      

  10.   

    太简单了点罢..
    windows下把mysqld-max.exe注册成服务
    mysqld-max.exe -install
    然后启动服务之后建表类型为innodb(mysql官方 推荐).
    操作步骤如同binscut所描述
    SET AUTOCOMMIT=0
    BEGIN;
    UPDATE table1 SET field1='aaa' WHERE type=1;
    UPDATE table2 SET field2='bbb' WHERE type=1;
    COMMIT;//或ROLLBACK;注:需mysql-max版本
      

  11.   

    hummerking
    建议你用show table status 看看自己的tmp表是什么类型