一、 DCL:数据控制语言(Data Control Language )
一般包括管理用户,授权,事务相关操作。
二、事务
-
概念:指的是一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。
-
事务的特性:(ACID)
-
1 原子性: 一个事务不可在分割,要么全部执行要么全部不执行。
-
2 一致性: 一个事务执行完毕,数据在执行完毕的前后的整体状态是不变的。比如银行转账,转账的操作成功之后,两个账户的金额之和是不变的。
-
3 隔离性: 一个事务执行不受其它事务的干扰。
-
4 持久性: 一个事务一旦提交,则会永久性的改变数据库的数据。
-
三、事务的创建
-
隐式事务:事务没有明显的开启或者结束的标记。
如:insert、update、delete语句就是自动会开启事务,并且自动提交。
delete from 表 where id = 1;
-
显示事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交事务功能为禁用。
#设置自动提交为禁用 SET AUTOCOMMIT = 0;
#步骤1:开启事务 set autocommit=0; start transaction; #可选的 #步骤2:编写事务中的sql语句(select insert update delete) 语句1; 语句2; ... #步骤3:结束事务 commit;提交事务 rollback;回滚事务 #设置保存点 savepoint 节点名;
四、事务的隔离级别
-
事务操作产生的几种严重的数据问题:
-
1 脏读:一个事务读取了另一个未提交事务修改的数据,如果事务提交失败,则读到的就是一个不存在的脏数据。
-
2 不可重复读:一个事务读取了另一个已提交事务修改的数据,当进行了多次事务提交时,之前的事务中发现每次读取的数据都是不一样的。所以这就是不可重复读的问题。
-
3 幻读:一个事务读取了另一个已提交事务添加的数据,导致原本没有的数据后来又被读出来了。就像幻觉一样,称之为幻读。
-
-
MySQL中事务的隔离级别为:
-
1 read uncommitted : 读 未提交
-
2 read committed : 读 已提交
-
3 repeatable read:可重复读
-
4 serializable :序列化
-
-
事务隔离级别与数据问题的关系
脏读 不可重复读 幻读 read uncommitted: √ √ √ read committed: × √ √ repeatable read: × × √ serializable × × ×
五、其它操作
-
查看事务隔离级别
#mysql中默认 第三个隔离级别 repeatable read #oracle中默认第二个隔离级别 read committed SELECT @@tx_isolation;
-
设置隔离级别
set session|global transaction isolation level 隔离级别; #在dos窗口使用 #简便写法 SET tx_isolation = 'read-committed'; #客户端可是这样设置
-
事务的使用步骤
#1.演示事务的使用步骤 #开启事务 SET autocommit=0; START TRANSACTION; #编写一组事务的语句 UPDATE account SET balance = 1000 WHERE username='张无忌'; UPDATE account SET balance = 1000 WHERE username='赵敏'; #结束事务 ROLLBACK; #commit; #2.演示事务对于delete和truncate的处理的区别 SET autocommit=0; START TRANSACTION; DELETE FROM account; ROLLBACK; #区别:delete可以进行rollback回滚,truncate不能。 #3.演示savepoint 的使用 SET autocommit=0; START TRANSACTION; DELETE FROM account WHERE id=25; SAVEPOINT a;#设置保存点 DELETE FROM account WHERE id=28; ROLLBACK TO a;#回滚到保存点