/*
MySQL中的变量局部变量,用户变量,会话变量和全局变量。
用户变量不用定义,直接使用。
1.用户变量赋值
set @xxx = 值;
2.查询
select @xxx;
语法帮助:
过程保存在information_schema.routines表中
help create PROCEDURE
help drop PROCEDURE
help SET
help select
help WHILE
help if statement
help declare
bug点:
不同数据库可以存在同名的存储过程。
*/
drop table if exists product;
create table product(
id int primary key auto_increment,
name varchar(50) unique not null,
price double(10, 2) not null
);
insert into product(name, price)
values
('白菜', 5),
('豆角', 5),
('香菇', 10),
('土豆', 4); -- 定义一个求平均价格,最高价格,最低价格的存储过程 SELECT avg(price) FROM product INTO @avgprice;
SELECT @avgprice; -- 查询存储过程,保存在information_schema.routines表中
SELECT routine_schema, routine_name, definer, routine_body, routine_definition from information_schema.routines; -- 定义存储过程
delimiter //
CREATE PROCEDURE proc_db1.productprice(
OUT avg INT,
OUT max INT,
OUT min INT)
BEGIN
SELECT avg(price) INTO avg FROM product;
SELECT max(price) INTO max FROM product;
SELECT min(price) INTO min FROM product;
END //
delimiter ; -- 调用存储过程
-- CALL sp_name([parameter[,...]]);
CALL productprice(@avgprice, @maxprice, @minprice); -- 使用用户变量,保存
SELECT @avgprice, @maxprice, @minprice; -- 删除存储过程
-- DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name;
DROP PROCEDURE IF EXISTS proc_db1.productprice;

存储过程

 /*
MySQL手册中,变量分为:系统变量和用户变量。
实际开发中,认为分为4类:
1.局部变量
2.用户变量
3.会话变量
4.全局变量
语法帮助:
help set
help declare
help show 1.局部变量
概念:局部变量一般用在sql语句块中,其作用域局限于语句块。
语法:DECLARE var_name [, var_name] ... type [DEFAULT value] 2.用户变量
概念:
用户变量作用域是全局,生命周期是当前连接。
语法:@xxx 用户变量无需定义,直接使用。
赋值:
SET @xxx = 值;
查询:
SELECT @xxx;
查询+赋值:
SELECT @xxx := 值; 因为select语句中的=号是关系运算符,用:=表示赋值 3.会话变量
概念:
服务器为每个连接的客户端维护一系列会话变量。在客户端连接时使用相应的全局变量
的当前值对客户端的会话变量进行初始化。
设置会话变量不需要特殊的权限,但客户端只能更改自己的会话变量,不能更改其他客户端的会话变量。
会话变量的作用域是全局的,生命周期是当前连接。连接断开,则失效。 语法:
设置会话变量:
set 变量名 = 值;
set session 变量名 = 值;
set @@session.变量名 = 值;
查询会话变量:
select @@变量名;
select @@session.变量名;
show session variables [like '%变量名%']; 4.全局变量
概念:
全局变量影响服务器。当服务器启动时,它将所有全局变量初始化为默认值,
这些默认值可以在配置文件或启动参数中修改。全局变量作用于服务器的一次启动和关闭。
特点:
全局变量不能跨重启,服务重启后所有在mysql客户端中设置的全局变量将失效。
如果想让全局变量重启后继续生效,需更改配置文件。 语法:
设置全局变量:
set global 变量名 = 值;
set @@global.变量名 = 值;
查询全局变量:
select @@global.变量名;
show global variables [like '%变量名%'];
*/

MySQL变量

 /*
语法帮助:
1. help create user
2. help drop user
3. help alter user
4. help set password
*/ -- mysql.user表中查询用户和其密码验证插件
SELECT user, host, plugin from mysql.user; -- 查看验证插件
SHOW PLUGINS; -- 查看系统变量,服务器默认的密码验证插件
SHOW VARIABLES LIKE '%auth%'; -- 添加用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '新密码';
CREATE USER 'caocao'@'localhost' IDENTIFIED BY 'cao'; -- 删除用户
DROP USER '用户名'@'主机名';
DROP USER 'caocao'@'localhost'; -- 修改密码
/*
MySQL5.5中
*/
-- update mysql.user表 + password()函数设置密码
UPDATE mysql.user SET password=password('新密码') where user = '用户名';-- MySQL8不支持
UPDATE mysql.user set password=password('root') where user='caocao';-- MySQL8不支持
-- 刷新下,使其立即生效
FLUSH PRIVILEGES; -- set password + password()函数设置密码
SET PASSWORD FOR '用户名'@'主机名' = password('新密码');-- MySQL8.0.11中被移除
SET password for 'caocao'@'localhost' = password('root'); /*
MySQL8
*/
-- 空串表示没有密码,不指定验证插件使用的是当时的默认插件。
-- 使用help alter user查看是否能够获取到帮助信息,获取不到不支持。
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码'; -- MySQL8中
ALTER USER 'caocao'@'localhost' IDENTIFIED BY 'root'; -- 指定验证插件
ALTER USER 'caocao'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'caocao'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'root';
ALTER USER 'caocao'@'localhost' IDENTIFIED WITH sha256_password BY 'root'; -- 查看验证插件
SHOW PLUGINS; -- 查看系统变量,服务器默认的密码验证插件
SHOW VARIABLES LIKE '%auth%';

