数据库视图 触发器 存储过程
数据库视图
1.什么是数据库视图
视图是是一个虚拟表,它的内容都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表也可以对应其他视图。视图是基本表的抽象和在逻辑意义上建立的新关系。
2.视图的作用:
- 对复杂的sql语句进行封装
当一个查询你需要频频的作为子查询使用时,视图可以简化代码,直接调用而不是每次都去重复写这个东西。 - 对数据库中敏感的信息进行保护
因为给别人一个视图 只会给别人看到我们想给他看的东西 有一些不想让别人看到的信息别人通过视图是看不到的。
3.视图应该怎么用
创建视图语句create view 视图名 as <select 语句> describe语句查看视图基本信息describe 视图名; show table status语句查看视图基本信息show table status '视图名'; 注意: show table status命令中视图名要用单引号show create view语句查看视图详细信息show create view 视图名; alter view 视图名 as <select 语句>
注意:
每次SELECT 视图 的时候,视图都会重新计算创建它的规则(sql算法),如果算法复杂,数据量大,就会比较慢,那样每次就很慢了。
表的索引对于视图view来说是无效的,它是全表扫描的。
注意中的内容转自:https://blog.csdn.net/zengmingen/article/details/51004203
触发器
1.什么是触发器
触发器就是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程。不是由手动启动的而是在监听到表事件时自动启动的。
2.触发器的作用
可在写入数据表前,强制检验或转换数据。
触发器发生错误时,异动的结果会被撤销。
部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
可依照特定的情况,替换异动的指令 (INSTEAD OF)。
3.怎么用触发器
tips: 在创建触发器事前要先修改命令停止标识符 不然在写触发事件时就会被读取导致不能写完触发器delimiter $ $为默认第二顺位命令停止标识符创建完成之后要记得修改回去delimiter ;
存储过程
1. 什么是存储过程
一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
简单理解就可以认为存储过程就是相当于Java中的方法 (并不是这样的只是方便理解。
2.存储过程的作用
- 提高效率(存储过程本身执行速度非常快,调用存储过程大大减少数据库交互次数)
- 提高代码重用性(可以用更简短的代码实现很多次相同的操作 减少冗余)
3.如何使用存储过程
存储过程大致可分为 无参存储过程 跟 带参的存储过程
1.无参存储过程
create procedure pro4()beginselect 语句;end tips:写存储过程时也要记得修改命令停止标识符
2.带参存储过程(分为带 in out inout 三种参数
create procedure pro2( in n int)beginselect StudentName from studentinfowhere GradeID=n; endtips:in参数就是可以当作条件中的某个参数
---------------------------------------------------------------------
mysql> create procedure pro_2(in cid int(11),out cnum int(11))-> begin-> select c_num into cnum from commodity where c_id = cid;-> end$
Query OK, 0 rows affected (0.00 sec)
tips:into 关键词 可以将查询到的数据传给 cnum参数 可以传出去set @cn 定义变量的语句。
下面是一个例子用来写sql语句中的if else语句
mysql> #cu_gender=0 女 else 男
mysql> # if(sva=1,"男","女")
mysql> select cu_name,cu_gender,if(cu_gender=1,'男','女') #就很像三目运算符-> from customer;
+---------+-----------+---------------------------+
| cu_name | cu_gender | if(cu_gender=1,'男','女') |
+---------+-----------+---------------------------+
| 刘德华 | 1 | 男 |
| 张学友 | 1 | 男 |
| 林志玲 | 0 | 女 |
+---------+-----------+---------------------------+------------------------------------------------------------------
mysql> select c_name,c_num,case when c_num<=10 # 使用when then else end句式 -> then '库存少' else '库存充足' end-> from commodity limit 20;
+-----------------------+-------+--------------------------------------------------------+
| c_name | c_num | case when c_num<=10
then '库存少' else '库存充足' end |
+-----------------------+-------+--------------------------------------------------------+
| 变形金刚-擎天柱 | 60 | 库存充足 |
| 变形金刚-霸天虎 | 50 | 库存充足 |
| 变形金刚-威震天 | 15 | 库存充足 |
| 魔仙玩偶1 | 100 | 库存充足 |
| 超人玩偶 | 100 | 库存充足 |
| 小霸王游戏机 | 300 | 库存充足 |
| X-BOX游戏机 | 12 | 库存充足 |
| 任天堂游戏机 | 30 | 库存充足 |
| 乐高玩具-散装 | 100 | 库存充足 |
| 乐高玩具-快乐家庭 | 20 | 库存充足 |
| 乐高玩具-蝙蝠侠纪念版 | 6 | 库存少 |
| 夏日有人手办 | 10 | 库存少 |
| EVA模型玩具 | 10 | 库存少 |
| 平板电脑模型 | 120 | 库存充足 |
| 手机模型玩具 | 60 | 库存充足 |
| 手机模型玩具 | 10 | 库存少 |
| 手机模型玩具 | 8 | 库存少 |
| hellokitty手机链 | 40 | 库存充足 |
| 水枪-小 | 80 | 库存充足 |
| 水枪-大 | 80 | 库存充足 |
+-----------------------+-------+--------------------------------------------------------+
20 rows in set (0.01 sec)------------------------------------------------------------------
DELIMITER ;;
CREATE PROCEDURE `insertOrder`(in _o_cuid VARCHAR(50),in _o_cid VARCHAR(50),in _o_num INT,out flag INT(11))
BEGINset @_c_num=0; #设置一个变量用来判断完成insert命令后表中数据是否小于0set autocommit=0; #关闭自动提交START TRANSACTION; #设置事务起始点INSERT INTO `order` (o_cuid,o_cid,o_num) VALUES (_o_cuid,_o_cid,_o_num);set @_c_num=(select c_num from commodity where c_id=_o_cid);IF @_c_num>=0 #tips:sql中的if语句若满足条件 执行关键字then后的内容 不满足则执行else后的内容 最后要加上end if THEN COMMIT; # 若不小于0 则提交 返回flag参数等于1 用来传出成功修改这个信息SET flag = 1;else ROLLBACK; # 若小于0 则回滚到事务起始点 返回flag=0;SET flag = 0;END IF;set autocommit=1; #开启自动提交
END
;;
DELIMITER ;DELIMITER ;;
CREATE PROCEDURE `updateOrder`(in _o_id INT,in _o_num INT,out flag INT(11))
BEGINset @_c_num=0;set autocommit=0;START TRANSACTION;UPDATE `order` SET o_num=_o_num WHERE o_id=_o_id;set @_c_num=(select c_num from commodity where c_id=(SELECT o_cid FROM `order` WHERE o_id=_o_id));IF @_c_num>0 THEN COMMIT;SET flag = 1;else ROLLBACK;SET flag = 0;END IF;set autocommit=1;
END
;;
DELIMITER ;
数据库视图 触发器 存储过程相关推荐
- MySQL视图触发器存储过程内外链接数据锁
MySQL视图触发器存储过程内外链接数据锁 视图 什么是视图 是一个虚拟表,其内容由查询定义.同真实的一样,视图包含一系列带有名称的列和行数据 视图有什么用 视图的作用就是缓存数据,可以这么理解,我把 ...
- day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程
目录 01.反馈 02.回顾 03.并发访问MySQL-问题概述 并发访问的问题 04.并发访问MySQL-问题演示 05.并发访问MySQL-read-committed解决脏读问题 06.并发访问 ...
- mysql 视图触发器,MySql视图触发器存储过程详解
一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称.视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图. 创建 ...
- mysql视图执行原理_MySql中的视图 触发器 存储过程,以及事物
视图: 一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称.视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图 ...
- 表、视图、存储过程、函数、触发器、事件
表:里面存储的都是真实的数据 视图:就是一个表或者多个表的一个映射,一般只做查询使用.比如你想要的数据存在两个表里,但你查询时不想每次都写关联,那么你创建一个视图,以后只查询这个视图就可以(查询时视图 ...
- mysql-基础-视图,存储过程,触发器
面试题 面试你所要知道的:MySQL存储过程 https://blog.csdn.net/u012190514/article/details/80282161 课程内容 视图 存储过程 触发器 数据 ...
- SQL 视图,存储过程锁住了解锁的方法——最简单的方法
最近公司跟一家客户合作准备上系统,安排去分析客户原有的数据库,发现客户旧系统里面的数据库视图,存储过程都加密了,作为资深的码农,怎么可能会被吓到,俗话说,山人自有妙计,于是乎安排下面的一系列操作: 1 ...
- Java数据库篇8——索引、视图、存储过程、触发器
Java数据库篇8--索引.视图.存储过程.触发器 1.索引 1.1.索引是什么 在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令MySQL的查询和 运行更加高效 如果合理的 ...
- MySql基础篇---004 其它数据库对象篇:视图,存储过程与函数,变量、流程控制与游标 ,触发器
第14章_视图 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 1. 常见的数据库对象 对象 描述 表(TABLE) 表是存储数据的逻辑单元,以行和列的形 ...
最新文章
- golang python性能_Golang构建Python高性能模块
- 如何应对“吴恩达:人工智能落地最重要的挑战之一是小数据”的困境?
- Word在固定位置插入递增数字
- 编程语言之常用的编译器和软件的版本规范
- 分别安装搭建lamp服务环境
- mysql常用四种连接_MySQL四种连接查询
- 「数字电路系列」博文目录,学习总结
- Multi-task中的多任务loss平衡问题
- 个人博客网站添加文章搜索功能
- 微信小程序 — 公立医院申请
- 计算机实验室主要工作业绩范文,实验室工作总结
- 网易云项目(Vue)
- Photoshop2021 出现不可恢复的问题,即将退出
- 有免费而且好用的视频会议吗
- 大话设计模式(更新ing...)
- 简单HQL练习-统计店铺访客数
- NIST:生成安全密码密钥
- 个人怎么做自适应网站
- Knights of the Round Table
- 2017秋招知识点小记(C/C++)