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