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

相关推荐
SongYuLong的博客9 分钟前
python遍历目录下所有文件
前端·数据库·python
重庆大傑15 分钟前
Redis 缓存问题及解决
数据库·redis·缓存
ljh57464911922 分钟前
thinkphp8 执行 db:: 需要引入什么
数据库
测试开发-学习笔记33 分钟前
sql查询练习
数据库·sql
你喝不喝热水啊44 分钟前
深入浅出mysql分库分表
数据库·mysql
霖烟易辞1 小时前
MySQL的安装
数据库·mysql
chenyang_881 小时前
MySQL——备份
数据库·mysql
尾巴尖上的阳光1 小时前
分布式数据库HBase:从零开始了解列式存储
数据库·分布式·hbase
一碗谦谦粉1 小时前
MySQL之主从同步、分库分表
数据库·mysql
念晚9172 小时前
Linux——/etc/passwd文件含义,grep,cut
linux·运维·服务器·前端·网络·数据库