50.笔记 MySQL学习——利用事务处理保证语句

来源:互联网 发布:韩春雨 知乎 编辑:程序博客网 时间:2024/06/05 10:59

50.笔记 MySQL学习——利用事务处理保证语句

要使用事务,必须选择支持事务处理的存储引擎,如InnoDB.

默认情况下,MYSQL运行模式是自动提交的,如果要显示提交可以禁用自动提交模式。

    常用事务的方法是:STARTTRANSACTION或BEGIN语句,挂起自动提交模式。

最后用COMMIT语句结束事务,让修改持久化,或者让ROLLBACK语句撤销所有的更改。

例如:

创建表:

mysql> create table d (name char(20),unique(name)) engine=InnoDB;

Query OK, 0 rows affected (0.01 sec)

开始事务处理:

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into d set name='William';

Query OK, 1 row affected (0.00 sec)

mysql> insert into d set name='Wallace';

Query OK, 1 row affected (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from d;

+---------+

| name   |

+---------+

| Wallace |

| William |

+---------+

2 rows in set (0.00 sec)

在COMMIT之前,如果在其他会话查看的话是看不到的插入的表的。

另一个执行事务的办法是,利用SET语句

利用SET语句直接操作自动提交模式的状态:

SET AUTOCOMMIT =0;

设置为0,可以禁用自动提交模式,直到调用COMMIT或ROLLBACK。

先删除表中内容如下:

mysql> truncate table d;

Query OK, 0 rows affected (0.03 sec)

mysql> set autocommit=0;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into d set name='William';

Query OK, 1 row affected (0.00 sec)

mysql> insert into d set name='Wallace';

Query OK, 1 row affected (0.00 sec)

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

重新启用自动提交模式,执行如下:

mysql> set autocommit=1;

Query OK, 0 rows affected (0.00 sec)

           通常情况下,那些用来创建、更改或删除数据库或其中的对象的数据定义语言(DDL)语句,以及那些与锁定有关的语句都不能成为事务的一部分。