Mysql 视图&事务&触发器
一、视图
视图的含义:
视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表。


1、创建视图
#语法:CREATE VIEW 视图名称 AS SQL语句
create view teacher_view as select tid from teacher where tname='李平老师'; #于是查询李平老师教授的课程名的sql可以改写为
mysql> select cname from course where teacher_id = (select tid from teacher_view);
+--------+
| cname |
+--------+
| 物理 |
| 美术 |
+--------+
rows in set (0.00 sec) #!!!注意注意注意:
#1. 使用视图以后就无需每次都重写子查询的sql,但是这么效率并不高,还不如我们写子查询的效率高 #2. 而且有一个致命的问题:视图是存放到数据库里的,如果我们程序中的sql过分依赖于数据库中存放的视图,
那么意味着,一旦sql需要修改且涉及到视图的部分,则必须去数据库中进行修改,而通常在公司中数据库有专门的DBA负责,
你要想完成修改,必须付出大量的沟通成本DBA可能才会帮你完成修改,极其地不方便
2、查看视图
select * from course_view;

create view view_sc as select * from sc;
select * from view_sc;
desc view_sc;
show create view view_sc;
3、修改视图
修改视图:
语法:ALTER VIEW 视图名称 AS SQL语句
ALTER alter view view_sc as select * from student; select * from view_sc;
查看数据库中原有的视图

select * from information_schema.views;

4、更新视图
更新视图是指通过插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。
通过视图更新的时候都是转到基本表进行更新的,
如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录 建立视图一般是为了查看,不建议更新操作
5、删除视图
语法:DROP VIEW 视图名称 DROP VIEW teacher_view
二、事务
1、定义
事务就是将一组SQL语句放在同一批次内去执行
如果一个SQL语句出错,则该批次内的所有SQL都将被执行
事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。
一堆sql语句:要么同时执行成功,要么同时失败 # 事务的原子性
2、事务的ACID原则



ACID,指数据库事务正确执行的四个基本要素的缩写。
包含:
原子性(Atomicity)、最小单元,保证一个操作作为一个过程去处理 一致性(Consistency)、如果其中有任何步骤失败,整个过程回滚(回到原始状态) 隔离性(Isolation)、事物之间互不影响,相互独立 持久性(Durability),事务提交成功后,会永久的存储,状态不会再改变
一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性。
使用场景:
银行的交易系统
eg:
start transaction;
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元,出现异常没有拿到
rollback;
commit;
3、MYSQL事务实现的方法
(1)set autocommit
使用set语句来改变自动提交模式
SET AUTOCOMMIT = 0; # 关闭自动提交模式 SET AUTOCOMMIT = 1; # 开启自动提交模式
MySQL中默认是自动提交
使用事务时应先关闭自动提交
1 查看提交模式
select @@autocommit;
2 关闭自动提交模式
set autocommit=0;


案例分析:
顾客A在线购买一款商品,价格为500.00元,采用网上银
行转账的方式支付
假如顾客A银行卡的余额为2000.00元,且向卖家B支付购
买商品费用500.00元,起始卖家B的账号金额10000.00元
创建数据库shop和创建表account并插入2条数据
创建表 shop表
create table shop(
name VARCHAR(32) not null,
cash int(4)
); 插入数据:
insert into shop VALUES('A',2000),('B',10000)

插入数据不成功,因为上一步把自动提交关闭了
set autocommit=1;
insert into shop VALUES('A',2000),('B',10000)
关闭自动提交模式
set autocommit=0;
4、事务的语法
关闭自动提交模式
set autocommit=0;
start transaction;
update shop set cash=cash-500 where name='A';
update shop set cash=cash+500 where name='B';
select * from shop; 没有提交,只是显示操作后的状态,但实际数据依旧没变
ROLLBACK; 没有commit回滚回到原来的状态
commit; 先提交再回滚,也不会回到最初的状态,而是出现提交后的状态 最后还原自动提交模式
set autocommit=1;
三、触发器
trigger 英 /'trɪgə/ 美 /'trɪɡɚ/ vt 触发、引发
使用触发器可以定制用户对表进行【增、删、改】操作时前后的行为,注意:没有查询
1、定义
在某种操作执行的同时触发另一种操作。它的执行不是由程序调用,也不是手工启动,而是由事件来触发,
比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
2、触发器的语法


