mysql事务、触发器、视图、存储过程、函数
存储过程: procedure
概念类似于函数,就是把一段代码封装起来,
当要执行这一段代码的时候,可以通过调用该存储过程来实现.
在封装的语句体里面,可以用if/else, case,while等控制结构.
可以进行sql编程.
查看现有的存储过程:
Show procedure status
删除存储过程
Drop procedure 存储过程的名字
调用存储过程
Call 存储过程名字();
第1个存储过程 ,体会"封装sql"
第2个存储过程, 体会"参数"
第3个存储过程,体会"控制结构"
第4个存储过程,体会"循环"
在mysql中,存储过程和函数的区别,
一个是名称不同,
二个就是存储过程没有返回值.
mysql函数
触发器:
能监视: 增,删,改
触发操作: 增,删,改
四要素:
监视地点
监视事件
触发时间
触发事件
创建触发器的语法
Create trigger triggerName
After/before insert/update/delete on 表名
For each row #这句话是固定的
Begin
Sql语句; # 一句或多句,insert/update/delete范围内
End;
删除触发器的语法:
Drop trigger 触发器名
查看触发器
Show triggers
如何在触发器引用行的值
对于insert而言, 新增的行 用new 来表示,
行中的每一列的值 ,用new.列名来表示.
对于 delete来说, 原本有一行,后来被删除,
想引用被删除的这一行,用old,来表示, old.列名,就可以引用被删行中的值.
对于update来说,
被修改的行,
修改前的数据 ,用 old来表示, old.列名引用被修改之前行中的值
修改后的数据,用new 来表示, new.列名引用被修改之后行中的值
事务:
通俗的说事务: 指一组操作,要么都成功执行,要么都不执行.---->原子性
在所有的操作没有执行完毕之前,其他会话不能够看到中间改变的过程-->隔离性
事务发生前,和发生后,数据的总额依然匹配----->一致性
事务产生的影响不能够撤消------>持久性
如果出了错误,事务也不允许撤消, 只能通过"补偿性事务"
转账
李三: --->支出 500, 李三 -500
赵四: ---->收到500, 赵四 +500
关于事务的引擎:
选用innodb /bdb
开启事务: start transaction;
Sql....
Sql....
Commit 提交
rollback 回滚
注意: 当一个事务commit,或者rollback就结束了
注意:有一些语句会造成事务的隐式的提交,比如 start transaction
事务 的基本原理 (了解)
触发器:trigger, 枪击,扳击,引线的意思
一触即发,
作用: 监视某种情况并触发某种操作.
观察以下场景:
一个电子商城,
商品表, g
| 
 主键  | 
 商品名  | 
 库存  | 
| 
 1  | 
 电脑  | 
 28  | 
| 
 2  | 
 自行车  | 
 12  | 
订单表, o
| 
 订单主键  | 
 商品外键  | 
 购买数量  | 
| 
 1  | 
 2  | 
 3  | 
| 
 2  | 
 1  | 
 5  | 
完成下单与减少库存的逻辑
Insert into o (gid,num) values (2,3); // 插入语句
Update g set goods_num = goods_num - 3 where id = 2;// 更新过程
这两个逻辑可以看成一个整体,或者说, insert ---> 引来 update
用触发器可以解决上述问题.
我们可以监视某表的变化,当发生某种变化时,触发某个操作.
视图: view
查询每个栏目最贵商品 --->
Select goods_id,goods_name,shop_price from goods order by cat_id asc ,shop_price desc
查询结果 当成一张表看
如果某个查询结果出现的非常频繁,也就是,拿这个结果当做进行子查询出现的非常频繁,
Create table g2 like goods;
Insert into g2 select ........
上面两句,是想保存一个查询结果到表里面, 供其他查询用.
视图的定义:
视图是由查询结果形成的一张虚拟表.
视图的创建语法:
Create view 视图名 as select 语句;
视图的删除语法:
Drop view
为什么要视图?
答:1:可以简化查询
2: 可以进行权限控制
把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据
3: 大数据分表时可以用到
比如,表的行数超过200万行时,就会变慢,
可以把一张的表的数据拆成4张表来存放.
News表
Newsid, 1,2,3,4
News1,news2,news3,news4表
把一张表的数据分散到4张表里,分散的方法很多,
最常用可以用id取模来计算.
Id%4+1 = [1,2,3,4]
比如 $_GET['id'] = 17,
17%4 + 1 = 2, $tableName = 'news'.'2'
Select * from news2 where id = 17;
还可以用视图, 把4张表形成一张视图
Create view news as select from n1 union select from n2 union.........
视图的修改
Alter view as select xxxxxx
视图与表的关系
视图是表的查询结果,自然表的数据改变了,影响视图的结果.
视图改变了呢?
0: 视图增删改也会影响表
1: 但是,视图并是总是能增删改的.
答: 视图的数据与表的数据 一一对应时,可以修改.
对于视图insert还应注意,
视图必须包含表中没有默认值的列.
视图的algorithm
Algorithm = merge/ temptable/ undefined
Merge: 当引用视图时,引用视图的语句与定义视图的语句合并.
Temptable:当引用视图时,根据视图的创建语句建立一个临时表
Undefined:未定义,自动,让系统帮你选.
Merge,意味着视图只是一个规则,语句规则, 当查询视图时,
把查询视图的语句(比如where那些)与创建时的语句where子句等合并,分析.
形成一条select 语句.
例: 创建视图的语句:
MySQL> create view g2 as select goods_id,cat_id,goods_name,shop_price from goods order by cat_id asc,shop_price desc;
查询视图的语句:
select * from g2 group by cat_id;
最终执行的语句:
select goods_id,cat_id,goods_name,shop_price from goods group by cat_id order by cat_id asc,shop_price desc;
而temptable是根据创建语句瞬间创建一张临时表,
然后查询视图的语句从该临时表查数据.
create altorethm=temptable view g2 as select goods_id,cat_id,goods_name,shop_price from goods order by cat_id asc,shop_price desc;
查询视图的语句:
select * from g2 group by cat_id;
最终执行的2句话: 取数据并放在临时表,然后去查临时表.
mysql事务、触发器、视图、存储过程、函数的更多相关文章
- 触发器 视图 存储过程 mysql常用函数
		
