MySQL(二)--事务与视图
一、事务
在 RDBMS 中,事务是对表中数据进行更新的单位。简单来讲,事务就是需要在同一个处理单元中执行的一系列更新处理的集合。
事务开始语句START TRANSACTION;
DML语句①;
DML语句②;
DML语句③;
.
.
.
事务结束语句(COMMIT或者ROLLBACK);
1、提交
COMMIT 是提交事务包含的全部更新处理的结束指令,相当于文件处理中的覆盖保存。一旦提交,就无法恢复到事务开始前的状态了。
2、回滚
ROLLBACK 是取消事务包含的全部更新处理的结束指令,相当于文件处理中的放弃保存。一旦回滚,数据库就会恢复到事务开始之前的状态。
3、ACID特性
DBMS 的事务都遵循四种特性,将这四种特性的首字母结合起来统称为 ACID 特性。
- 原子性(Atomicity) 原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行。
- 一致性(Consistency) 一致性指的是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者 NOT NULL 约束等。例如,设置了 NOT NULL 约束的列是不能更新为 NULL 的,试图插入违反主键约束的记录就会出错,无法执行。对事务来说,这些不合法的 SQL 会被回滚。
- 隔离性(Isolation) 隔离性指的是保证不同事务之间互不干扰的特性。该特性保证了事务之间不会互相嵌套。此外,在某个事务中进行的更改,在该事务结束之前,对其他事务而言是不可见的。因此,即使某个事务向表中添加了记录,在没有提交之前,其他事务也是看不到新添加的记录的。
- 持久性(Durability) 持久性指的是在事务(不论是提交还是回滚)结束后,DBMS 能够保证该时间点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也一定能通过某种手段进行恢复。
二、视图
视图和表的本质不同在于“是否保存了实际的数据”。
表中存储的是实际数据,而视图中保存的是从表中取出数据所使用的SELECT语句。
我们应该将经常使用的SELECT语句做成视图。
1、创建视图
--格式:CREATE VIEW 视图名称(<视图列名1>, <视图列名2>, ……) AS <SELECT语句>
CREATE VIEW v1 (product_name, name_cnt)
AS
SELECT product_name, count(*)
FROM
表名/视图名
GROUP BY product_name
注意:
- 避免在视图的基础上创建视图。对多数 DBMS 来说,多重视图会降低 SQL 的性能。
- 定义视图时不能使用 ORDER BY子句
2、删除视图
--格式:DROP VIEW 视图名称
DROP VIEW v1
3、更新视图
-- 格式:ALTER VIEW 视图名称 AS <SELECT语句>
-- 格式:INSERT INTO 视图名称 VALUES(...)
注意:
- 视图和表需要同时进行更新,因此通过汇总(聚合结合连表)得到的视图无法进行更新INSERT。
记住,对视图的更新归根结底是对视图所对应的表进行更新。
4、使用视图
使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。
select * from v1
三、子查询
1、 使用子查询
子查询就是一次性视图(SELECT语句)。与视图不同,子查询在SELECT语句执行完毕之后就会消失。
-- 根据商品种类统计商品数量的视图
CREATE VIEW ProductSum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type;
-- 确认创建好的视图
SELECT product_type, cnt_product
FROM ProductSum;
--子查询
SELECT product_type, cnt_product
FROM (SELECT product_type, COUNT(*)
FROM Product
GROUP BY product_type)AS ProductSum;
2、 标量子查询
标量子查询则有一个特殊的限制,那就是必须而且只能返回 1 行 1 列的结果,也就是返回表中某一行的某一列的值。
SELECT product_id, product_name, sale_price
FROM Product
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product);
3、 关联子查询
在细分的组内进行比较时,需要使用关联子查询。
--子查询中添加的 WHERE 子句的条件
--该条件的意思是,在同一商品种类中对各商品的销售单价和平均单价进行比较。
SELECT product_id, product_name, sale_price
FROM Product AS P1
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product AS P2
WHERE P1.product_type = P2.product_type
GROUP BY product_type);
MySQL(二)--事务与视图的更多相关文章
- Mysql的事务、视图、索引、备份和恢复
事务 事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须具备四个属性.即:原子性.一致性.隔离性.持久性,这些特性通常简称为ACID. 原子性(Atomicity) 事务是不可分割的 ...
- MySQL的事务和视图
事务 1.概念 一条或者多条sql语句的集合! 事务:就是一堆操作的集合,他们同生共死.要么都执行成功,要么都执行失败2.事务的特性 ACID A:原子性 完整的,不可分割的 原子性 (Atom ...
- MySQL 事务、视图、索引
一.事务(Transaction) 1.1 什么是事务? SQL中,事务是指将一系列数据操作捆绑成为一个整体进行统一管理. 如果一个事务执行成功,该事务中进行的所有数据均会提交,称为数据库中的永久组成 ...
- Mysql数据库的数据类型、索引、锁、事务和视图
Mysql数据库的数据类型.索引.锁.事务和视图 数据的类型 1)数据类型: 数据长什么样? 数据需要多少空间来存放? 系统内置数据类型和用户定义数据类型 2)MySql 支持多种列类型: 数值类型 ...
- python Mysql (二)
Mysql (二) 一. 事务 a.数据库开启事务命令 1 2 3 4 #start transaction 开启事务 #Rollback 回滚事务,即撤销指定的sql语句(只能回退insert de ...
- 知识点:Mysql 基本用法之视图
视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时 ...
- {Django基础六之ORM中的锁和事务}一 锁 二 事务
Django基础六之ORM中的锁和事务 本节目录 一 锁 二 事务 一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在 ...
- 【MySQL】事务隔离级别及ACID
注:begin或start transaction并不是一个事务的起点,而是在执行它们之后的第一个操作InnoDB表的语句,事务才真正开始.start transaction with consist ...
- Oracle事务、视图、序列
回顾什么是事务? 一个不可分割的子操作形成一个整体,该整体要么全部执行成功,要么全部执行失败.例如:转帐 回顾为什么要用事务? 如果不用事务的话,为转帐为例,可能出现一个用户钱增加了,另一个用户钱不变 ...
随机推荐
- python 爬取淘宝的模特照片
前段时间花了一部分时间学习下正则表达式,总觉得利用正则要做点什么事情,所以想通过爬取页面的方式把一些美女的照片保存下来,其实过程很简单. 1.首先读取页面信息: 2.过滤出来照片的url地址: 3.通 ...
- maven 热部署至tomcat
1.配置tomcat的界面访问账号和权限./tomcat/conf目录下tomcat-users.xml添加 这里是根据自己的需求添加的一个角色权限 <role rolename="a ...
- 【图解HTTP】笔记摘要
第1章 了解Web及网络基础 根据Web浏览器(Web客户端)地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源(resource)等信息,从而显示出Web页面. CERN(欧洲核子研究组 ...
- ActionBar 通用方法
自定义actionBar布局:标题居中,左边有返回按键 <?xml version="1.0" encoding="utf-8"?> <Rel ...
- 省市联动_简单的Demo,适用于各种二级菜单联动
最近搞了一个功能,是查询页面需要用到二级菜单联动,获取到选中的属性value传入到后台. 平常都是用AJAX或者JQuery ,通过XML或者JSON的方式,这样的话需要调用数据库,像典型得到省市联动 ...
- js实现导航菜单栏随着屏幕的滚动进行滚动的效果
$(window).scroll(function () { var $nav = $(".floatingMenu ul li"), length = $nav.length-1 ...
- VR全景智慧城市:开启VR全景逛街新时代~
VR全景,又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体大的区别是"可操作,可交互". 对于顾客体验来说,VR确实是对于实体店是一种颠覆性的创新,它既 ...
- (转)Nginx的启动、停止与重启
启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /us ...
- 2-SAT算法
参考blog 参考论文 参考论文 题目 & 题解 裸2-SAT poj3683 poj3207 poj3678 poj3648 2-SAT + 二分法 poj2723 poj2749 hdu3 ...
- Python抓取成都房价信息
Python里scrapy爬虫 scrapy爬虫,正好最近成都房价涨的厉害,于是想着去网上抓抓成都最近的房价情况,顺便了解一下,毕竟咱是成都人,得看看这成都的房子我以后买的起不~ 话不多说,进入正题: ...