mysql提高(事务二十三)

来源:互联网 发布:网络购物商城 编辑:程序博客网 时间:2024/04/30 23:11

  1:  事务的4个特性(ACID)

 A:原子性:事务是最小的工作单元,不可再分割

 C:一致性:事务要求所有的DML语句操作时,要么都成功,要么都失败

 I:隔离性:事务A和事务B之间是隔离的,互不影响

D:持久性:是事物的保证,一旦发生永久性保存


2:关于事务的一些术语:

  --1:开启事务:  start transaction

   --2:事务结束:end transacion

 --3:提交事务:  commit transaction

--4:回滚事务:  rollback transaction


3:和事务有关的两条重要的SQL语句(TCL)

   commit;    提交

   rollback;   回滚

 

4:事务开启的标志是什么?事务结束的标志是什么?

   开启的标志:

   任何一条DML语句,insert,update,delete语句

  结束的标志: 

    提交或者回滚

   提交:成功的结束

    回滚:失败的结束

   

5:重点:

   在事务进行过程中,未结束之前,DML语句是不会更改底层数据库文件中的数据,只是将历史操作记录一下,在内存中完成记录,只有在事务结束的时候,而且是成功结束的时候才会修改底层硬盘文件中的数据


 6:在mysql数据库中事务的提交与回滚演示:

  mysql数据库默认情况下事务会自动提交,这种方式是可以手动关闭的,

当手动开启时,start transaction,则需要手动提交 commit transaction


insert into t_user(name) values('zhangsan');
Query OK, 1 row affected (0.07 sec)
mysql> insert into t_user(name) values('lisi');
Query OK, 1 row affected (0.06 sec)
mysql> select * from t_user;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
+----+----------+
2 rows in set (0.01 sec)
mysql> start transaction
    -> ;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t_user(name) values('wangwu');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t_user;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | wangwu   |
+----+----------+
3 rows in set (0.00 sec)
mysql> commit transaction;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'transaction' at line 1
mysql> commit;
Query OK, 0 rows affected (0.07 sec)
mysql> start transaction
    -> ;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t_user(name) values('maliu');
Query OK, 1 row affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.18 sec)
mysql> select * from t_user;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | wangwu   |
+----+----------+
3 rows in set (0.00 sec)

7:事务的隔离级别(第二个级别最常用,mysql默认的是第三个级别)
    第一个级别:读未提交   (最低级别)事务A未提交的数据,事务B可以读取到,这种数据成为“脏数据”,也叫"脏读") 一般是理论存在,数据库中默认的最低是第二级别
    第二个级别:读已提交   (事务A提交后,事务B才可以读取到,可以避免“脏数据"),可能会发生,会导致”不可重复读取"
   第三个级别:可重复读  (事务A提交后,事务B读取不到,可以避免“不可重复读取",会把数据放在缓存中,每次读取的是缓存中读取,结果一样,会导致"幻想读"
   第四个级别:串行化  (最高级别):事务A在操作时,事务B只能在排队,可重复读,很少使用

  8:设置事务隔离级别
   1)通过修改配置文件的方式(my.ini)

原创粉丝点击