Dec 29

MySQL的事务功能 不指定

felix021 @ 2008-12-29 18:06 [IT » 数据库] 评论(0) , 引用(0) , 阅读(6134) | Via 本站原创 | |
据说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版本的:
<?php

$conn = new mysqli("localhost", "root", "123456", "t");

$conn->autocommit(false);

$res = $conn->query("INSERT INTO `test` VALUES(NULL, 'a')");

if($res)
    $conn->commit();
else
    $conn->rollback();

$conn->close();
?>




欢迎扫码关注:




转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   *非必须
网址   电邮   [注册]