MySQL--->高级对象
本章目标:
- 掌握MySQL视图
- 掌握MySQL存储过程
- 掌握MySQL触发器
1.视图:
视图就是一条select语句执行后返回的结果集。
- 使用场景:权限控制的时候不希望用户访问表中某些敏感信息的列
- 创建视图:
create view 视图名称
AS
Select 语句
2.修改视图:
alter view 视图名称
AS
Select 语句
3.删除视图:
show tables 显示视图
drop view 视图名
drop view if exists 视图名
查看视图 : select * from 视图表名
2.存储过程:
定义:
- 存储在数据库当中可以执行特定工作(查询和更新)的一组SQL代码的程序段。类似于功能函数
显示所有的存储过程: Show procedure staus
2.1创建存储过程:
修改sql语句结束的标识符: delimiter + 类型
create procedure 存储过程名称(参数列表)
BEGIN
存储操作的语句块;
END
调用: call 存储过程名称
2.2存储过程参数分为两种
- IN 给参数传入值,定义的参数就得到了值。
- in 参数名 + 表中字段的类型
创建一个无参无返的存储过程:
#存储过程实现能够查询所有的借阅记录。
select * from info;
#修改sql语句结束的标识符
delimiter //
CREATE PROCEDURE pro_info()
begin
select * from info;
end//
创建一个无参有返的存储过程:
1.out :返回值
- out 参数名 + 要返回的数据的类型
#实现的功能是查询出所有图书的平均价格。
select avg(price) as 平均价格 from books;
-- out 参数的名称 数据类型
DELIMITER //
create PROCEDURE pro_info2(out priceAvg FLOAT)
BEGIN
select avg(price) INTO priceAvg from books; into 相当于赋值
END//
call pro_info2(@priceAvg); 参数@+名称
select @priceAvg;
创建一个有参无返的存储过程:
#这个存储过程要实现的功能是,查询某个价格范围内(20-200)的图书信息
select * from books where price BETWEEN 20 and 200; 10 1000
-- 有参数 第一个价格 第二个价格
-- in 名字 数据类型
-- out
delimiter //
create PROCEDURE pro_info1(in price1 FLOAT,in price2 FLOAT)
BEGIN
select * from books where price BETWEEN price1 and price2;
end//
-- 有参数 call 存储过程的名字(传入的参数)
call pro_info1(10,200);
2.2删除存储过程:
- drop procedure [if exists] 存储过程的名字
- 显示所有的存储过程: Show procedure staus
3.触发器:
定义:
- 当一件事发生的时候,会引发其他相关的时间发生
- 只要当一个预定义的事件发生的时候,就会被MySQL自动调用
语法:
修改sql语句结束的标识符: delimiter + 类型
create trigger 触发器名称 {befor | after }{insert | update | delete } on 表名
for each row
begin
触发器执行的语句块
end
案例1:
例1:创建insert触发器。当在card表中新增加一个借阅用
-- 户的时候,显示“新增用户成功”。
DELIMITER //
create trigger tri_ins_card after insert on card
for each row
begin
select "新增用户成功" into @result;
end
select * from card;
insert into card (name,class)values("王渝凯","大数据1班");
select @result;
select @resu;
案例2:
#例2:创建insert触发器。借阅人借阅一本书会在info表中
-- 产生一条记录,此时被借阅的书籍的总数量应该减1。触发
-- 在info表中。
-- 对图书表的里面图书数量进行减1,对哪本书进行减1呢
-- update books set quanitity=quanitity-1 where 哪本书
-- --如果我们能够拿到新插入的那条借阅记录的bno
select * from info;
DELIMITER //
create TRIGGER tri_insert_info after insert on info
for each row
begin
select new.bno into @bnoValue;-- 拿到插入的那条借阅记录的bno
update books set quanitity=quanitity-1 where bno=@bnoValue;-- 进行数量的更新
end
select * from books;
select * from info;
select * from card;
insert into info(cno,bno,rdate)value(106,1006,NOW());
定定义
士大夫撒发斯蒂芬
MySQL--->高级对象的更多相关文章
- mysql笔记04 MySQL高级特性
MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...
- MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题
1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...
- 第三章 MySQL高级查询(一)
第三章 MySQL高级查询(一) 一.SQL语言的四个分类 1. DML(Data Manipulation Language)(数据操作语言):用来插入,修改和删除表中的数据,如INSE ...
- mysql高级、索引
一.mysql高级 1.视图 # 引子 select * from emp left join dep on emp.dep_id = dep.id union select * from emp r ...
- Mysql 高级部分
MySQL 高级部分 (1)索引(index)..................................................................... 1 (2) ...
- 干货:鲜为人用的MySQL高级特性与玩法!
上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...
- mysql高级day4
Mysql高级-day04 1. MySql中常用工具 1.1 mysql 该mysql不是指mysql服务,而是指mysql的客户端工具. 语法 : mysql [options] [databas ...
- mysql高级day1
Mysql高级-day01 MySQL高级课程简介 序号 Day01 Day02 Day03 Day04 1 Linux系统安装MySQL 体系结构 应用优化 MySQL 常用工具 2 索引 存储引擎 ...
- MySQL高级查询与编程作业目录 (作业笔记)
MySQL高级查询与编程笔记 • [目录] 第1章 数据库设计原理与实战 >>> 第2章 数据定义和操作 >>> 2.1.4 使用 DDL 语句分别创建仓库表.供应 ...
- MySQL高级查询与编程笔记 • 【目录】
章节 内容 实践练习 MySQL高级查询与编程作业目录(作业笔记) 第1章 MySQL高级查询与编程笔记 • [第1章 数据库设计原理与实战] 第2章 MySQL高级查询与编程笔记 • [第2章 数据 ...
随机推荐
- Python面向对象04 /封装、多态、鸭子类型、类的约束、super
Python面向对象04 /封装.多态.鸭子类型.类的约束.super 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 3. 鸭子类型 4. 类的 ...
- 老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化
引言 今天周末,我在家坐着掐指一算,马上又要到一年一度的金九银十招聘季了,国内今年上半年受到 YQ 冲击,金三银四泡汤了,这就直接导致很多今年毕业的同学会和明年毕业的同学一起参加今年下半年的秋招,这个 ...
- 深入浅出ReentrantLock源码解析
ReentrantLock不但是可重入锁,而且还是公平或非公平锁,在工作中会经常使用到,将自己对这两种锁的理解记录下来,希望对大家有帮助. 前提条件 在理解ReentrantLock时需要具备一些基本 ...
- Dresdon二次开发
在上一篇文章中,我们已经对Dresdon所提供的功能进行了简单的介绍.在这篇文章中,我们将介绍如何基于Dresdon进行二次开发. Dresdon的扩展点 就像上一篇文章所介绍的那样,Dresdon主 ...
- 一位Google高管审查了20,000+简历,他发现了这5个致命的错误
工作与生活的平衡 下班划水摸鱼时间,我比较喜欢浏览一下各类新闻网页,比如说ins,这不,我就在ins上看到了这样的一篇文章,内容很简单,就是简历,但是就是这样一份简历,却让这位Google高管震惊不已 ...
- TeamX
介绍 TeamX 是基于 SolonJT 平台构建的团队管理小工具,主要功能有: Wiki(团队词条,用于写MD格式接口文档也行...) Planned(项目计划 和 个人日志) Issues(问题管 ...
- 并发编程AQS----共享锁
Semaphore Semaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目.应用场景:资源访问,服务限流. Semaphore 实现AbstractQueuedSynchro ...
- PagedList分页,如何添加action参数
使用PagedList分页,如 @Html.PagedListPager((IPagedList)Model, page => Url.Action("Index", new ...
- Java中lambda(λ)表达式的语法
举一个排序的例子,我们传入代码来检查一个字符串是否比另一个字符串短.这里要计算: first.length() - second.length() first和second是什么?他们都是字符串.Ja ...
- 题解 洛谷 P5465 【[PKUSC2018]星际穿越】
首先考虑题目的性质,发现点向区间连的边为双向边,所以也就可以从一个点向右跳到区间包含该点的点,如图所示: 但事实上向后跳其实是不优的,可以有更好的方法来节省花费: 因此我们发现一个点跳到其前一个区间的 ...