MySQL基础——事务、视图
文章目录
一、事务
1. 特性:ACID
1. A:原子性:一个事务不可再分割,要么都执行要么都不执行
2. C:一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
3. I:隔离性:一个事务的执行不受其他事务的干扰
4. D:持久性:一个事务一旦提交,则会永久的改变数据库的数据
2. 事务的创建
1. 隐式事务:事务没有明显的开启和结束的标记
比如:insert 、update、delete语句
2. 显示事务:事务具有明显的开启和结束的表记
前提:必须先设置自动提交功能为禁用
Set autocommit=0;
3. 事务使用步骤:
步骤一:开启事务
Set autocommit=0;
Start transaction; #可选的
步骤二:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
…
步骤三:结束事务
Commit; #提交事务
Rollback; #回滚事务
#演示事务的使用步骤:
Set autocommit=0;
Start transaction;
#编写一组事务的语句
Update account set balance = 500 where username = ‘张无忌’;
Update account set balance = 1500 where username = ‘赵敏’;
#结束事务
Commit;
对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:脏读、不可重复读、幻读
Mysql支持4中事务隔离级别。默认的事务隔离级别为:Repeatable read
查看当前隔离级别:select @@tx_isolation;
设置最低的隔离级别:set session | global transaction isolation level read uncommitted
4. 事务的隔离级别:
脏读 不可重复读 幻读
Read uncommitted: 会出现 会出现 会出现
Read committed: 不会出现 会出现 会出现
Repeatable read: 不会出现 不会出现 会出现
Serializable: 不会出现 不会出现 不会出现
#演示savepoint的使用
Set autocommit=0;
Start transaction;
Delete from account where id = 25;
Savepoint a; #设置保存点
Delect from account where id = 28;
Rollback to a; #回滚到保存点
二、视图
视图的含义:
虚拟表,和普通表一样使用
优点:
1. 重用sql语句
2. 简化复杂的sql操作,不必知道它的查询细节
3. 保护数据,提高安全性
1. 创建视图
语法:
Create view 视图名
as
查询语句;
2. 视图的修改
方式一:
Create or replace view 视图名 #视图不存在即创建,若存在则修改
As
查询语句;
方式二:
Alter view 视图名
As
查询语句;
3. 删除视图
语法:
Drop view 视图名,视图名,…;
4. 查看视图
Desc 视图名;
Show create view 视图名;
5. 视图的更新
1)插入
Insert into myvl values(‘张飞’,’zf@qq.com’);
2)修改
Update myvl set last_name = ‘张无忌’ where last_name = ‘张飞’;
3)删除
Delete from myvl where last_name = ‘张无忌’;
注意:具备以下特点的视图不允许更新
1.包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all
2.常量视图
Create or replace view myv2
As
Select ‘john’ name;
Select * from myv2;
更新:delete myv2 set name = ‘luck’; #报错,常量视图无法更新
3.select中包含子查询
4.join
5.from后面是一个不能更新的视图
6.where子句的子查询引用了from子句中的表
delete和truncate在事务使用时的区别:
Delect支持回滚,truncate不支持回滚。##回滚语句:Rollback