参考资料

一、视图

视图的含义:

视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表。

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 视图&事务&触发器的更多相关文章

  1. mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数

    mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果 ...

  2. Mysql 视图 游标 触发器 存储过程 事务

    Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...

  3. Mysql视图、触发器、事务、储存过程、函数

    一.视图 什么是视图 视图是有一张表或多张表的查询结果构成的一张虚拟表 为什么使用视图 当我们在使用多表查询时 我们的sql语句可能会非常的复杂,如果每次都编写一遍sql'的话无疑是一件麻烦的事情,这 ...

  4. SQL学习笔记七之MySQL视图、触发器、事务、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...

  5. mysql:视图、触发器、事务、存储、函数、流程控制

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 回到顶部 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只 ...

  6. python开发mysql:视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...

  7. MySQL视图、触发器、事务、存储过程、函数

    视图.触发器.事务.存储过程.函数   阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据 ...

  8. MySQL(视图、触发器、函数)

    day61 参考:http://www.cnblogs.com/wupeiqi/articles/5713323.html 视图 视图:给某个查询语句设置别名,日后方便使用               ...

  9. mysql:视图,触发器,事务,存储过程,函数

    一.视图 视图是一个虚拟表并不是(正实存在的) 创建老师表 create table teacher( id int primary key auto_increment, tname varchar ...

随机推荐

  1. Mybatis主配置文件配置url报错:Cause: org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 100; 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。

    <property name="url" value="jdbc:mysql://localhost:3306/shop?characterEncoding=UTF ...

  2. Luogu P5363 [SDOI2019]移动金币

    话说这题放在智推里好久了的说,再不写掉对不起自己233 首先你要知道一个叫做阶梯Nim的东西,具体的可以看这篇博客 那么我们发现这和这道题的关系就很明显了,我们把两个金币之间的距离看作阶梯Nim的每一 ...

  3. [LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会

    [LOJ 2133][UOJ 131][BZOJ 4199][NOI 2015]品酒大会 题意 给定一个长度为 \(n\) 的字符串 \(s\), 对于所有 \(r\in[1,n]\) 求出 \(s\ ...

  4. display Flex 盒子模型布局兼容Android UC

    <!DOCTYPE html><html><head><meta charset="utf-8"><meta content= ...

  5. 题目:利用Calendar类计算自己的出生日期距今天多少天,再将自己的出生日期利用SimpleDateFormat类设定的格式输出显示

    package cn.exercise; import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFo ...

  6. JS解决所有浏览器连续输入英文字母不换行问题,包括火狐(转)

    问题描述: <p style="font-size:12px;line-height:30px;">测试数据测试数据</p> p标签内如果输入一长段英文字符 ...

  7. HTTP Error 502.5 - ANCM Out-Of-Process Asp.Net Core发布到IIS失败

    问题概述 asp.net core网站发布到windows server 2012r2 IIS后,出现这个报错.dotnet xx.dll命令网站能够正常运行.说明不是程序问题. 经过一番折腾终于部署 ...

  8. kali渗透综合靶机(十四)--g0rmint靶机

    kali渗透综合靶机(十四)--g0rmint靶机 靶机下载地址:https://www.vulnhub.com/entry/g0rmint-1,214/ 一.主机发现 1.netdiscover - ...

  9. 排序算法Java代码实现(二)—— 冒泡排序

    本篇内容: 冒泡排序 冒泡排序 算法思想: 冒泡排序的原理是:从左到右,相邻元素进行比较. 每次比较一轮,就会找到序列中最大的一个或最小的一个.这个数就会从序列的最右边冒出来. 代码实现: /** * ...

  10. weblogic删除域

    彻底删除weblogic域的方法: 例如:删除域名为:fm_ump的域 第一步,删除域注册记录: [bofm@UAT02-BIZ-ZJCG-AP-008 Middleware]$ cd /home/s ...