MySQL中的事务和视图

一、事务
1.什么是事务

事务是一组由DML语句组成,这组语句要么全部成功,要么全部失败,是一个整体。

2.为什么需要事务

3.事务的基本操作

开始一个事务 start transaction;
创建一个保存点 savepoint 保存点名;
回到保存点 rollback to 保存点名;
--创建一张学生数学成绩表
mysql> create table score(id int , name varchar(32),math int);
Query OK, 0 rows affected (0.64 sec)
 
--插入学生数据
mysql> insert into score values(1,'Alice',90),(2,'Bob',95);
Query OK, 2 rows affected (0.27 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select* from score;
+------+-------+------+
| id   | name  | math |
+------+-------+------+
|    1 | Alice |   90 |
|    2 | Bob   |   95 |
+------+-------+------+
2 rows in set (0.00 sec)
 
--发现给Alice应该多加的5分加到了Bob成绩上,进行修改
    --创建事务
    mysql> start transaction;
    Query OK, 0 rows affected (0.00 sec)
 
    --创建保存点a;
    mysql> savepoint a;
    Query OK, 0 rows affected (0.10 sec)
 
    mysql> select* from score;
    +------+-------+------+
    | id   | name  | math |
    +------+-------+------+
    |    1 | Alice |   90 |
    |    2 | Bob   |   95 |
    +------+-------+------+
    2 rows in set (0.00 sec)
 
    --给Alice成绩加5分
    mysql> update score set math = math+5 where name like 'Alice';
    Query OK, 1 row affected (0.02 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
 
    --创建保存点b
    mysql> savepoint b;
    Query OK, 0 rows affected (0.10 sec)
 
    --给Bob成绩减5分
    mysql> update score set math = math-50 where name like 'Bob';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
 
    --查询成绩表发现Bob成绩修改时出现了问题
    mysql> select* from score;
    +------+-------+------+
    | id   | name  | math |
    +------+-------+------+
    |    1 | Alice |   95 |
    |    2 | Bob   |   45 |
    +------+-------+------+
    2 rows in set (0.00 sec)
 
    --返回保存点b
    mysql> rollback to b;
    Query OK, 0 rows affected (0.10 sec)
 
    --对Bob成绩重新修改
    mysql> update score set math = math-5 where name like 'Bob';
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
 
    --再次查询成绩表获得正确成绩    
    mysql> select* from score;
    +------+-------+------+
    | id   | name  | math |
    +------+-------+------+
    |    1 | Alice |   95 |
    |    2 | Bob   |   90 |
    +------+-------+------+
    2 rows in set (0.00 sec)
4.事务的隔离级别

当MySQL表被多个线程或者客户端开启各自事务操作数据库中的数据时,MySQL提供了一种机制,使不同的事务在操作数据时,具有隔离性。从而保证数据的一致性。

4.1无隔离会出现的问题

脏读


不可重复读


幻读


4.2事务的隔离级别

扫描二维码关注公众号,回复: 9125766 查看本文章

读未提交(read uncommited)
读已提交(read commited)
可重复读(repeatable read):MySQL默认的隔离级别,不会发生脏读、不可重复读、幻读等问题。
可串行化(serializable)
   4.2.1设置事务的隔离级别

set session transaction isolation level read uncommited;
   4.2.2查看当前隔离级别

select @@tx_isolation;
5.事务的ACID特性

原子性(Atomicity):
事务是应用中最小的执行单位,就如原子是自然界的最小颗粒,具有不可再分的特征一样,事务是应用中不可再分 的最小逻辑执行体。

一致性(Consistency):
事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库只包含事务成功提交的结果 时,数据库处于一致性状态。如果系统运行发生中断,某个事务尚未完成而被迫中断,而改未完成的事务对数据库 所做的修改已被写入数据库,此时数据库就处于一种不正确(不一致)的状态。因此一致性是通过原子性来保证 的。

隔离性(Isolation):
各个事务的执行互不干扰,任意一个事务的内部操作对其他并发事务都是隔离的。也就是说,并发执行的事务之间 不能看到对方的中间状态,并发执行的事务之间不能互相影响。

持久性(Durability):
持久性是指一个事务一旦被提交,它对数据库所做的改变都要记录到永久存储其中(如:磁盘)

二、视图
1.什么是视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变 化会影响到基表,基表的数据变化也会影响到视图。

2.视图的基本使用

2.1视图的创建

create view 视图名 as select 语句;
--如下是一张学生数学成绩表
+------+-------+------+
| id   | name  | math |
+------+-------+------+
|    1 | Alice |   90 |
|    2 | Bob   |   95 |
+------+-------+------+
 
--创建视图
mysql> create view score_view as select id,math from score where math>0;
Query OK, 0 rows affected (3.20 sec)
 
mysql> select * from score_view;
+------+------+
| id   | math |
+------+------+
|    1 |   90 |
|    2 |   95 |
+------+------+
2 rows in set (0.81 sec)
 
--修改视图中id为1的数学成绩改为30
mysql> update score_view set math = 30 where id = 1;
Query OK, 1 row affected (2.77 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> select * from score_view;
+------+------+
| id   | math |
+------+------+
|    1 |   30 |
|    2 |   95 |
+------+------+
2 rows in set (0.00 sec)
 
--查看原表,id为1的同学数学成绩也变为30
mysql> select * from score;
+------+-------+------+
| id   | name  | math |
+------+-------+------+
|    1 | Alice |   30 |
|    2 | Bob   |   95 |
+------+-------+------+
2 rows in set (0.00 sec)
2.2视图的规则与限制

视图命名唯一,不可重复,不可与表名相同
创建视图数目无限制,但要考虑性能影响
视图不可以添加索引
视图可以提高安全性,必须有足够的访问权限
从视图检索数据 select 中含有 order by ,那么该视图中的 order by 将被覆盖 
 

发布了28 篇原创文章 · 获赞 24 · 访问量 1069

猜你喜欢

转载自blog.csdn.net/qq_42305209/article/details/104262874