mysql reference manual for version 4.1.0-alpha.
6.7 mysql 事务与锁定命令
6.7.1 begin/commit/rollback 句法
缺省的,mysql 运行在 autocommit 模式。这就意味着,当你执行完一个更新时,mysql 将立刻将更新存储到磁盘上。
如果你使用事务安全表 (例如 innodb、bdb),通过下面的命令,你可以设置 mysql 为非 autocommit 模式:
set autocommit=0
在此之后,你必须使用 commit 来存储你的更改到磁盘上,或者使用 rollback ,如果你希望忽略从你的事务开始所做的更改。
如果你希望为一系列语句从 autocommit 模式转换,你可以使用 start transaction 或 begin 或 begin work 语句:
start transaction; select @a:=sum(salary) from table1 where type=1; update table2 set summmary=@a where type=1; commit;
start transaction 在 mysql 4.0.11 中被加入;这是被推荐的开始一个特别(ad-hoc)事务的方式,因为这是 ansi sql 句法。
注意,如果你使用的是一个非事务安全表,更改会立刻被存储,不受 autocommit 模式状态的约束。
当你更新了一个非事务表后,如果你执行一个 rollback,你将得到一个错误 (er_warning_not_complete_rollback) 作为一个警告。所有事务安全表将被恢复,但是非事务安全表将不会改变。
如果你使用 start transaction 或 set autocommit=0,你应该使用 mysql 二进制日志做备份以代替老的更新日志。事务处理被以一个大块形式存储在二进制日志中,在 commit 上面,为了保护回滚的事务,而不是被存储的。查看章节 4.9.4 二进制日志。
如果您使用起动事务处理或集autocommit=0 ,您应该使用mysql 二进制日志为备份代替更旧的更新日志。 事务处理存储在二进制登录一大块,做,保证, 滚的事务处理不存储。 参见部分4 。9.4 二进制日志。
下列命令自动的结束一个事务 (就好像你在执行这个命令之前,做了一个 commit):
| 命令 | 命令 | 命令 |
alter table | begin | create index
|
drop database | drop table | rename table
|
truncate |