MySQL悬系之事务与视图介绍
技术百科
零下一度
发布时间:2017-06-27
浏览: 次 一、事务
1、提交
2、回滚
3、ACID特性
二、视图
1、创建视图
2、删除视图
3、更新视图
4、使用视图
三、子查询
1、 使用子查询
2、 标量子查询
3、 关联子查询
一、事务
在 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
注意:
避免在视图的基础上创建视图。对多数 DBMS 来说,多重视图会降低 SQL 的性能。
定义视图时不能使用 ORDER BY子句
2、删除视图
--格式:DROP VIEW 视图名称 DROP VIEW v1
3、更新视图
-- 格式:ALTER VIEW 视图名称 AS
注意:
视图和表需要同时进行更新,因此通过汇总(聚合结合连表)得到的视图无法进行更新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
# 主键
# 子句
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++中explicit(bool)的用法 c++
- Mac如何开启夜览模式_Mac护眼模式设置与定时
- Win11怎么关闭自动维护 Win11禁用系统自动
- Windows10系统怎么查看设备管理器_Win1
- Win11怎样安装企业微信_Win11安装企业微信
- SAX解析器是什么,它与DOM在处理大型XML文件
- Win11怎么设置屏保_Windows 11屏幕保
- Windows资源管理器总是卡顿或重启怎么办?(修
- Win10怎么创建桌面快捷方式 Win10为应用创
- c++如何使用std::bind绑定函数参数_c+
- Win11怎么清理C盘系统日志_Win11清理系统
- php增删改查报错1054怎么办_字段名错误排查修
- Windows Defender扫描失败怎么办_安
- 如何使用Golang编写单元测试_创建Test函数
- php485返回数据不完整怎么办_php485数据
- Win10文件历史记录怎么用 Win10开启自动备
- 如何诊断并终止卡死的 multiprocessin
- XSLT怎么生成动态的HTML属性名和标签名
- Win11怎么查看电脑配置_Win11硬件配置详细
- Python实现图数据库操作_Neo4j核心CRU
- PHP主流架构怎么集成Redis缓存_配置步骤【方
- Windows10如何更改鼠标图标_Win10鼠标
- 如何解决同一段404代码在不同主机上表现不一致的问
- 如何在 Go 同包不同文件中正确引用结构体
- php打包exe如何加密代码_防反编译保护方法【技
- Win11怎么设置默认邮件客户端 Win11修改M
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- Windows蓝屏错误0x0000001E怎么修复
- 如何使用正则表达式批量替换重复的星号-短横模式为固
- 如何使用Golang模拟请求超时_Golang c
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- Mac如何彻底清理浏览器缓存?(Safari与Ch
- php条件判断怎么写_ifelse和switchc
- Drupal 中 HTML 链接被重复转义导致渲染
- c# F# 的 MailboxProcessor
- Win11怎么设置开机问候语_自定义Win11锁屏
- Win11如何隐藏桌面图标 Win11一键隐藏/显
- php本地部署支持nodejs吗_php与node
- MAC如何设置网卡MAC地址克隆_MAC终端修改物
- 如何在 Laravel 中通过嵌套关联关系进行 o
- 如何使用Golang实现RPC序列化与反序列化_G
- Python装饰器设计思路_功能增强机制说明【指导
- LINUX如何删除用户和用户组_Linux use
- 如何在 Go 中比较自定义的数组类型(如 [20]
- ACF 教程:如何正确更新嵌套在多层 Group
- 如何将竖排文本文件转换为横排字符串
- 如何提升Golang程序I/O性能_Golang
- Python集合操作技巧_高效去重解析【教程】
- MAC怎么一键隐藏桌面所有图标_MAC极简模式切换
- Win11怎么关闭开机声音_Win11系统启动提示

QQ客服