天天看点

0基础linux运维教程 课时复习

今日内容:1、事务

2、数据库读现象

3、数据库锁机制

一 事务

什么是事务

事务就相当于一个盛放sql的容器

事务中的sql要么全部执行成功,要么所有已经修改的操作都混滚到原来的状态,即一条sql也别想执行成功

为何要用事务

为了保证数据的安全、一致性

事务有四大特性:

1、原子性(Atomicity)2、一致性(Consistency)3、隔离性(Isolation)4、持久性(Durability):第7个commit成功之后,就无法回滚了

try:begin;

update user set balance=900 where name='wsb'; #买支付100元

update user set balance=1010 where name='egon'; #中介拿走10元

uppdate user set balance=1090 where name='ysb'; #卖家拿到90元,出现异常没有拿到

except 异常:

rollback;

else:

commit;

事务的保存点

begin;

update employee set name="EGON_NB" where id=1;

update employee set name="ALEX_SB" where id=2;

update employee set name="WXX" where id=3;

savepoint one;

select * from employee;

update employee set name="yxx_sb" where id=4;

update employee set name="lxx" where id=5;

savepoint two;

insert into employee values(19,"egonxxx",19);

savepoint three;

二 数据库读现象-》在并发场景下,数据不安全的一种体现

读现象---》在并发场景下,并发的多个事务去操作同一份数据,而产生的一些奇怪的读现象

在高并发情况下,即多个并发的事务同时操作一份数据,在没有加锁处理的情况下,会引发一些奇怪的读现象

脏读

不可重复读

幻读

三 锁介绍

什么是锁:

锁是一种保障数据的机制,如何保障?

为何要用锁?

以互斥锁为例,让多个并发的任务同一时间只有一个运行(注意这不是串行),牺牲了效率但换来数据安全

总锁的优缺点:

优点: 保障并发场景下的数据安全

缺点:降低了效率

所以我们在使用锁时应该尽可能缩小锁的范围,即锁住的数据越少越好,并发能力越高

锁的分类:

按照粒度:行级锁、表级锁、页级锁。

按照级别:共享锁、排他锁

按照使用方式分:乐观锁、悲观锁

锁的使用:

事务一对id=3的行加了互斥锁之后,其它事务对id=3行不能加任何锁(写不行,但是可以读)

事务一对id=3的行加了共享锁之后,其它事务对id=3行只能加共享锁,或者不加锁(写不行,但可以读)

1

5----

7----

9

11

12