Dec
29
据说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命令行下进行的操作
OK,再来个PHP版本的:
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
今天心血来潮,于是就玩了一下。
首先,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`;
看看效果如何?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();
?>
$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 。