用户管理与高级SQL语句

一、详细用户管理

//MySQL基本指令
[root@localhost ~] -uroot -ppwd123        //登录MySQL,-u(指定账号)-p(密码)
[root@localhost ~] -uroot -ppwd123 mysql        //直接登录到mysql数据库里面
[root@localhost ~] -uroot -ppwd123 mysql -h localhost        //本地登录,-h 指定登录用户
[root@localhost ~] -uroot -ppwd123 mysql -e 'select * from user\G'        //-e:输入mysql'指令;'
[root@localhost ~] -ulisi -p123456 -h 192.168.10.101 -P 3306        //-h指定目标主机ip,-P远程目标主机的端口(Post)

mysql> use mysql;         //进入mysql数据库,与MySQL有关信息都在里面
mysql> show tables;    //展示所有表
mysql> select * from user\G         //查询所有user表,\G:格式化输出

Host:localhost        //表示允许该账户在哪登录,本地登录
User:mysql.sys        //账户
//下面是用户权限

mysql> flush privleges;        //更新权限指令,使用update等指令更新时需要更新权限

1:用户修改

mysql> create user 'zhangsan'@'localhost' identified by 'pwd123';  //添加用户并指定登录主机,可以允许一个网段主机登录:192.168.10.%,指定密码

//查看用户权限去mysql数据库的user表
mysql> grant all on *.* to 'zhangsan'@'localhost' identified by 'pwd123';         //授予指定账户从本地登录的所有权限的所有库的所有表
mysql> grant all on *.* to 'zhangsan'@'192.168.10.%' identified by 'pwd123';     //添加指定账户允许从192.168.10.%网段登录新表
//grant语句在没有账号时可以创建此账户
//mysql> flush privleges;    //更新

mysql> drop user 'zhangsan'@'localhost';        //删除指定用户的本地登录
mysql> delete from mysql.user where user='zhangsan';    //删除指定用户所有的信息
mysql> delete from mysql.user where user='zhangsan' and host='localhost';    //删除指定用户的指定的允许登录主机

2:密码修改

//借助命令行修改
[root@localhost ~]# mysqladmin -uroot -ppwd123 password'123456'        //-u指定用户;-p验证用户身份,输入后Warning提示操作不合适

//在mysql里面修改密码,进入mysql数据库
mysql> select * from user\G;     
//找到想改的用户的密码
authentication_string:41位        //显示密码一行,老版本MySQL是password
mysql> update mysql.user set authentication_string=password('pwd123') where user='root' and host='localhost';    //修改指定用户登录主机密码
mysql> set password=password('123456');        //仅限于修改当前登录用户密码
mysql> set password for 'zhangsan01'@'localhost'=password('pwd123');     //修改其他用户和登录主机的密码
mysql> set password for 'zhangsan01'@'localhost'='123456';        //不指定修改user里面的账户函数密码也加密,其他表不使用加密函数不加密
//mysql> flush privleges;        //更新

//忘记密码修改方式
[root@localhost ~]# vim /etc/my.cnf
...
skip-grant-tables        //添加跳过数据库验证方式,不能用set更改密码了
[root@localhost ~]# systemctl restart mysqld         //需要重启mysql服务
[root@localhost ~]# mysql -uroot
mysql> update mysql.user set authentication_string='pwd123' where user='root'; 
//mysql> flush privleges;        //更新
[root@localhost ~]# vim /etc/my.cnf        //修改后再次进入配置文件
...
#skip-grant-tables        //添加注释或删除    
[root@localhost ~]# systemctl restart mysqld         //需要重启mysql服务

//另一种忘记密码修改方式
[root@localhost ~]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &        //mysqld_safe早期unux启动mysql,mysql守护进程,在后台运行
[root@localhost ~]# mysql -uroot
mysql> update mysql.user set authentication_string='pwd123' where user='root';
//mysql> flush privleges;        //更新;退出
[root@localhost ~]# systemctl restart mysqld         //需要重启mysql服务

3:授权

mysql> grant select,update,insert on *.* to 'lisi'@'localhost' identified by 'pwd123';        //给指定账号指定的权限
mysql> show grants for 'lisi'@'localhost';        //查看指定用户的权限
mysql> rovke update on *.* from 'lisi'@'localhost';        //删除指定用户的指定权限
mysql> grant all on *.* to 'lisi'@'192.168.10.102' identified by 'pwd123';        
//可以使用192.168.10.%指定网段或全部改为%除了localhost以外所有网段

