Mysql的SQL语句实例

一.权限表

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';

相关推荐
爱吃青椒不爱吃西红柿‍️1 分钟前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz987637 分钟前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
武子康40 分钟前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康42 分钟前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王1 小时前
《MySQL 数据库备份与恢复》
mysql
苏-言1 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
Ljw...1 小时前
索引(MySQL)
数据库·mysql·索引
菠萝咕噜肉i1 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
长风清留扬1 小时前
一篇文章了解何为 “大数据治理“ 理论与实践
大数据·数据库·面试·数据治理
OpsEye1 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级