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 改变命令的权限 ...
随机推荐
- <Linux> Xen虚拟机下挂载
//创建源vdisk挂载目录: mkdir vd1 //创建目标vdisk挂载目录: mkdir vd2 //只需第一次执行: iscsiadm -m discovery --type sendta ...
- AndroidStudio实现JNI的示例详解
1. NDK简介 Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,因此又被Google称为“NDK” 1.1 NDK产生的背景 Androi ...
- java pns
http://autumnrain-zgq.iteye.com/blog/1743279 http://blog.csdn.net/a351945755/article/details/2218939 ...
- Android Studio上手,基于VideoView的本地文件及流媒体播放器
既然是第一个Android程序.少不了要Hello World. 1. 新建安卓project watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm0wNTE ...
- JM-2 jQuery Mobile的使用(多看学习视频)
JM-2 jQuery Mobile的使用(多看学习视频) 一.总结 一句话总结:前端框架的使用全都一个样,本质都是css和js,引入文件也是这些.使用都是看手册,超简单. 1.jQuery Mobi ...
- KMP练习——KMP模式匹配 一(串)
Description 求子串的next值,用next数组存放,所有输出 Input 输入一个字符串 Output 输出全部next值 Sample Input abaabcac Sample Out ...
- 双机热备的Quartz集群
sqlserver搭建高可用双机热备的Quartz集群部署[附源码] 一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz ...
- 【codeforces 779D】String Game
[题目链接]:http://codeforces.com/contest/779/problem/D [题意] 给你一段操作序列; 按顺序依次删掉字符串1中相应位置的字符; 问你最多能按顺序删掉多少个 ...
- git安装使用详解
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不 需要联网了,因为版本都是在自己的电脑上.既然每个人的电脑都有一个完整的版本库,那多个人如何 ...
- yii2框架学习一 yii安装与常见问题
1 安装安装有两种 cpmposer 喝归档文件 安装 这里采用的归档文件安装 归档文件安装分为两种 基础末班和高级模板,这里采用高级模板 在官网或者yii-china 下载归档文件 解 ...