mysql 视图,存储过程,游标,触发器,用户管理简单应用
mysql视图——是一个虚拟的表,只包含使用时动态查询的数据
优点:重用sql语句,简化复杂的SQL操作,保护数据,可以给用户看到表的部分字段而不是全部,更改数据格式和表现形式
规则: 名称唯一,必须有创建视图访问权限,order by可以用与视图,但是检索视图的sql语句中包含order by 将覆盖视图中的order by
使用视图:
create view viewName as select * from tablename --创建视图
show create view viewName --查看创建视图的语句
drop view viewName --删除视图
对视图更新会更新视图的基表,也并非所有的视图都可以更新若视图中包含 分组(group by 和 having),联结,子查询,并及(union ) ,聚集函数(min(),count(),sum),disinct,导出计算列
存储过程 —— 创建存储过程
delimiter // --改变默认的语句结束符
create procedure userName () --创建一个名称为 userName的存储过程 不带参数
begin
select name from user;
end //
delimiter ; --
call userName(); --调用存储过程
drop procedure userName; -- 删除存储过程
带参数的存储过程 以及调用
--带输入参数,查询指定名称人的年龄
delimiter //
CREATE PROCEDURE getUserAge(in userName VARCHAR(20))
BEGIN
SELECT age from user where name = userName;
END //
delimiter ;
call getUserAge('zhangsan'); --带输出参数,查询指定名称人的年龄
delimiter //
CREATE PROCEDURE getUserAge2(in userName VARCHAR(20),inout userAge int)
BEGIN
SELECT age into userAge from user where name = userName;
END //
delimiter ;
call getUserAge2('zhangsan',@userAge); --调用执行函数,执行完后给参数赋值
select @userAge --查询被赋值的参数的结果
带参数-带判断的复杂存储过程------ 关键字 declare xxName 存储过程内部定义变量
-- 带参数 以及内部参数 带判断的复杂存储过程
delimiter //
CREATE PROCEDURE getUserAge(in userName varchar(20),in flag boolean,inout userAge int)
BEGIN
declare myAge int ; -- 定义内部参数
SELECT age INTO userAge from user where name=userName limit 1;
IF flag THEN
SELECT MAX(age) INTO myAge from user ;
END IF;
select myAge into userAge; --内部参数赋值给外部参数
END //
delimiter ;
call getUserAge('zhangsan',true,@userAge); --
select @userAge
show create procedure getUserAge; -- 查看存储过程的定义
--游标,某个查询结果集内部行的指针,只能在存储过程中使用
规则: 必须提前声明游标,然后打开游标,使用后必须结束游标,
delimiter //
CREATE PROCEDURE saveAge()
BEGIN
declare uName varchar(20) // --游标使用的内部变量
declare uAge int//
declare done boolean default false// --游标使用的内部变量 declare myAge cursor for --定义并使用游标
SELECT age,name from user // --查询所有的年龄和姓名 declare continue HANDLER for not found set done = true; -- 当游标指向下一行为空是给done变量赋值为true
open myAge// --打开游标
repeat --循环开始
FETCH next myAge into uAge,uName// --获取游标指向行的数据
if uAge > '' then --如果年龄大于25那么就存档到user1表中
insert into user1(name) values(uName)//
end if//
until done end repeat // --当变量done为ture的时候结束循环 close myAge// --关闭游标
END //
delimiter ;
触发器——当达到某个执行条件进行自动处理的sql代码 ,只有 insert,delete,update 语句可以定义触发器
定义触发器的要求:必须是实体表(不支持视图,临时表),触发的条件(只有 insert,delete,update 语句可以定义触发器),什么时候触发(指定语句之前还是之后)
触发器失败:MySQL的触发器是按照BEFORE触发器、行操作、AFTER触发器的顺序执行的,其中任何一步发生错误都不会继续执行剩下的操作。如果是对事务表进行的操作,那么会整个作为一个事务被回滚,但是如果是对非事务表进行的操作,那么已经更新的记录将无法回滚,这也是设计触发器的时候需要注意的问题。
删除触发器:drop trigger triggerName;
insert 触发器:在insert触发器代码内可以引用一个名为new的虚拟表,访问被插入的行;对于before insert触发器中,new的值也可以被更改,对于自增列则,new在insert执行之前包含0,在insert执行知乎自动包含新生成的值
--AFTER触发之后,before触发之前 new虚拟表在insert触发器中使用,old虚拟表在update或delete语句的触发器中使用 --insert 触发器
delimiter //
create trigger newUser AFTER insert on user for each row
begin
insert into user1(name) values(NEW.name);
end; --delete触发器 ,删除时存在一个OLD虚拟表 以供使用
create trigger deleteUser before delete on user for each row
begin
insert into user1(name) values(OLD.name); --删除的时候将名称存档到user1表中
end; --update触发器
create trigger updateUser before update on user for each row
begin
insert into user1(name) values(OLD.name); --发生修改时,将被修改之前的名称存档到user1表中
end;
mysql 访问控制 ——mysql内部以user表管理当前数据库所有的用户账户信息
--创建登录用户名为zhangsa 密码为123456 也可以直接用insert 语句直接创建用户(不建议使用)
create user zhangsan identified by '';
--删除zhangsan这个用户
drop user zhangsan ;
--查看用户权限
show grants for zhangsan;
--修改某个用户的权限 多个权限用分号隔开
grant select,update on test.* to zhangsan; -- 给zhangsan用户授予查看和更新的权限
--查看 用户权限操作记录
show grants for zhangsan
--grant的反操作符 revoke 取消用户的指定权限,该权限必须存在 否则将报错
revoke update on test.* from zhangsan -- 取消zhangsan的修改权限 ---授权的简化操作
整个服务器 grant all 和revoke all
整个数据库 on datebaseName.*
特定的表 on datebaseName.tablename
特定的列,以及特定的存储过程 --修改某个用户的登录密码
set password for zhangsan = Password(''); --新密码必须使用password函数进行加密处理
--修改当前登录用户的密码
set password = Password('xxxx');
mysql 视图,存储过程,游标,触发器,用户管理简单应用的更多相关文章
- MySQL笔记 存储过程 游标 触发器
第二十三章 使用存储过程 MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就 ...
- mysql的安装使用及其用户管理
mysql的安装使用及其用户管理 一.mariadb安装 搭建yum源 [mariadb] name = MariaDB baseurl = http://mirrors.ustc.edu.cn/ ...
- MySQL必知必会笔记(六)存储过程 游标 触发器
留印:http://blog.sina.com.cn/s/articlelist_1254871964_5_1.html 第二十三章 使用存储过程 MySQL5 中添加了存储过程的支持. ...
- MySQL数据库(五)--用户管理、pymysql模块
一.用户管理(权限管理) 在MySQL中自带的mysql数据库中有4个表用于用户管理的 # 优先级从高到低 user > db > tables_priv > columns_pri ...
- MySQL数据库(五)—— 用户管理、pymysql模块
用户权限管理.pymysql模块 一.用户管理(权限管理) 在MySQL中自带的mysql数据库中有4个表用于用户管理的 # 优先级从高到低 user > db > tables_priv ...
- mysql之——存储过程 + 游标 + 事务
下面是自己曾经编写过的mysql数据库存储过程,留作存档,以后用到的时候拿来参考. 其中,涉及到了存储过程.游标(双层循环).事务. [说明]:代码中的注释只针对当时业务而言,无须理会. 代码如下: ...
- 逆袭之旅DAY15.东软实训.Oracle.约束、序列、视图、索引、用户管理、角色
2018-07-11 08:26:00 有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter表:(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系dep ...
- MySql的存储过程和触发器
Mysql的存储过程是类似于其它编程语言中的函数的功能,存储过程内部可以使用顺序循环和转移三种基本程序结构,而且整个存储过程可以接受和返回参数. 创建存储过程(procedure)时,因为其内部有以; ...
- Linux——用户管理简单学习笔记(四)
主要讲两个用户管理的案例: 1: 限制用户su为root,只允许某个组的的用户su # groupadd sugroup 首先添加我们的用户组 # chmod 4550 /bin/su 改变命令的权限 ...
随机推荐
- ASCII,Unicode和UTF-8终于找到一个能完全搞清楚的文章了
前言 平时喜欢写东西,看博客,一直对编码有些懵,今天下午也不知道看到了什么,突然想了解下,就找到了这个文章,看完真的豁然开朗,这个必须留下来做纪念. 点击打开链接 1.ASCII 我们知道,计算机内部 ...
- 怎样用O2O去改变充满谎言、疑虑和愤慨的维修行业
为什么千亿级的维修服务市场出不了行业巨头? 据相关统计,我国的整个维修服务市场规模可达每年数千亿元之巨(当中仅家电维修就可达近千亿规模,更遑论手机.数码.家具等维修). 相同是千亿级规模的服务行业 ...
- jquery中ajax中post方法(多学习:洞悉原理,触类旁通)(函数封装思想)
jquery中ajax中post方法(多学习:洞悉原理,触类旁通)(函数封装思想) 一.总结 1.多看学习视频:洞悉原理,触类旁通, 2.函数封装:$.post(URL,data,callback); ...
- PatentTips -- 一种在CoAP网络中注册的方法及装置
技术领域 [0001] 本发明涉及一种在CoAP网络中注册的方法及装置,属于网络通信技术领域. 背景技术 [0002] (Internet of Things,物联网)作为新一代的信息技术,越来越受到 ...
- html中如何实现表格移入移出时背景颜色改变?(两种方法)
html中如何实现表格移入移出时背景颜色改变?(两种方法) 一.总结 1.通过css的table标签的hover属性: 10 #tab:hover{ 11 background: green 12 } ...
- 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...
- 【codeforces 765C】Table Tennis Game 2
[题目链接]:http://codeforces.com/contest/765/problem/C [题意] 枚举游戏先拿到k分的人胜; 然后两个人一个人得了a分,一个人得了b分; 问你最多可能进行 ...
- array=nil 和 Array=[[NSMutableArray alloc]init]; 的区别
情况1: array=nil; [_PayArray addObject:BillDetail]; 此时array还是nil:因为array没有分配地址应该. 情况2: Array=[[NSMutab ...
- [转]mnesia数据库学习笔记
mnesia数据库学习笔记一 mnesia数据库学习笔记二 mnesia数据库学习笔记三 mnesia数据库学习笔记四
- 【codeforces 782A】Andryusha and Socks
[题目链接]:http://codeforces.com/contest/782/problem/A [题意] 如果手套没有成一双,那么其中的一只就会被放在桌子上; 问你桌子上手套的只数最多的时候有几 ...