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 改变命令的权限 ...
随机推荐
- css3-1 css3游戏介绍、css3样式和优先级
css3-1 css3游戏介绍.css3样式和优先级 一.总结 一句话总结:我们写外部css表的时候可以用class,那样使用的人用id修改的话优先级就比我们高,达到目的. 1.html嵌套css样式 ...
- Android 带清除功能的输入框控件EditTextWithDel
记录下一个非常有用的小控件EditTextWithDel.就是在Android系统的输入框右边增加一个小图标.点击小图标能够清除输入框里面的内容,由于Android原生EditText不具备此功能,所 ...
- 【t019】window(单调队列)
Time Limit: 2 second Memory Limit: 256 MB [问题描述] 给你一个长度为N 的数组,一个长为K的滑动的窗体从最左移至最右端,你只能见到窗口的K个数,每次窗体向右 ...
- [Ramda] Get a List of Unique Values From Nested Arrays with Ramda (flatMap --> Chain)
In this lesson, we'll grab arrays of values from other arrays, resulting in a nested array. From the ...
- Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能
好久没写博客了 这几天在学习cocos studio,这个软件可以很方便的设计游戏的一些界面,并导入到cocos2dx中,今天就用button来做个样例 首先我们打开Cocos Studio1.6,选 ...
- 在intellij idea 中怎么不用git 解除关联
展开全部 file ->settings->version control 选中这一栏,右边有个 点红色减号,就解除了,然后去项目目录下删除.git这个文件夹,你可以不删除,为了以后继续关 ...
- 【干货】Chrome插件(扩展)开发全攻略(转)
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- .NET CORE的TagHelper智能提示
VisualStudio2017下ASP.NET CORE的TagHelper智能提示不能使用的解决办法 之前在VS2017RC中就发现该问题,安装了依赖,但是前段一直点不出来asp-for,后来 ...
- IO 字符流学习
import java.awt.Frame; import java.io.*; public class filewriter { /** * @param args */ public stati ...
- poi读取xlsx
知道 大家都知道用poi读取xls 当时有时候 必需要读取xlsx 如今我把我做測试的demo分享给大家 package com.lt.main; import java.io.File; imp ...