28.事务+视图

@一贤不穿小鞋

1.事务的作用:保证数据的安全性.

2.事务:是数据库的最小执行单元,事务将一条或多条sql语句当作一个整体,要么同时全部执行成功,要么同时全部执行失败.

3.事务的特性(ACID):

  • 原子性(Atomicity):事务中sql语句不可再分,且事务中sql语句要么同时执行成功,要么同时执行失败.
  • 一致性(Consistency):事务执行之前和执行之后,事务中总数据的状态是不变成的.
  • 隔离性(Isolation):事务与事务之间是彼此独立,互不干扰.
  • 持久性(Durability):事务一但提交或回滚对数据库的修改是永久的.

4.事务的常用方法

  • 默认情况下,一条sql语句一个事务,是自动开启的.

4.1:开启事务:start transaction;

4.2:提交事务:commit transaction;

4.3:回滚事务:rollback;

4.4:(了解)设置保存点:savepoint 保存点的名称;

4.5:(了解)回滚到保存点:rollback to 保存点的名称;

eg:#开启事务
START TRANSACTION;

update t_bank set money=money+200 where account=1;
update t_bank set money=money-200 where account=2;

#设置保存点
SAVEPOINT a;

insert into t_bank(account,password,user,money)
values(3,default,'老王',1000);

#回滚到保存点,保存点之后的sql语句撤消了,保存点之前的语句还没处理
ROLLBACK TO a;

#回滚
ROLLBACK;

#提交
COMMIT;

5.(扩展)事务隔离错误:站在事务的角度来说是错误的,但是站在程序的角度来说,有的数据没有问题.

  • 脏数据:不正确的数据,读到别还未提交的数据.

5.1:脏读:一个线程中事务读取另一个线程中还没提交的数据叫脏读.

5.2:不可重复读:一个线程中事务读取另一个线程中刚提交修改的数据.

5.3:幻读(虚读):一个线程中事务读取另一个线程中刚提交新增的数据.

7.事务隔离级别:安全性越高,执行效率越低,安全性越低,执行效率越高.

7.1:READ UNCOMMITTED 脏读、不可重复读、虚读有可能发生。

7.2:READ COMMITTED 避免脏读的发生,不可重复读、虚读有可能发生。

7.3:REPEATABLE READ 避免脏读、不可重复读的发生,虚读有可能发生。

7.4:SERIALIZABLE 避免脏读、不可重复读、虚读的发生。

  • Oracle数据库默认采用READ COMMITTED隔离级别.
  • MySql数据库默认采用REPEATABLE READ 隔离级别.

7.5:查询数据库隔离级别:select @@tx_isolation;//查看当前的隔离级别

  • 设置事务的隔离级别:set global/session transaction isolation level 级别;
  • //设置当前的事务隔离级别(注意每次修改事务隔离级别后,要重新连接登录数据库,才能生效)
eg:#查看事务隔离级别
select @@tx_isolation;

#修改事务隔离级别
set GLOBAL TRANSACTION isolation LEVEL REPEATABLE READ;

#开启事务
start TRANSACTION;

update t_bank set money=money-200 where account=1;

insert into t_bank(account,password,user,money)
values(3,default,'老王',1000);

#回滚事务
ROLLBACK;

#提交事务
COMMIT;

1.视图:是一张根据原来的一张或多张表中列产生的虚拟表.

2.视图的作用

2.1:使操作简单

  • 可以为复杂并且使用频繁的查询定义一个视图,简化查询的步骤。

2.2:增加数据的安全性

  • 通过视图,用户只能查询和修改指定的数据,指定数据以外的信息,用户根本接触不到,这样可以保证敏感信息不会被没有权限的人看到。

2.3、提高表的独立性

  • 视图可以屏蔽原有表结构变化所带来的影响,例如原来表删除或者增加了某些列,对视图不会照成影响。

3.视图的使用

3.1:创建视图的语法:create view 视图名 as 查询语句;

3.2:修改视图的语法:create or replace view 视图名 as 查询语句

3.3:查看视图:select */列名列表 from 视图名

3.4:删除视图:drop view 视图名.

eg:#创建或修改视图
create or REPLACE view v_stu
AS
select sid,sname,ssex,sage,saddress,cname 
from t_student s 
inner join t_class c on s.cid=c.cid;

#查看视图
select * from v_stu;

#删除视图
drop view v_stu;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值