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 ...
随机推荐
- 【ECNU3542】神奇的魔术(二分交互题)
点此看题面 大致题意: 有一个\(1\sim 2^n\)的排列,\(n\le7\),每次交互告诉你有几个位置上的数是正确的,让你在\(1000\)轮以内猜出每个位置上的数. 二分 显然,我们可以通过二 ...
- 剑指offer:按之字形打印二叉树(栈|双向队列+中序遍历)
1. 题目描述 /** 请实现一个函数按照之字形打印二叉树, 即第一行按照从左到右的顺序打印, 第二层按照从右至左的顺序打印, 第三行按照从左到右的顺序打印, 其他行以此类推. */ 2. 双向队列 ...
- 修改kile工程名字(转)
假设原来的工程文件名是first,要改成second1.在工程文件目录中,将first.uvopt和first.uvproj名字改成second.uvopt和second.uvproj.2.其他fir ...
- 一、SqlServer查询今天的数据-多写法对比性能问题
-- 目标:查询当天的所有数据 -- 说明:表数据行数:960w --方法一:使用格式化被查询条件与格式化当前时间比对 ),)),) --方法二:使用函数DATEDIFF 比对 --方法三:使用传统比 ...
- PMP132种工具与技术
<PMBOK ® 指南>第六版中共包括 132 种工具与技术 <PMBOK ® 指南>使用了以下工具与技术分组:1.数据收集技术.用于从各种渠道收集数据与信息.共有9 种数据收 ...
- 诡异问题:tomcat启动一直卡住,strace跟踪提示apache-tomcat核心文件找不到。
最近遇到了一个诡异的tomcat问题,被这个问题折磨了2天.是这样的,启动tomcat后一直卡在这个点上: org.apache.catalina.core.StandardEngine.startI ...
- 大话设计模式Python实现-工厂方法模式
工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. #!/usr/bin/env python ...
- set -x 与 set +x
set -x 与 set +x 在liunx脚本中可用set -x就可有详细的日志输出.免的老是要echo了 下面的网上搜来的用法. 用于脚本调试.set是把它下面的命令打印到屏幕set -x 是开启 ...
- SQLServer 跨服务器链接 Access数据库
最近做了一个链接Access的实例,记录一笔. 如果你的Access数据库文件和SQLServer数据库在同一服务器上,可直接在数据库手动创建数据库链接 步骤如下: 打开新建链接,给你的链接起一个顺眼 ...
- Python简单的get和post请求
1.json 模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多. ...