3、案例分析
student表 每插入一条数据,计数表就计数
由于没有计数表,先创建
create table account(
stu_count int(4),
change_time datetime
); 触发器
create trigger tir_stu
after
insert
on student
for each row
begin
update account set stu_count=stu_count+1,change_time=now();
end; 先运行触发器,创建触发器 select * from account; 在执行插入之前必须要数据
INSERT into account VALUES((select count(*) from student),NOW()); student表插入数据
INSERT into student VALUES(1014,'cc',12,1);
4、触发器的删除
drop trigger 触发器名
MySQL触发器是在5.0版本引入的。针对需要对数据库做级联更改是很适宜使用的,如需要实时监控某张表中的某个字段的更改而需要做出相应的处理。 触发器虽然功能强大,能轻松可靠的实现许多复杂的功能不过,要慎用触发器,滥用触发器会造成数据库以及应用程序维护困难。
Mysql 视图&事务&触发器的更多相关文章
- mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数
mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...
- Mysql 视图 游标 触发器 存储过程 事务
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...
- Mysql视图、触发器、事务、储存过程、函数
一.视图 什么是视图 视图是有一张表或多张表的查询结果构成的一张虚拟表 为什么使用视图 当我们在使用多表查询时 我们的sql语句可能会非常的复杂,如果每次都编写一遍sql'的话无疑是一件麻烦的事情,这 ...
- SQL学习笔记七之MySQL视图、触发器、事务、存储过程、函数
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...
- mysql:视图、触发器、事务、存储、函数、流程控制
阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 回到顶部 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只 ...
- python开发mysql:视图、触发器、事务、存储过程、函数
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
- MySQL视图、触发器、事务、存储过程、函数
视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据 ...
- MySQL(视图、触发器、函数)
day61 参考:http://www.cnblogs.com/wupeiqi/articles/5713323.html 视图 视图:给某个查询语句设置别名,日后方便使用 ...
- mysql:视图,触发器,事务,存储过程,函数
一.视图 视图是一个虚拟表并不是(正实存在的) 创建老师表 create table teacher( id int primary key auto_increment, tname varchar ...
随机推荐
- [题解向] CF#536Div2の题解 E&F
\(0x01~~Preface\) \(emmm\)这次CF本身打的很顺畅,但是居然unrated了--咕咕咕咕 这是头一次CF有比赛我全部题目都做了--可喜可贺可喜可贺233 简单总结一下前面四道题 ...
- Paper | U-Net: Convolutional Networks for Biomedical Image Segmentation
目录 故事背景 U-Net 具体结构 损失 数据扩充 发表在2015 MICCAI.原本是一篇医学图像分割的论文,但由于U-Net杰出的网络设计,得到了8k+的引用. 摘要 There is larg ...
- WebBrowser中html元素如何触发winform事件 z
只要注册一下事件就可以了. C#代码如下: using System;using System.ComponentModel;using System.Windows.Forms; namespace ...
- vue中mode hash 和 history的区别
对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...
- torch_10_stackGAN-V2
核心要点 StackGAN旨在生成高分辨率的真实图片. stackGAN-v1架构包含两个阶段:用于文本到图像的合成,阶段1GAN根据给定的文本描述绘制对象的形状和颜色,生成低分辨率图像.阶段2将阶段 ...
- spring context:component-scan
<context:component-scan base-package="com.zhuguang.jack" <!-- 扫描的基本包路径 --> annota ...
- 升级 ASP.NET Core 3.0 设置 JSON 返回 PascalCase 格式与 SignalR 问题
由于一些 JS 组件要求 JSON 格式是 PascalCase 格式,新版本 ASP.NET Core 3.0 中默认移除了 Newtonsoft.Json ,使用了微软自己实现的 System.T ...
- 用Python帮你上马,哪里无码打哪里
目录 0 引言 1 环境 2 需求分析 3 代码实现 4 代码全景展示 5 后记 0 引言 所谓的像素图,就是对图像做一个颗粒化的效果,使其产生一种妙不可言的朦胧感.费话不多说,先来看一张效果图. ▲ ...
- Elasticsearch(ES) 创建索引
欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...
- OpenGL入门1.1:窗口
每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 测试GLFW 在我们的test.cpp中加入下面两个头文件 #include <glad/glad.h> #inclu ...





