一.权限表
1.user表
User表是MySQL中最重要的一个权限表,记录允许连接到服务器的帐号信息,里面的权限是全局级的。
2.db表和host表
db表和host表是MySQL数据中非常重要的权限表。db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上数据库级操作权限做更细致地控制。
二.账户管理
1.登录和退出mysql服务器
(1)使用root用户登录到本地mysql服务器的test库中
mysql -u root -p -h localhost test
2.新建普通用户
(1)使用create user 或 grant语句 ,用户名是zhangsan,密码是pwd123,主机名是localhost
create user 'zhangsan'@'localhost' indentified by 'pwd123' ;
使用grant语句创建一个新用户lisi,密码为123456,用户zhangsan对所有的数据有查询和更新的权限,并授予所有数据表的select和updatae权限
grant select , update on *.* to 'lisi'@'localhost' indentified by '123456' ;
select host , user , select_priv , update_priv , from mysql.user where user='lisi';
(2)直接操作mysql授权表
使用insert创建一个新账户,用户名称为zhangsan01,主机名称为localhost,密码为123456
insert into user(host,user,password) values('localhost','zhangsan01',password('123456'))
3.删除普通用户
(1)使用drop user语句删除用户
drop user 'zhangsan'@'localhost';
(2)使用delete语句删除用户
delete from mysql.user where host='localhost' and user='zhangsan01'
4.root用户修改自己的密码
(1)使用mysqladmin命令在命令行指定新密码
mysqladmin -uroot root -p password '123456'
(2)修改mysql数据库的user表,使用update
update mysql.user set password=password('123456')
where user='root' and host='localhost';
(3)使用set语句修改root的密码
set password=password('123456')
5.root用户修改普通用户的密码
(1)使用update
update mysql.user set password=password('123456').
where user='zhangsan' and host='localhost'
(2)使用set语句修改普通用户密码
set password for 'zhangsan'@'localhost'=password('123456')
(3)使用grant修改普通用户密码
grant user on *.* to 'zhangsan01'@'localhost' indentified by '123456';
6.普通用户修改密码
通过set语句来设置自己的密码
set password = password('123456')
7.root用户密码丢失的解决方法
(1)使用--skip-grant-tables选项启动MySQL服务
mysql start-mysqld --skip-grant-tables
(2)使用root用户登录和重新设置密码
mysql -uroot
update mysql.user set password=password('123456') where user='root' and host='localhost';
(3)加载权限表
flush privileges;
三.权限管理
1:MySQL的各种权限
账户权限信息被存储在mysql数据库的user、db、host、tables_priv、columns_priv和procs_priv表中。在MySQL启动时,服务器将这些数据库表内容读入内存。
2:授权
使用GRANT语句创建一个新的用户zhangsan,密码为"pwd123"。用户zhangsan对所有的数据有查询、插入权限,并授于GRANT权限。GRANT语句及其执行结果如下
grant select , insert on *.* to 'zhangsan'@'localhost' indentified by '123456'
授权成功之后使用SELECT语句查询用户zhangsan01的权限:
select host,user,select_priv,insert_priv,grant_priv from mysql.user where user='zhangsan';
3.收回授权
使用REVOKE语句取消用户testUser的更新权限。REVOKE语句及其执行结果如下:
revoke update on *.* from 'zhangsan'@'localhost';
执行成功后,使用select语句查询用户的权限
select host,user,Select_priv,Update_priv,Grant_priv from mysql.user where user='zhangsan'
4.查看权限
show grants for 'zhangsan'@'localhodt';
四.mysql的进阶查询
1.创建测试数据库和表
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);
2.常用查询介绍
(1)按关键字排序
执行以下操作可查询等级大于等于 45 级的用户,并按降序进行排序
mysql> select id,name,level from t1 where level>=45 order by level desc;
执行以下操作可查询等级在 45 级及以上的用户,并以 level降序排列和 id 降序排列
mysql> select id,name,level from t1 where level>=45 order by level desc, id desc;
Ø ORDER BY A,B desc 指 A 用升序,B 用降序;
Ø ORDER BY A asc,B desc 指 A 用升序,B 用降序;
Ø ORDER BY A desc,B desc 指 A 用降序,B 用降序;
(2)对结果进行分组
GROUP BY 除了配合聚合函数一起使用外,还可以引入 WHERE 子句。首先通过WHERE 过滤掉一部分不符合需求的查询结果,然后再对结果进行分组。如果有排序的需求,也可以引入 ORDER BY 语句。
执行以下操作即可统计等级在 45 级及以上,以等级为分组,每个等级有多少人
mysql> select count(name),level from t1 where level>=45 group by level;
【例2】而GROUP BY 结合 ORDER BY 即可实现分组并排序的查询。
查询等级在 45 级及以上,按等级进行分组,并将每个等级的人数按降序排序,具体操作如下所示
mysql> select count(name),level from t1 where level>=45 group by level order by count(name) desc;
(3)限制结果条目
在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录。有时候仅需要返回第一行或者前几行,这时候就需要用到 LIMIT 子句
执行以下操作即可查询表的前 3 个用户的信息
mysql> select id,name,level from t1 limit 3;
将查询记录按等级 level 降序排列,只取前三条记录
mysql> select id,name,level from t1 order by level desc limit 3;
执行以下操作即可从第 3 条记录开始显示之后的 3 条数据
mysql> select id,name,level from t1 limit 2,3;
(4)设置别门
在统计表内所有记录共有多少条时,使用 count(*),这么写不便于识别,可以将其别名设置为 number
mysql> select count(*) as number from t1;
mysql>select count(*) number from t1;
、
执行以下操作即可实现用一条 SQL语句完成在创建表 t3 的时候将 t1 表内的数据写入 t3表。
mysql> create table t3 as select * from t1;
mysql>select count(*) from t3;
(5)通配符
通常通配符都是跟 LIKE 一起使用的,并协同 WHERE 子句共同来完成查询任务
Ø %:百分号表示零个、一个或多个字符
Ø _:下划线表示单个字符
查询 t1 表内 name 字段分别以 s 开头的名字、以 s 结尾的名字和名字中间包含 es 的字段,具体操作如下所示
name 字段以 s 开头的记录
mysql> select id,name,level from t1 where name like 's%';
name 字段以 s 结尾的记录
mysql> select id,name,level from t1 where name like '%s';
name 字段中间含 es 的记录
mysql> select id,name,level from t1 where name like '%es%';
替换开头的一个字符
mysql> select id,name,level from t1 where name like '_uess';
替换结尾的四个字符(注意:后面是四个下划线)
mysql> select id,name,level from t1 where name like 'use____';
替换中间的一个字符
mysql> select id,name,level from t1 where name like 'shi_ley';