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

相关推荐
悦数图数据库几秒前
BOSS 直聘基于悦数图数据库构建智能根因定位平台的实践
数据库·人工智能
亮子AI6 分钟前
【Node.js】为什么数据库连接总是中断?
数据库·node.js
DBA小马哥6 分钟前
时序数据库在物联网中的应用
数据库·物联网·时序数据库
maray7 分钟前
体验 Neon 产品
数据库·学习
亮子AI7 分钟前
【MySQL】node.js 如何批量更新数据?
数据库·mysql·node.js
xj75730653311 分钟前
精通django 第二章 视图和URL
数据库·django·sqlite
摇滚侠14 分钟前
两句话理解 ElasticSearch 搜索引擎数据库的作用
数据库·mysql·搜索引擎
BinaryBoss14 分钟前
Python mongodb批量修改数据库某个字段
数据库·python·mongodb
Yu_iChan20 分钟前
苍穹外卖Day09 地址簿模块
java·数据库·mybatis
戴西软件22 分钟前
戴西发布 DLM许可证加密防护软件V4.2让工业软件授权迈入并发调度与精细治理时代
运维·服务器·网络·数据库·人工智能·安全·云计算