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 改变命令的权限 ...
随机推荐
- php汉字字符串长度和截取
mb_strlen("你好123",'utf-8');//返回5 strlen("你好");//返回几我也不知道,肯定不是2,但你想要2就用上面的 substr ...
- [Most.js] Create Streams From Single Values With Most.js
Most provides many means for creating streams, the simplest of which is the offunction. In this less ...
- Windows下启动ActiveMq端口被占用的解决办法
cd /D E:\RuntimeSoft\apache-activemq-5.11.0\binactivemq.bat start结果提示:端口号被占用. Windows下查看端口号被占用开始--运行 ...
- Git 常用命令总结(精问)
Git 常用命令总结(精问) 一.总结 一句话总结:下次尝试做任何git的操作之前,把这个精看精问一遍,绝对会有意向不到的收获. 二.Git 常用命令总结 1.git常用命令 安装及配置: Ubunt ...
- erlang的Socket参数含义
http://blog.csdn.net/pkutao/article/details/8572216 {ok, Listen} = gen_tcp:listen(?defPort, [binary, ...
- Oracle导入脚本文件乱码问题
用脚本直接导入,Oracle出现乱码 绝大多数情况是Oracle客户端环境变量NLS_LANG的值和数据库字符集不一致导致. (注nls_lang修改的是Oracle客户端字符集的编码,locale命 ...
- Sqlplus的一般操作
Sqlplus一些必要操作指令 1, 登陆sys 用户,需要加上 as sysdba Connect sys as sysdba; Input your password; Connected; 2, ...
- js声明json数据,打印json数据,遍历json数据,转换json数据为数组
1.js声明json数据: 2.打印json数据: 3.遍历json数据: 4.转换json数据为数组; //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿 ...
- 【序列操作I】线段树
题目描述 Lxhgww 最近收到了一个 01 序列,序列里面包含了 n(1≤n≤105)个数,这些书要么是 0,要么是 1,现在对这个序列有五种变换操作和询问操作:1. 0 a b ,把[a,b]区间 ...
- Mapreduce 订单分组案例
程序执行流程如下: map()-->getPartition()分区--->write()(序列化,每一行都顺序执行这三个方法)--->readFields()---->com ...