Transaction Control language
事务:
一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
事务的创建
隐式事务:事务没有明显的开启和结束的标记
比如insert update delete
delete from 表 where id=1;
显示事务:事务具有明显的开启和结束的标记
前提:必须先设置自动提交功能为禁用
set autocommit=0;//关闭自动提交
show variables like ‘autocommit’//显示自动提交变量
事务的语句:
步骤1:开启事务
set autocommit=0;//关闭自动提交
start transaction;可选的
步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2:
。。。
步骤3:结束事务
commit;提交事务
rollback;回滚事务
commit才表名将数据提交到了磁盘,否则只停留在内存中
数据的隔离级别
读未提交可以,即事务结束都没有没有commit,事务1和事务2是在内存中交互,事务1读取事务2的数据,假如事务1回滚回到zu最处的数据,事务1再次到磁盘读取,显示的数据会再次改变;
读已提交:事务1始终要从事务2 的磁盘中读取数据,而不是在事务1在内存中读取事务2的数据;事务1读取事务2的数据后,显示,改变事务2的数据,并commit提交到磁盘,事务1在磁盘读取 避免脏读
可重复读:即当两个事务都没有提交时,事务1始终读取到的是事务2的原始数据,需要当两者事务都提交,重新开启了新事务,在次读取事务2的数据会发生改变 避免不可重复读
最高级别:当事务2需要插入数据时,必须要等待事务1提交后才能进行事务2的操作
delete和truncate在事务使用时的区别
#演示delete支持回滚
set autocommit=0;
start transaction;
delete from account;
rollback;
#演示truncate 不支持回滚
set autocommit=0;
start transaction;
truncate table account
rollback;
个脚本也是同一个数据库连接,需要到cmd开多个 数据库
回滚的演示
关键字:savepoint 节点名,保存节点
视图
含义:虚拟表,和普通表一样使用
mysql5.1版本出现的特性,是通过表动态生成数据
视图和表的对比:
创建视图:
create view 视图名
as 查询语句;(较复杂的语句)
视图修改:
方式一:
create or replace myv3
as 语句 不存在就创建,存在就修改
方式2:
alter view 视图名
as 查询语句
三 删除视图
语法:drop view 视图名,视图名,。。。;
四 查看视图
DESC myv3
show create view 名;效果比较低
五试图更新