当当当当~~~~欢迎大家阅读,今天我们学习事务控制语言
事务 一、概念一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
存储引擎
二、事务的特性1、概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中
2、通过show engines;来查看mysql支持的存储引擎
3、在mysql中用的最多的存储引擎有:innodb,myisam,memory等。其中innodb支持事务,而myisam,memory等不支持事务。
ACID
Atomicity:原子性:一个事务不可再分割,要么都执行,要么都不执行
Consistency:一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
Isolation::隔离性:一个事物的执行不受其他事务的干扰
Durability:持久性:一个事务一旦提交,则会永久的改变数据库的数据
三、事务的创建 1、隐式事务
含义:事务没有明显的开启和结束的标记
2、显式事务比如:insert、update、delete语句
delete from表 where id=1;
3、步骤事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用set autocommit=0;
步骤1:开启事务
set autocommit=0;
start transaction;
步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
...
四、演示事务的使用步骤步骤3:结束事务
commit;提交事务
rollback;回滚事务
1、开启事务
set autocommit=0
start transaction;
2、编写一组事务的语句
update account set balance =500 where username='张无忌';
update account set balance =1500 where username='赵敏';
3、结束事务
rollback;
commit;
savepoint 节点名;设置保存点select * from account;
五、事务并发问题的介绍 1、并发问题的介绍
2、数据库事务的隔离性对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。
脏读:两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段,之后,若T2回滚,T1读取的内容就是临时且无效的。
不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段,之后,T1再次读取同一个字段, 值就不同了。
幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行。之后,如果T再次读取同一个表,就会多出几行。
3、数据库提供的4种事务隔离级别数据库系统必须具有隔离并发运行各个事务的能力,使他们不会相互影响,避免各种并发问题。
脏读 不可重复读 幻读
读未提交数据(read uncommitted): √ √ √
读已提交数据(read committed): × √ √
可重复读(repeatable read): × × √
串行化(serializable): × × ×
oracle:支持的2种事务隔离级别第二个和第四个,默认的事务隔离级别为第二个:read committed
mysql:支持4种事务隔离级别,默认的事务隔离级别为第三个:repeatable read
六、演示savepoint的使用查看当前隔离级别:select @@tx_isolation;
设置隔离级别:set session transaction isolation level read uncommitted;
设置数据库系统的全局的隔离级别:set global transaction isolation level read committed;
set autocommit=0;
start transaction;
delete from account where id=25;
savepoint a;#设置保存点
delete from account where id=28;
rollback to a;#回滚到保存点
select * from account;
以上就是事务控制语言啦,希望我的文章对你有所帮助,如果有错误的地方还望大家批评指正,谢谢大家阅读!



