登录
转载

MySQL基础——事务、视图

发布于 2021-03-23 阅读 431
  • 数据库
  • SQL
转载

MySQL基础——事务、视图

文章目录

    • MySQL基础——事务、视图
      • 一、事务
        • 1. 特性:ACID
      • 2. 事务的创建
        • 3. 事务使用步骤:
        • 4. 事务的隔离级别:
      • 二、视图
        • 1. 创建视图
        • 2. 视图的修改
        • 3. 删除视图
        • 4. 查看视图
        • 5. 视图的更新
          • 1)插入
          • 2)修改
          • 3)删除

一、事务

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

评论区

零00
7粉丝

时光荏苒,我自清欢

0

0

0

举报