标题:MySQL的事务功能 出处:Felix021 时间:Mon, 29 Dec 2008 18:06:55 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?1369 内容: 据说MySQL是从v4.0开始支持事务(Transaction)的,一直没去试过。 今天心血来潮,于是就玩了一下。 首先,mysql里面有一个状态量叫做 autocommit ,默认值是1 也就是说,当你提交一个SQL语句以后,这条语句会被立即执行并修改数据库内容(如果有必要的话)。 所以如果你想要开始一个事务,那么首先应该把这个东东设置为0,有这么几种方法: 1. 提交SQL语句 START TRANSACTION; 2. 提交SQL语句 BEGIN; 3. 提交SQL语句 SET AUTOCOMMIT=0; 4. (PHP) mysqli_autocommit($conn, false); 然后就可以开始进行你想做的数据库修改了,比如INSERT, UPDATE, DELETE 修改完以后,如果返回的结果有不对劲的地方,OK,试试 1. 提交SQL语句 ROLLBACK; 2. 或者(PHP) mysqli_rollback($conn); 然后你就会发现数据库好像根本没有操作过似的 (其实仔细观察的话会发现auto_increment那个字段的max值变大了-____-) 如果一切OK,那么就用这个: 1. 提交SQL语句 COMIIT; 2. 或者(PHP) mysqli_commit($conn); 注意,在提交COMMIT以后,数据库的改动就正式写到硬盘,不能撤销啦。 给俩例子吧: a. 在MySQL命令行下进行的操作 mysql> use t; mysql> CREATE TABLE `test`(`id` int primary key auto_increment, `name` char(50)); mysql> START TRANSACTION; mysql> INSERT INTO `test` VALUES (NULL, 'a'); mysql> COMMIT; #或者 mysql> ROLLBACK; mysql> SELECT * FROM `test`; 看看效果如何? OK,再来个PHP版本的: autocommit(false); $res = $conn->query("INSERT INTO `test` VALUES(NULL, 'a')"); if($res) $conn->commit(); else $conn->rollback(); $conn->close(); ?> Generated by Bo-blog 2.1.0