二、高级SQL语句

创建两个测试数据库和表

create database auth;
use auth
create table t1(id int(10), name char(20),level int(10));
insert into t1 value(10,'sagou',42);
insert into t1 value(8,'senoku',45);
insert into t1 value(15,'useless',47);
insert into t1 value(27,'guess',52);
insert into t1 value(199,'useless',48);
insert into t1 value(272,'Theshy',36);
insert into t1 value(298,'leslieF',40);
insert into t1 value(30,'shirley',58);
insert into t1 value(190,'zhangsan',48);
insert into t1 value(271,'lisi',52);
insert into t1 value(299,'wangwu',52);
insert into t1 value(31,'zhaoliu',58);

create table t2(id int(10), name char(20),level int(10));
insert into t2 value(10,'sagou',42);
insert into t2 value(8,'senoku',45);
insert into t2 value(15,'useless',47);
insert into t2 value(27,'guess',52);
insert into t2 value(199,'useless',48);
insert into t2 value(272,'Theshy',36);
insert into t2 value(298,'leslieF',40);
insert into t2 value(30,'shirley',58);
insert into t2 value(190,'zhangsan',48);
insert into t2 value(271,'lisi',52);
insert into t2 value(299,'wangwu',52);
insert into t2 value(31,'zhaoliu',58);
1:select语句
select * from order by asc    //按升序排序
select * from order by desc    //按降序排序

GROUP BY

分组;是以 BY 后面的内容对查询出的数据进行分组,也可以用聚合函数

其他子句

LIMIT

需要返回第一行或者前几行

LIMIT 2,3 也可以显示第 3 条记录开始显示之后的 3 条数据

AS或空格(表格或数据库)

设置别名

通配符

%

百分号表示零个、一个或多个字符

_

下划线表示单个字符

子查询

子查询不仅可以在 SELECT 语句中使用,在 INERT、UPDATE、DELETE中也同样适用。在嵌套的时候,子查询内部还可以再次嵌套新的子查询,也就是说可以多层嵌套

 

2:null值
  • SQL 语句使用过程中,经常会碰到 NULL 这几个字符。通常使用 NULL 来表示缺失的值,也就是在表中该字段是没有值的
  • 创建表时,限制某些字段不为空,则可以使用 NOT NULL 关键字,不使用则默认可以为空
    • NULL值和空值有什么区别:
    • 空值的长度为 0,不占用空间的;而 NULL 值的长度是 NULL,是占用空间的
    • IS NULL 或者 IS NOT NULL,是用来判断字段是不是为 NULL 或者不是 NULL,不能查出是不是空值的
    • 空值的判断使用=’’或者<>’’来处理
    • 在通过 count()计算有多少记录数时,如果遇到 NULL 值会自动忽略掉,遇到空值会加入到记录中进行计算
3:正则表达式

^str

以什么开始

str$

以什么结尾

.

匹配任何单个字符包括回车换行

[a-z]

匹配在方阔内的任意字符列表

^[a-z]

匹配以什么字符开头的

[^a-z]

匹配不包含方阔内的任意字符列表

p1|p2|p3

匹配任何模式p1,p2,p3

*

0个或多个前面的元素

+

1个或多个前面的元素

0个或1个前面的元素

{n}

前面元素连续出现的n个实例

.{n}

前面元素出现的n个实例

{m,n}

匹配前面元素m到n个实例

4:运算符

(算术运算符)

(比较运算符)

(逻辑运算符)

逻辑非:NOT 或 !

逻辑与:AND 或 &&

逻辑或 :R 或 ||

逻辑异或:XOR

(位运算符)

运算符

说明

使用形式

举例

|

a | b

5 | 8

&

a & b

5 & 8

^

异或

a ^ b

5 ^ 8

~

取反

~a

~5

左移

a

5

>> 

右移

a >> b

5 >> 2,表示整数 5 按位右移 2 位

连接查询测试