...
 - mysql 视图  触发器  事物 存储过程 函数 流程控制
		
1.视图 *** 视图是有一条sql语句的查询结果构成的虚拟表 其不是物理存在的 使用方式与普通表相同 视图的作用1.简化sql语句的编写 2.限制可以查看的数据 可以使用权限来完成 权限某一个库 的 ...
 - (八)MySQL事务、视图、变量、存储过程、函数、流程控制结构
		
补充:增删查改语句在数据库中基本通用,但这篇博客的内容基本是MySQL区别于其它数据库管理系统的知识,也要认真学习. 一.事务 1.含义:在MySQL中,可以通过创建事务来解决一些问题. 2.语法: ...
 - oracle 之索引,同义词 ,关键词,视图 ,存储过程,函数,触发器
		
--创建索引 关键词 index create[unique] index index_name on table_name(column_name [,column_name…]) [tablesp ...
 - SqlServer更新视图存储过程函数脚本
		
--视图.存储过程.函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR ...
 - MySQL 事务、视图、索引
		
一.事务(Transaction) 1.1 什么是事务? SQL中,事务是指将一系列数据操作捆绑成为一个整体进行统一管理. 如果一个事务执行成功,该事务中进行的所有数据均会提交,称为数据库中的永久组成 ...
 - [MySQL+PHP] 触发器及存储过程等MySQL功能在PHP中实现的坑
		
折腾了一下午,始终没有能搞定在PHP中编写事件. 因为业务需求,需要实现一个预操作的功能,即业务人员填写未来的某个要做某个操作.在这个日期到来之前,则一切照常. 想通过PHP编写MySQL Event ...
 - MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
		
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
 - mysql八:视图、触发器、事务、存储过程、函数
		
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
 - 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件
		
数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...
 
随机推荐
- 【thinking in java】读书笔记(一)
			
近期開始读tij,好记性不如烂笔头,所以还是记录一下,方便以后查阅. 一.各种初始化问题: 方法重载的问题: 方法的重载,差别是靠传入方法的參数,而不是返回值.比方f(),假设是返回值的话,easy产 ...
 - python与其它语言进行比較
			
近期python语言貌似比較火, 今天闲来无事,简单的看了下,算是个入门吧.一门语言之所以值得这么多人去学,必然有它的独到之处,以下我们就用python和其它语言做个比較. Pythond VS C# ...
 - 【deep learning学习笔记】注释yusugomori的LR代码 --- 模型测试
			
测试部分代码: void test_lr() { srand(0); double learning_rate = 0.1; double n_epochs = 500; int train_N = ...
 - POJ 1753 Flip Game(二进制枚举)
			
题目地址链接:http://poj.org/problem?id=1753 题目大意: 有4*4的正方形,每个格子要么是黑色,要么是白色,当把一个格子的颜色改变(黑->白或者白->黑)时, ...
 - HealthKit开发教程Swift版:起步
			
原文:HealthKit Tutorial with Swift: Getting Started 作者:Ernesto García 译者:Mr_cyz ) HealthKit是iOS 8中的新的A ...
 - Html  内嵌 选择器属性 Dom操作 JavaScript 事件
			
HTML标签: 一.通用标签(一般标签) 1.格式控制标签 <font color="#6699aa" face="楷体" size="24&q ...
 - 提升Delphi编程效率必须使用的快捷键(Delphi2007版本)
			
1. [CTRL+空格] [CTRL+SHIFT+空格] 这两个快捷键都是在代码编写过程中用到的,起提示作用,使用频率最高. CTRL+空格: 在当前光标处提示有哪些变量.函数可以使用.这个功能对于无 ...
 - 14.3.2.1 Transaction Isolation Levels     事务隔离级别
			
14.3.2 InnoDB Transaction Model InnoDB 事务模型 14.3.2.1 Transaction Isolation Levels 事务隔离级别 14.3.2.2 au ...
 - URAL 1963 Kite 四边形求对称轴数
			
题目链接: http://acm.timus.ru/problem.aspx?space=1&num=1963 题意,顺时针或逆时针给定4个坐标,问对称轴有几条,输出(对称轴数*2) 对于一条 ...
 - Spire.XLS for .NET 測评
			
有一位朋友推荐了我 Spire.Office (官网:http://www.e-iceblue.com/) -- 基于.NET的办公软件库,说不错. 究竟怎样呢?仅仅有亲測一下才干知道了. ...