数据库进阶 の 事务



sqlserver 数据库只能安装在 window 服务器上

1.数据库存储方式

  • 数据放到表里,表再放到库中
  • 一个数据库中可以有多个表,每个表都有一个名字,表明唯一性
  • 一列叫 属性


2.事务

一组SQL 语句组成的执行单元,我们叫做事务。要么全部执行,要么全部不执行。

存储引擎,指的是数据用不同的技术,将数据储存在文件中,可以通过 show engines 来查看 mysql 支持的存储引擎。其中 innodb 支持事务性的,其他的不支持事务。

在这里插入图片描述



1. 事务的 ACID 属性

  • 原子性:要么都执行,要么都不执行
  • 一致性:从一个状态变到另一个一致性的状态,要保持一致性
  • 隔离性:一个事务的执行,不能被另一个事务干扰,并发执行的各个事务之间,是不能互相干扰的
  • 持久性:事务一旦被提交,他就是一个永久的事。比如你从数据库里删除一个字段,然后还能通过回滚再把这个字段找回来吗?当然不能


2.事务的开始和结束

2.1 隐式事务

隐式事务指的是没有明显的开启和结束的表示

比如: insert,update ,delete


2.2 显示事务

显示事务即有明显的开启和结束:

前提是必须将自动提交功能设为禁用

set autocomit=0;

显示事务提交的过程

步骤一: 开启事务
set autocommit=0;
start transaction ; 可选的,上一行执行了,这一行自然就有了

步骤二.编写事务的sql语句
语句1;
语句2;
语句3....
语句4commit; 提交事务
rollback; 事务回滚



3.隔离机制

当多个用户并发地存取数据库的时候,就会产生多个事务,同时存取同一数据的情况。若对。并发操作不加控制,就会存取和存储不正确的数据,破坏事务的一致性和数据库的一致性。所以数据库管理系统,必须提供并发控制机制,并发控制机制,是衡量一个数据库管理系统性能的标志之一

事务是并发控制的基本单位


3.1并发导致的问题

1.丢失修改

事务 A 和事务 B 对同一数据进行了修改,B 事务的提交,破坏了 A 提交的交过,导致 A 的修改丢失。

2.不可重复读

事务 A 读取了某一数据,然后事务 B 对数据进行了修改,而后事务A 再读这个数据,就和第一读到的不一样了

不可重复读,如果是对数据操作的话,多了一部分数据,或者少了一部分数据,这种不可重复读称作 幻影现象

3.读脏数据

事务 A 修改了某一数据,事务 B 读了这一数据,而后,事务 A 因为某些原因撤销了,(不一定是回滚),那么事务 B 读到的就是脏数据。简单点来说,就是事务A 读取了未提交的数据。



3.2加锁

  • 排他锁 ,也叫 写锁 简称 X锁,即事务 A 读数据对象加上 X 锁以后,只能有事务 A 完成读取和修改操作,其他任何事物在此期间,都不能再加任何类型的锁,直到 T 释放为停止。
  • 共享锁, 又叫 读锁,简称S锁,即事务 A 可以对对象添加 S 锁,则其他事务就只能再添加 S锁,而不能添加 X锁



3.3 数据库的四种隔离级别

1.读未提交(read uncommitted )

允许读取未被其他事务提交的变更,此时脏读不可读都会出现

2.读已提交(read committed)

只允许读取已经被提交的事务,可以避免脏读,但是不可避免重复读和幻影的问题

3.可重复读(repeatable read)

保证事务可以多次在同一字段中读取到相同的值,这个事务持续期间,禁止其他事务对这个事务进行更新,可以避免脏读和不可重复读,但是幻读的问题依然存在。

4.串行化(serializable)

确保事务可以读取到相同的数据,在事务持续的过程中,禁止其他事务对 的增加,删除,和更新。

Oriacl 支持两种事务隔离级别,Mysql 支持四种隔离级别,默认的隔离级别为 可重复度



4.回滚点

savepoint a;  // 保存 a 为回滚点
rollback to a; // 回滚到 a 点


5.视图

视图就相当于是一组 SQL 语句,他就可以把这些个复杂的查询,放到一个视图里面

举个简单的例子,比如某高中一共有 12 个班,突然某天省里的领导要来检查,那么就要将班里的 所有语文成绩80分以上的,数学120以上的,男生同学,组成一个班,临时组成,那么这样的话,原本的12班,就变成了13个班,但是最后的这个班实际上是不存的,但是我们用的时候,可以直接拿这班当一个真正的班来写 SQL 语句。




参考资料

https://www.bilibili.com/video/BV12b411K7Zu?p=139&share_source=copy_web

posted @ 2021-05-15 11:23  沧海一声笑rush  阅读(38)  评论(0编辑  收藏  举报