//创建测试表
CREATE TABLE `a_t1` ( 
`a_id` int(11) DEFAULT NULL, 
`a_name` varchar(32) DEFAULT NULL, 
`a_level` int(11) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `b_t1` ( 
`b_id` int(11) DEFAULT NULL, 
`b_name` varchar(32) DEFAULT NULL, 
`b_level` int(11) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
insert into a_t1(a_id, a_name, a_level) values(1, 'aaaa', 10); 
insert into a_t1(a_id, a_name, a_level) values(2, 'bbbb', 20); 
insert into a_t1(a_id, a_name, a_level) values(3, 'cccc', 30); 
insert into a_t1(a_id, a_name, a_level) values(4, 'dddd', 40); 
insert into b_t1(b_id, b_name, b_level) values(2, 'bbbb', 20); 
insert into b_t1(b_id, b_name, b_level) values(3, 'cccc', 30); 
insert into b_t1(b_id, b_name, b_level) values(5, 'eeee', 50); 
insert into b_t1(b_id, b_name, b_level) values(6, 'ffff', 60);

inner join on

内连接

left join on

左连接

right

右连接

1:数据库函数

聚合函数

COUNT

计数

SUM

求和

AVG

平均数

MAX

最大值

MIN

最小值

数学函数

abs(x) :返回 x 的绝对值

rand() :返回 0 到 1 的随机数

mod(x,y) :返回 x 除以 y 以后的余数

power(x,y) :返回 x 的 y 次方

round(x) :返回离 x 最近的整数

round(x,y) :保留 x 的 y 位小数四舍五入后的值

truncate(x,y) :返回数字 x 截断为 y 位小数的值

ceil(x) :返回大于或等于 x 的最小整数

floor(x) :返回小于或等于 x 的最大整数

least(x1,x2...) :返回集合中最小的值

sqrt(x) :返回 x 的平方根

greatest(x1,x2...) :返回集合中最大的值

字符串函数

length(x)   返回字符串 x 的长度第

trim()   移除字符串两侧的空白字符或其他预定义字符

concat(x,y)   将提供的参数 x 和 y 拼接成一个字符串

upper(x)   将字符串 x 的所有字母变成大写字母

lower(x)   将字符串 x 的所有字母变成小写字母

left(x,y)   返回字符串 x 的前 y 个字符

right(x,y)   返回字符串 x 的后 y 个字符

repeat(x,y)   将字符串 x 重复 y 次

space(x)   返回 x 个空格

replace(x,y,z)   将字符串 z 替代字符串 x 中的字符串 y

strcmp(x,y)   比较 x 和 y,返回的值可以为-1,0,1

substring(x,y,z)   获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串

reverse(x)   将字符串 x 反转

日期时间函数

curdate()  返回当前时间的年月日

curtime()  返回当前时间的时分秒

now()   返回当前时间的日期和时间

month(x)  返回日期 x 中的月份值

week(x)   返回日期 x 是年度第几个星期

hour(x)   返回 x 中的小时值

minute(x)   返回 x 中的分钟值

second(x)   返回 x 中的秒钟值

dayofweek(x)   返回 x 是星期几,1 星期日,2 星期一

dayofmonth(x)   计算日期 x 是本月的第几天

dayofyear(x)   计算日期 x 是本年的第几天

三、存储过程

  • 需要原因
    • 从客户端(Clent)通过网络向服务器(Server)发送SQL代码并执行不妥当,数据不安全
    • 影响应用程序的运行性能
//使用 CREATE PROCEDURE 语句创建存储过程,其语法格式
CREATE PROCEDURE<过程名>( [过程参数[,...]])<过程体>
[过程参数[....]]格式
[IN |OUT |INOUT ]<参数名><类型>
//MySQL 的参数分为:输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT三个关键字表示
//,输入参数可以传递给一个存储过程;输出参数用于存储过程需要返回一个操作结果的情形;而输入/输出参数既可以充当输入参数也可以充当输出参数

mysql> DELIMITER $$         //DELIMITER:用于定义SQL语句的结束符,默认的结束符是分号
mysql> CREATE PROCEDURE t1Role()     //创建t1Role存储过程
BEGIN         //开始
SELECT id,name,level from t1 limit 3;     //MySQL语句
END $$    //结束加上自定义的结束符号
mysql> DELIMITER ;         //改回默认结束符;(DELIMITER ;) 分号前有空格
mysql> call t1Role();    //执行存储过程

修改删除存储过程

//特征的修改可以使用 ALTER PROCEDURE 来实现;其语法结构
ALTER PROCEDURE<过程名>[<特征>... ]
//使用 DROP PROCEDURE 语句即可删除存储过程,其语法格式
DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] <过程名>
//从以上语法结构可以看出,在删除时存储过程的名字是放到最后的,前面可以添加 IFEXISTS 这个关键字,其主要作用是防止因删除不存在的存储过程而引发的错误

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值