用户管理

 /*
语法帮助:
help grant
help revoke
*/
-- 查询有哪些权限
SHOW PRIVILEGES -- 查询用户表,里面有所有用户的权限信息
SELECT * FROM mysql.user; -- 查询对某个用户的授权
SHOW GRANTS FOR 'liubei'@'localhost'; -- 创建一个新用户
CREATE USER 'liubei'@'localhost' IDENTIFIED BY 'liu'; -- 添加权限,ALL表示所有权限 *.* 所有库所有表,数据库.* 某个库所有表
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
GRANT SELECT, INSERT ON db1.student TO 'liubei'@'localhost';
GRANT ALL ON *.* TO 'liubei'@'localhost'; -- 删除权限
REVOKE SELECT ON *.* FROM 'liubei'@'localhost';
REVOKE ALL ON *.* FROM 'liubei'@'localhost';

权限管理

黑马MySQL数据库学习day04 MySQL变量 存储过程 用户和授权管理的更多相关文章

  1. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  2. MySql数据库学习总结(MySQL入门到精通)

    2017.1.24-2.3日(在大兴实验室) 1.数据库存储引擎: (1)MyISAM: 访问速度快,对事物完整性没要求,并以访问为主的适合这个 (2)InnoDB: 更占磁盘空间,需要进行频繁的更新 ...

  3. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

    重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...

  4. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. MySQL数据库学习: 01 —— 数据库的概述

    壹 概述 一 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database)保存有组织的数据的容器(通常是一个文件或一组文件). 易混淆:人们常常用“数据库”这个词语来代表他们使 ...

  6. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  9. 重新学习MySQL数据库10:MySQL里的那些日志们

    重新学习MySQL数据库10:MySQL里的那些日志们 同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志, ...

随机推荐

  1. java在Win7 64位 获取客户端的IP,MAC,计算机名

    package com.javaweb.util; import java.io.IOException; import java.io.InputStreamReader; import java. ...

  2. 【275】◀▶ Python 控制语句说明

    参考:Python循环语句 01   for 循环语句. 02   while 循环语句. 03   if...else 选择语句. 04   continue 执行循环语句中的下一条循环. 05   ...

  3. PL/SQL批处理语句(二)FORALL

    PL/SQL批处理语句(二)FORALL 我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换, ...

  4. 【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度

    postion:absolute 跳出文本流,不是行内元素,设置宽高有效,我的理解. 引用下曹刘阳写的<编写高质量代码-web前端开发修炼之道>一书中看到的一句话:position:abs ...

  5. GCC 版本与C11标准

    1. GCC版本是否支持C11 C89=C90:gcc选项是:-ansi, -std=c90 or -std=iso9899:; 带了GNU扩展的:-std=gnu90 C94=C95:gcc选项:- ...

  6. Android studio中ShredPreferences 的简单使用

    ShredPreferences是一个轻量级的数据存储方式,只能存取字符串了整型数据这一类的数据,如果要存储复杂的数据这个存储方式就不再适用 首先是要新建一个ShredPreferences的对象 p ...

  7. R: 主成分分析 ~ PCA(Principal Component Analysis)

    本文摘自:http://www.cnblogs.com/longzhongren/p/4300593.html 以表感谢. 综述: 主成分分析 因子分析 典型相关分析,三种方法的共同点主要是用来对数据 ...

  8. Luogu U15118 萨塔尼亚的期末考试(fail)

    感觉...昨天是真的傻... 题意 T个询问,每个询问给一个n,求 $ \frac{\sum_{n}^{i = 1}Fib_{i} * i}{n * (n + 1) / 2} $ Fib是斐波那契数列 ...

  9. Swing窗口Linux下不支持最大化问题

    Swing窗口Linux下不支持最大化问题 摘自:https://www.linuxidc.com/Linux/2009-06/20519.htm [日期:2009-06-17] 来源:www.qua ...

  10. Spring第五篇

    在Spring第四篇中 我们主要介绍了set get的注入方式 在Spring第五篇中 我们主要介绍使用注解配置Spring 主要分为两个步骤 1 导包的同时引入新得约束 导包如下 1.1 重写注解代 ...