MySQL数据库
数据库与MySQL概述与基本概念
数据(Data)
- 描述事物的符号记录
- 包括数字、文字、图形、图像、声音、档案记录等
- 以“记录”形式按统一的格式进行存储
- 使用一些介质进行存储;例如文字存在文档中
- 数据库作用:可以完成数据持久化保存与快速提取、快速定位、寻找数据
- 通过SQL语句编写一系列的规则可以实现以上数据的功能。
- SQL语句按功能分为:增删改查
表
- 将不同的记录组织在一起
- 用来存储具体数据
- 记录:行
- 字段(属性):列
- 行+列组成了表(数据存储在表中)
数据库
- 表的集合,是存储数据的仓库
- 以一定的组织方式存储的相互有关的数据集合
- “关系型数据库”是表与表之间的字段(属性)的关联
- 用户可以通过DBMS或应用程序操作数据库
数据库类型
- 关系型数据库
- 存储的往往是字符、字符串、数值、布尔值等
- Mysql(甲骨文公司收购)→免费、开源、体积小
- SQL server(微软公司产品)→面向Windows操作系统、简单、易用
- Oracle(甲骨文公司产品)→面向所有主流平台、安全、完善、操作复杂
- DB2(IBM公司)→面向所有主流平台、大型、安全、完善
- access(微软公司的office产品)
- sybase(sybase)等等
- mysql开源数据库
- 非关系型数据库(NoSQL)
- 存储的往往是图片、视频、语音等
- MongoDB、Redis(内存数据库/缓存数据库)K-V键值对、以及与之类似的Memcache
- Redis和Memcache对比
- 相同点:存储高热数据(在内存中高速运行)
- 不同点:Redis可以做持久化保存,可以存储对象
关系型数据库介绍
- 适用于对关系很明确的数据建立模型、定义、存储数据
- 关系型数据库系统时基于关系模型的数据库系统
- 关系 模型可用简单的“实体-关系”(E-R)图来表示
- E-R图中包括了实体(数据对象)、关系和属性三个要素
- 实体
- 也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。
例如:银行客户、银行账号等
- 也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”。
- 属性
- 实体所具有的某一特性,一个实体可以有多个属性。
例如“银行客户”实体集中的每个实体均具有姓名、住址、电话等属性
- 实体所具有的某一特性,一个实体可以有多个属性。
- 联系
- 实体集之间的对应关系称为联系,也称为关系
例如:银行客户和银行账号之间存在“储蓄”的关系
- 实体集之间的对应关系称为联系,也称为关系
- 所有实体及实体之间联系的集合构成一个关系数据库
- 关系数据库的存储结构是简单易懂的二维数据表格
- 每一行称为一条记录,用来描述一个对象的信息
- 每一列称为一个字段,用来描述对象的一个属性
非关系型数据库介绍
- 存储海量数据,给予“大数据”进行分析,从而筛选出有价值的部分
- 非关系数据库也称为NoSQL(Not Only SQL)
- 存储数据不以关系模型为依据,也不需要固定的表格式
- 优点
- 数据库可高并发读写
- 对海量数据高效率存储与访问
- 数据库具有高扩展性与高可用性
- 常用的非关系数据库
- Redis
- mongoDB
- 等等
- Redis持久化方式
- 以键值存储数据,数据保存在内存中,但会定期将数据写入磁盘
- 例如:高德导航(实时分析平台)采用的是非关系型数据库存储,如果需要持久化,就可以使用Redis
MySQL数据库介绍
- 一款深受欢迎的开源关系型数据库
- Oracle旗下的产品
- 遵守GPL协议,可以免费使用与修改
- 特点
- 性能卓越、服务稳定
- 开源、无版权限制、成本低
- 多线程、多用户
- 基于C/S(客户端/服务器)架构
- 安全可靠
- MySQL存储引擎
- myisam和innodb
- myisam:快速读取,不支持事物
- innodb:更注重写,支持事物
主键、唯一键、外键
- mysql有主键和唯一键
- primary key(主键名):主键一般选择能代表唯一性的字段且不允许为空值(null),一个表只能有一个主键(主键是唯一的,但可以有多个字段构成)
- unique key(唯一键):唯一,但可以为空(但是空值只能出现一次)
- 主键包含唯一键的部分属性,而唯一键不能完全作为主键
- 外键:如果同一个属性字段x在表一中是主键,但在表二中不是主键。则字段x是表二的外键
数据库日志
- 数据库日志文件用于备份与恢复,是最核心的部分
- mysql与oracle日志区别
- mysql:每当写一条数据时,就立马同步到日志中一条
- oracle:重做日志组。一个组中至少有3个日志成员,轮流存储日志,还会有另外一个组与之同步(备份)
MySQL数据库管理
查看
【大部分SQL操作命令必须以;结束】
mysql> show databases; 【查看当前数据库里有哪些库】
mysql> use mysql; 【进入mysql数据库】
mysql> show tables; 【查看当前数据库中的表信息】
mysql> describe mysql.user; 【显示数据表的结构(字段)】
mysql> describe user;
mysql> desc user; 【也可以使用desc user;】
常用的数据类型
类型 | 说明 |
---|---|
int | 整型 用于定义整数类型的数据 |
float | 单精度浮点4字节32位 准确表示到小数点后六位 |
double | 双精度浮点8字节64位 |
char | 固定长度的字符类型 用于定义字符类型数据 如果存入数据的实际长度比指定长度要小,则会补空格至指定长度 如果存入数据的实际长度大于指定长度,低版本会被截取,高版本会报错 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal(5,3) | 5个有效长度数字,小数点后面有3位 |
remark | 备注的数据类型 一般文本使用 |
- CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
- VARCHAR存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
- 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点
SQL语句
- SQL(Structured Query Language)即结构化查询语言
- 关系型数据库的标准语言
- 用于维护管理数据库
- 包括数据查询、数据更新、访问控制、对象管理等功能
SQL语言分类
DDL(create、drop、alter)
create(创建新的数据库)
mysql> create database qz1; 【创建数据库qz1】
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbs |
| mysql |
| performance_schema |
| qz1 |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> use qz1 【进入qz1数据库】
mysql> create table zq (id int not null,name char(8) not null,score decimal(6,3),passwd char(80));
Query OK, 0 rows affected (0.07 sec)
【创建表,名为zq(id为整型且不能为空值,name为固定8个长度的字符,score为6个有效长度的数字,且小数点后面有3位),passwd固定80个长度字符】
mysql> desc zq; 【显示zq数据表的结构(字段)】
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| name | char(8) | NO | | NULL | |
| score | decimal(6,3) | YES | | NULL | |
| passwd | char(80) | YES | | NULL | |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.05 sec)
【default的默认值为空】
【primary key(主键名):主键一般选择能代表唯一性的字段且不允许为空值(null),一个表只能由一个主键】
【主键是唯一的,但可以有多个字段构成】
【Extre:步长】
mysql> create table zqusers (user_name char(8) not null,user_passwd char(80),primary key (user_name));
Query OK, 0 rows affected (0.06 sec)
mysql> desc zqusers; 【显示zqusers数据表的结构(字段)】
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name | char(8) | NO | PRI | NULL | |
| user_passwd | char(80) | YES | | NULL | |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> create table 皇家娱乐 (姓名 int not null,性别 char(8),身高 char(4),工号 char(6),primary key (工号));
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| 皇家娱乐 |
| zq |
| zqusers |
+---------------+
4 rows in set (0.00 sec)
mysql> create table 天上人间 (姓名 char(6) not null,性别 char(8),身高 char(4),工号 char(6),primary key (工号));
Query OK, 0 rows affected (0.06 sec)
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| 天上人间 |
| 皇家娱乐 |
| zq |
| zqusers |
+---------------+
5 rows in set (0.00 sec)
drop(删除指定的数据表/字段/主键)
- 格式:drop table [数据库名.] 表名;
- 如不用use进入库中则需要加上数据库名.
- drop 也可删除主键
【删除表名为zq的表】
mysql> use qz1 【进入qz1库】
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| zq |
| zqusers |
+---------------+
2 rows in set (0.00 sec)
mysql> drop table zq;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| zqusers |
+---------------+
1 row in set (0.00 sec)
【删除指定的数据库】
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbs |
| mysql |
| performance_schema |
| qz1 |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> drop database qz1;
Query OK, 1 row affected (0.06 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbs |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
【删除主键】
mysql> desc 皇家娱乐;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| 姓名 | int(11) | NO | | NULL | |
| 性别 | char(8) | YES | | NULL | |
| 身高 | char(4) | YES | | NULL | |
| 工号 | char(6) | NO | PRI | NULL | |
+--------+---------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table 皇家娱乐 drop primary key;
Query OK, 1 row affected (0.07 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> desc 皇家娱乐;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| 姓名 | int(11) | NO | | NULL | |
| 性别 | char(8) | YES | | NULL | |
| 身高 | char(4) | YES | | NULL | |
| 工号 | char(6) | NO | | NULL | |
+--------+---------+------+-----+---------+-------+
4 rows in set (0.00 sec)
【删除指定表的指定字段】
mysql> alter table 天上人间 drop 身高;
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc 天上人间;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名 | char(6) | NO | | NULL | |
| 性别 | char(8) | YES | | NULL | |
| 编号 | varchar(6) | NO | PRI | NULL | |
| 家庭地址 | varchar(60) | NO | | 未知 | |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
alter(修改表名和表结构)
- 格式:alter table 旧表名 rename 新表名;
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| 天上人间 |
| 皇家娱乐 |
| q |
| zq |
| zqusers |
+---------------+
5 rows in set (0.00 sec)
mysql> alter table q rename 皇家一号;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| 天上人间 |
| 皇家一号 |
| 皇家娱乐 |
| zq |
| zqusers |
+---------------+
- 拓展表结构(增加字段)
mysql> alter table 天上人间 add 家庭地址 varchar(60) not null default '未知';
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc 天上人间;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名 | char(6) | NO | | NULL | |
| 性别 | char(8) | YES | | NULL | |
| 身高 | char(4) | YES | | NULL | |
| 工号 | char(6) | NO | PRI | NULL | |
| 家庭地址 | varchar(60) | NO | | 未知 | |
+--------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
- 修改字段(列)名,添加唯一键(unique key)
- change可修改字段名、数据类型、约束等所有项。
mysql> alter table 天上人间 change 工号 编号 varchar(6) unique key;
Query OK, 4 rows affected (0.09 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc 天上人间;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| 姓名 | char(6) | NO | | NULL | |
| 性别 | char(8) | YES | | NULL | |
| 身高 | char(4) | YES | | NULL | |
| 编号 | varchar(6) | NO | PRI | NULL | |
| 家庭地址 | varchar(60) | NO | | 未知 | |
+--------------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
DML管理表中的数据记录(insert、update、delete)
insert(插入新数据)
- 格式:insert into 表名(字段1,字段2,[,…]) values (字段1的值,字段2的值,…);
【先创建数据库qz1,再在qz1数据库里创建zqusers表格】
mysql> create database qz1;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbs |
| mysql |
| performance_schema |
| qz1 |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> use qz1
Database changed
mysql> create table zqusers (user_name char(8) not null,user_passwd char(80),primary key (user_name));
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| zqusers |
+---------------+
1 row in set (0.00 sec)
mysql> desc zqusers;
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name | char(8) | NO | PRI | NULL | |
| user_passwd | char(80) | YES | | NULL | |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
【在zqusers表格里的user_name和user_passwd字段分别插入‘思思’和‘111222’】
【加PASSWORD后密码字串将会以加密后的形式显示,不加则直接显示】
【需注意如以密文显示时需再之前创建表格时的固定长度给大,否则密文超过设置的固定长度则插入失败】
mysql> insert into zqusers (user_name,user_passwd) values('思思',PASSWORD('111222'));
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from zqusers;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| 思思 | *890406EBC2A6D76621F6015C608E2B270BC92D22 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into zqusers (user_name,user_passwd) values('悦悦','111222');
Query OK, 1 row affected (0.05 sec)
mysql> select * from zqusers;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| 思思 | *890406EBC2A6D76621F6015C608E2B270BC92D22 |
| 悦悦 | 111222 |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> insert into zqusers values('橙橙','2233') ;
Query OK, 1 row affected (0.00 sec)
mysql> select * from zqusers;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| 思思 | *890406EBC2A6D76621F6015C608E2B270BC92D22 |
| 悦悦 | 111222 |
| 橙橙 | 2233 |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql> insert into 天上人间 (姓名,性别,身高,工号) values ('悦悦','女',165,013);
Query OK, 1 row affected (0.05 sec)
mysql> insert into 天上人间 (姓名,性别,身高,工号) values ('橙橙','女',160,014);
Query OK, 1 row affected (0.00 sec)
mysql> select * from 天上人间;
+--------+--------+--------+--------+
| 姓名 | 性别 | 身高 | 工号 |
+--------+--------+--------+--------+
| 丹丹 | 女 | 171 | 12 |
| 悦悦 | 女 | 165 | 13 |
| 橙橙 | 女 | 160 | 14 |
+--------+--------+--------+--------+
3 rows in set (0.00 sec)
update(修改、更新数据表中的原有数据记录)
- 格式:update 表名 set 字段名1=字段值1 [,字段名2=字段值2] [where 条件表达式];
【where只能对设为primary key主键的字段使用。所以这里只能对user_name字段使用】
【修改、更新user_passwd=5514给字段名user_name=悦悦的字段】
mysql> update zqusers set user_passwd=('5514') where user_name='悦悦';
Query OK, 0 rows affected (0.05 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select * from zqusers;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| 思思 | *890406EBC2A6D76621F6015C608E2B270BC92D22 |
| 悦悦 | 5514 |
| 橙橙 | 2233 |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
delete(在数据表中删除指定的数据记录)
- 格式:delete from 表名 [where 条件表达式];
mysql> select * from zqusers;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| 丹丹 | 2233 |
| 乐乐 | 2233 |
| 思思 | *890406EBC2A6D76621F6015C608E2B270BC92D22 |
| 悦悦 | 5514 |
| 橙橙 | 2233 |
+-----------+-------------------------------------------+
5 rows in set (0.00 sec)
【将zausers表里的满足user_name=橙橙条件的行删除】
mysql> delete from zqusers where user_name='橙橙';
Query OK, 1 row affected (0.06 sec)
mysql> select * from zqusers;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| 丹丹 | 2233 |
| 乐乐 | 2233 |
| 思思 | *890406EBC2A6D76621F6015C608E2B270BC92D22 |
| 悦悦 | 5514 |
+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
DQL(slect)
slect(查询数据记录)
- 格式:select 字段名1,字段名2[,…] from 表名 [where 条件表达式];
【查询天上人间表格里的数据记录】
mysql> select * from 天上人间;
+--------+--------+--------+--------+
| 姓名 | 性别 | 身高 | 工号 |
+--------+--------+--------+--------+
| 丹丹 | 女 | 171 | 12 |
| 悦悦 | 女 | 165 | 13 |
| 橙橙 | 女 | 160 | 14 |
+--------+--------+--------+--------+
3 rows in set (0.00 sec)
【查询天上人间表格里的前3行】
mysql> select * from 天上人间 info limit 3;
+--------+--------+--------+--------+
| 姓名 | 性别 | 身高 | 工号 |
+--------+--------+--------+--------+
| 丹丹 | 女 | 171 | 12 |
| 悦悦 | 女 | 165 | 13 |
| 橙橙 | 女 | 160 | 14 |
+--------+--------+--------+--------+
3 rows in set (0.00 sec)
【查询天上人间表格里姓名一列,并以列表方式竖向显示。这里不用加";"】
mysql> select 姓名 from 天上人间\G
*************************** 1. row ***************************
姓名: 丹丹
*************************** 2. row ***************************
姓名: 悦悦
*************************** 3. row ***************************
姓名: 橙橙
*************************** 4. row ***************************
姓名: 思思
4 rows in set (0.00 sec)
【在天上人间表格里查询满足条件(身高=165)的姓名和工号列】
mysql> select 姓名,工号 from 天上人间 where 身高='165';
+--------+--------+
| 姓名 | 工号 |
+--------+--------+
| 悦悦 | 13 |
| 思思 | 15 |
+--------+--------+
2 rows in set (0.00 sec)
【查询天上人间表格里的第二行数据后面的2行数据】
mysql> select * from 天上人间 info limit 2,2;
+--------+--------+--------+--------+
| 姓名 | 性别 | 身高 | 工号 |
+--------+--------+--------+--------+
| 橙橙 | 女 | 160 | 14 |
| 思思 | 女 | 165 | 15 |
+--------+--------+--------+--------+
2 rows in set (0.00 sec)
MySQL数据库管理高级操作
指定主键的另一种方式(自增长)
mysql> create table if not exists 皇家二号 (工号 int(6) zerofill primary key auto_increment,绰号 varchar(8) not null,手机号 int(11) not null unique key,特长 varchar(100));
mysql> desc 皇家二号;
+-----------+--------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------------------+------+-----+---------+----------------+
| 工号 | int(6) unsigned zerofill | NO | PRI | NULL | auto_increment |
| 绰号 | varchar(8) | NO | | NULL | |
| 手机号 | int(11) | NO | UNI | NULL | |
| 特长 | varchar(100) | YES | | NULL | |
+-----------+--------------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
- if not exist:检测要创建的表是否已存在,如果不存在就继续创建
- int(6) zerofill:如果数值不满6位数,则前面用“0”进行填充,例如:000188
- auto_increment:表示此字段为自增长字段。
即每条记录自动递增1,默认从1开始递增。
自增长字段数据不可以重复,且必须是主键。
如果添加的记录数据没有指定此字段的值,就算添加失败也会字段递增一次。 - unique key:表示此字段为唯一键约束,此字段数据是不可重复
一张表中只能由一个主键,但是可以有多个唯一键
unique key可以为空(但是空值只能出现一次)
主键包含唯一键的部分属性,而唯一键不能完全作为主键 - not null:表示此字段不允许为null(空)
数据表的高级操作
复制
- 通过like方法复制的只是格式,如果想连内容一起复制则需要通过insert进行内容插入/备份
mysql> create table 皇家三号 like 天上人间;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from 天上人间;
+--------+--------+--------+--------------+
| 姓名 | 性别 | 编号 | 家庭地址 |
+--------+--------+--------+--------------+
| 丹丹 | 女 | 12 | 未知 |
| 悦悦 | 女 | 13 | 未知 |
| 橙橙 | 女 | 14 | 未知 |
| 思思 | 女 | 15 | 未知 |
+--------+--------+--------+--------------+
4 rows in set (0.00 sec)
mysql> select * from 皇家三号;
Empty set (0.00 sec)
【复制、备份内容】
mysql> insert into 皇家三号 select * from 天上人间;
Query OK, 4 rows affected (0.06 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from 皇家三号;
+--------+--------+--------+--------------+
| 姓名 | 性别 | 编号 | 家庭地址 |
+--------+--------+--------+--------------+
| 丹丹 | 女 | 12 | 未知 |
| 悦悦 | 女 | 13 | 未知 |
| 橙橙 | 女 | 14 | 未知 |
| 思思 | 女 | 15 | 未知 |
+--------+--------+--------+--------------+
4 rows in set (0.00 sec)
克隆表以及获取表结构、索引等信息
- 克隆表,将数据表的数据记录生成到新的表中
mysql> create table 皇家四号 (select * from 天上人间);
Query OK, 4 rows affected (0.09 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from 皇家四号;
+--------+--------+--------+--------------+
| 姓名 | 性别 | 编号 | 家庭地址 |
+--------+--------+--------+--------------+
| 丹丹 | 女 | 12 | 未知 |
| 悦悦 | 女 | 13 | 未知 |
| 橙橙 | 女 | 14 | 未知 |
| 思思 | 女 | 15 | 未知 |
+--------+--------+--------+--------------+
4 rows in set (0.00 sec)
mysql> select * from 天上人间;
+--------+--------+--------+--------------+
| 姓名 | 性别 | 编号 | 家庭地址 |
+--------+--------+--------+--------------+
| 丹丹 | 女 | 12 | 未知 |
| 悦悦 | 女 | 13 | 未知 |
| 橙橙 | 女 | 14 | 未知 |
| 思思 | 女 | 15 | 未知 |
+--------+--------+--------+--------------+
4 rows in set (0.00 sec)
【获取数据表的表结构、索引等信息】
mysql> show create table 皇家四号\G
*************************** 1. row ***************************
Table: 皇家四号
Create Table: CREATE TABLE "皇家四号" (
"姓名" char(6) NOT NULL,
"性别" char(8) DEFAULT NULL,
"编号" varchar(6) NOT NULL,
"家庭地址" varchar(60) NOT NULL DEFAULT '未知'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> show create table 天上人间\G
*************************** 1. row ***************************
Table: 天上人间
Create Table: CREATE TABLE "天上人间" (
"姓名" char(6) NOT NULL,
"性别" char(8) DEFAULT NULL,
"编号" varchar(6) NOT NULL,
"家庭地址" varchar(60) NOT NULL DEFAULT '未知',
UNIQUE KEY "编号" ("编号")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
清空表(truncate、delete)
- 删除速度 drop>truncate>delete
- delete安全性最好
- 方法一(delete)
- delete清空表后,返回的结果内有删除的记录条目
- delete工作时是一行行的删除记录数据
- 当表中有自增长(auto_increment)字段时使用delete from删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录
mysql> delete from 皇家四号;
Query OK, 4 rows affected (0.05 sec)
mysql> select * from 皇家四号;
Empty set (0.00 sec)
- 方法二(truncate)
- truncate清空表后,没有返回被删除的条目
- truncate工作时是将表结构按原样重新建立,因此在速度上truncate会比delete块
- 使用truncate table清空表内数据后,ID会从1开始重新记录
mysql> select * from 皇家三号;
+--------+--------+--------+--------------+
| 姓名 | 性别 | 编号 | 家庭地址 |
+--------+--------+--------+--------------+
| 丹丹 | 女 | 12 | 未知 |
| 悦悦 | 女 | 13 | 未知 |
| 橙橙 | 女 | 14 | 未知 |
| 思思 | 女 | 15 | 未知 |
+--------+--------+--------+--------------+
4 rows in set (0.00 sec)
mysql> truncate table 皇家三号;
Query OK, 0 rows affected (0.07 sec)
mysql> select * from 皇家三号;
Empty set (0.00 sec)
创建临时表(temporary)
- 临时表创建成功之后,使用show tables命令是看不到创建的临时表,临时表会在连接退出后被销毁
- 如果在退出之前,也可以执行增删改查等操作,例如使用drop table语句手动直接删除临时表
- temporary无法创建外键
- 格式:create temporary table 表名 (字段1 数据类型,字段2 数据类型[,…],[primary key (主键名)]);
mysql> create temporary table 皇家临时工 (工号 int(6) zerofill primary key auto_increment,姓名 varchar(8) not null,手机号 int(11) not null unique key,特长 varchar(200));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into 皇家临时工 values (1,'晨晨',331221382,'tea');
Query OK, 1 row affected (0.00 sec)
mysql> select *from 皇家临时工;
+--------+--------+-----------+--------+
| 工号 | 姓名 | 手机号 | 特长 |
+--------+--------+-----------+--------+
| 000001 | 晨晨 | 331221382 | tea |
+--------+--------+-----------+--------+
1 row in set (0.00 sec)
外键约束与常见的6种约束
- 常见的6种约束
- 主键约束(primary key)
- 外键约束(foreign key)
- 非空约束(not null)
- 唯一性约束(unique [key|index])
- 默认值约束(default)
- 自增约束(auto_increment)
- 创建外键约束作用(误删、修改),保证数据的完整性和一致性
- 主键表和外键表的理解:
- 1、以公共关键字作为主键的表为主键表(父表、主表)
- 2、以公共关键字作为外键的表为外键表(从表、外表)
- 注意:与外键关联的主表的字段必须设置为主键。
- 要求从表不能是临时表,主表外键字段和从键的字段具有相同的数据类型、字符长度和约束
- 自增约束只能给主键做定义
- 1.创建主表和从表
【创建主表皇家9号】
mysql> create table 皇家9号 (爱好 int(50),地址 varchar(80));
Query OK, 0 rows affected (0.07 sec)
【创建从表皇家10号】
mysql> create table 皇家10号 (工号 int(5) primary key auto_increment,姓名 varchar(10),年龄 int(3),地址 varchar(80));
Query OK, 0 rows affected (0.06 sec)
mysql> desc 皇家9号;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| 爱好 | int(50) | YES | | NULL | |
| 地址 | varchar(80) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> desc 皇家10号;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| 工号 | int(5) | NO | PRI | NULL | auto_increment |
| 姓名 | varchar(10) | YES | | NULL | |
| 年龄 | int(3) | YES | | NULL | |
| 地址 | varchar(80) | YES | | NULL | |
+--------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
- 为主从表分别添加主键约束并建立外键关联
【为主表皇家9号添加一个主键约束。主键名建议以“PK”开头,因为“主键约束(primary key)”】
mysql> alter table 皇家9号 add constraint PK_地址 primary key (地址);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc 皇家9号;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| 爱好 | int(50) | YES | | NULL | |
| 地址 | varchar(80) | NO | PRI | NULL | |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
【为从表皇家10号添加外键,并将皇家10号表的地址字段和皇家9号的地址字段建立外键关联。】
【外键建议以“FK_开头”,因为“外键约束(foreign key)”】
mysql> alter table 皇家10号 add constraint FK_地址 foreign key (地址) references 皇家9号 (地址);
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc 皇家10号;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| 工号 | int(5) | NO | PRI | NULL | auto_increment |
| 姓名 | varchar(10) | YES | | NULL | |
| 年龄 | int(3) | YES | | NULL | |
| 地址 | varchar(80) | YES | MUL | NULL | |
+--------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
【可以使用查询语句结构命令来查看外键关联】
mysql> show create table 皇家10号;
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 皇家10号 | CREATE TABLE "皇家10号" (
"工号" int(5) NOT NULL AUTO_INCREMENT,
"姓名" varchar(10) DEFAULT NULL,
"年龄" int(3) DEFAULT NULL,
"地址" varchar(80) DEFAULT NULL,
PRIMARY KEY ("工号"),
KEY "FK_地址" ("地址"),
CONSTRAINT "FK_地址" FOREIGN KEY ("地址") REFERENCES "皇家9号" ("地址")
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
- 在主从表进行内容的插入
【插入新数据记录时,要先主表再从表,且建立外键的字段待插入的内容需一致】
mysql> insert into 皇家9号 values(1,'nanjing');
Query OK, 1 row affected (0.06 sec)
mysql> insert into 皇家10号 values(11,'悦悦',21,'nanjing');
Query OK, 1 row affected (0.00 sec)
mysql> select * from 皇家9号;
+--------+---------+
| 爱好 | 地址 |
+--------+---------+
| 1 | nanjing |
+--------+---------+
1 row in set (0.00 sec)
mysql> select * from 皇家10号;
+--------+--------+--------+---------+
| 工号 | 姓名 | 年龄 | 地址 |
+--------+--------+--------+---------+
| 11 | 悦悦 | 21 | nanjing |
+--------+--------+--------+---------+
1 row in set (0.00 sec)
- 查看和删除外键束
【如果要删除外键约束字段,应先删除外键约束,再对外键名进行删除】
mysql> alter table 皇家10号 drop foreign key FK_地址;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table 皇家10号 drop key FK_地址;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table 皇家10号;
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 皇家10号 | CREATE TABLE "皇家10号" (
"工号" int(5) NOT NULL AUTO_INCREMENT,
"姓名" varchar(10) DEFAULT NULL,
"年龄" int(3) DEFAULT NULL,
"地址" varchar(80) DEFAULT NULL,
PRIMARY KEY ("工号")
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 |
+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
- 删除主从表数据记录
【删除数据记录时,要先删从表再删主表,也就是说删除主键表时必须先删除其他与之关联的表】
mysql> drop tables 皇家10号;
Query OK, 0 rows affected (0.01 sec)
mysql> drop tables 皇家9号;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| 天上人间 |
| 皇家7号 |
| 皇家8号 |
| 皇家一号 |
| 皇家三号 |
| 皇家二号 |
| 皇家五号 |
| 皇家六号 |
| 皇家四号 |
| 皇家娱乐 |
| zq |
| zqusers |
+---------------+
12 rows in set (0.00 sec)
数据库用户管理
新建与查看用户
- 新建用户格式:create user ‘用户名’ @ ‘来源地址’ [identified by [password] ‘密码’];
- ‘用户名’ :指定将创建的用户名
- ‘来源地址’:指定新建的用户可在哪些主机上地址,可使用IP地址、网段、主机名的形式
本地用户可用localhost。
若允许任意主机登录,可用通配符% - ‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由MySQL自动加密
若使用加密密码,需要先用select password (‘密码’);获取密文,再在语句中password ‘密文’;
若省略"identified by"部分,则用户的密码将为空(不建议使用)
mysql> create user 'qz2'@'localhost' identified by '5514';
Query OK, 0 rows affected (0.01 sec)
mysql> select password('qz5514');
+-------------------------------------------+
| password('qz5514') |
+-------------------------------------------+
| *EEF6AB691B0DC942DA41D4E080CC33B721FE4532 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> create user 'qz3'@'localhost' identified by password '*EEF6AB691B0DC942DA41D4E080CC33B721FE4532';
Query OK, 0 rows affected, 1 warning (0.00 sec)
【创建后的用户都保存在mysql数据库的user表里】
mysql> use mysql;
Database changed
mysql> select user,authentication_string,host from user;
+---------------+-------------------------------------------+-----------+
| user | authentication_string | host |
+---------------+-------------------------------------------+-----------+
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| bbsuser | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| qz2 | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhos |
| qz3 | *EEF6AB691B0DC942DA41D4E080CC33B721FE4532 | localhos |
+---------------+-------------------------------------------+-----------+
7 rows in set (0.00 sec)
用户重命名、删除以及密码修改与遗忘
- 重命名
mysql> rename user 'qz4'@'localhost' to 'qz5'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,authentication_string,host from user;
+---------------+-------------------------------------------+-----------+
| user | authentication_string | host |
+---------------+-------------------------------------------+-----------+
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| bbsuser | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| qz2 | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhos |
| qz3 | *EEF6AB691B0DC942DA41D4E080CC33B721FE4532 | localhos |
| qz5 | *EEF6AB691B0DC942DA41D4E080CC33B721FE4532 | localhost |
+---------------+-------------------------------------------+-----------+
8 rows in set (0.00 sec)
- 删除用户
mysql> drop user 'qz3'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,authentication_string,host from user;
+---------------+-------------------------------------------+-----------+
| user | authentication_string | host |
+---------------+-------------------------------------------+-----------+
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| bbsuser | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| qz2 | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhos |
| qz5 | *EEF6AB691B0DC942DA41D4E080CC33B721FE4532 | localhost |
+---------------+-------------------------------------------+-----------+
7 rows in set (0.00 sec)
- 用户密码修改
mysql> select user,authentication_string,host from user;
+---------------+-------------------------------------------+-----------+
| user | authentication_string | host |
+---------------+-------------------------------------------+-----------+
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| bbsuser | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| qz2 | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhos |
| qz5 | *EEF6AB691B0DC942DA41D4E080CC33B721FE4532 | localhost |
+---------------+-------------------------------------------+-----------+
7 rows in set (0.00 sec)
【不指定用户时默认为当前用户,这里修改的就是root用户密码】
mysql> set password = password ('qwe');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select user,authentication_string,host from user;
+---------------+-------------------------------------------+-----------+
| user | authentication_string | host |
+---------------+-------------------------------------------+-----------+
| root | *BBAE266E0E1E92B3A857E20260D41B7BC259297F | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| bbsuser | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| qz2 | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhos |
| qz5 | *EEF6AB691B0DC942DA41D4E080CC33B721FE4532 | localhost |
+---------------+-------------------------------------------+-----------+
7 rows in set (0.00 sec)
【修改其他用户密码】
mysql> set password for 'qz5'@'localhost' = password('qwe');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select user,authentication_string,host from user;
+---------------+-------------------------------------------+-----------+
| user | authentication_string | host |
+---------------+-------------------------------------------+-----------+
| root | *BBAE266E0E1E92B3A857E20260D41B7BC259297F | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| root | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| bbsuser | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | % |
| qz2 | *A5D0A2506C6B8BCB7D8D7BBA6E928CB63D8F68FE | localhos |
| qz5 | *BBAE266E0E1E92B3A857E20260D41B7BC259297F | localhost |
+---------------+-------------------------------------------+-----------+
7 rows in set (0.00 sec)
mysql> exit
Bye
[root@localhost /]# mysql -uqz5 -pqwe;
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 5.7.20 Source distribution
【忘记root密码的解决方法】
[root@localhost /]# vim /etc/my.cnf 【编辑配置文件,在mysqld里面添加一项】
29 skip-grant-tables
[root@localhost /]# systemctl restart mysqld.service
[root@localhost /]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
【使用SQL语句修改root密码】
mysql> update mysql.user set authentication_string = password('5514') where user='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 2 Changed: 1 Warnings: 1
mysql> flush privileges; 【刷新权限相关的表,即当对权限进行了相关的操作后使用】
Query OK, 0 rows affected (0.00 sec)
[root@localhost /]# vim /etc/my.cnf 【删除skip-grant-tables并重启服务】
[root@localhost /]# systemctl restart mysqld.service
[root@localhost /]# mysql -u root -p5514
mysql: [Warning] Using a password on the command line interface can be insecure.
数据库用户授权
- 授予权限
- DCL语句:grant 提权
- 格式:grant 权限列表 on 数据库名.表名 to ‘用户名’@‘来源地址’ [identified by ‘密码’];
- 权限列表
- 用于列出授权使用的各种数据库操作,以逗号进行分隔,例如"select,insert,update"
- 使用"all"表示所有权限,可授权执行任何操作
- 数据库名.表名
- 用于指定授权操作的数据库和表的名称,其中可以使用通配符"*"
- 例如:使用"qz1.*"表示授权操作的对象为qz1数据库中的所有表
- ‘用户名’@‘来源地址’
- 用于指定用户名称和允许访问的客户机地址
- 来源地址可以是域名、IP地址,也可使用"%"通配符,表示某个区域或网段内的所有地址
- 例如"%.accp.com"、"192.168.131.%"等等
- identified by
- 用于设置用户连接数据库时所使用的密码字符串
- 在新建用户时,若省略identified by部分,则用户的密码将为空
【只允许用户qz5在本地查询qz1数据库中所有表的数据记录 】
mysql> grant select on qz1.* to 'qz5'@'localhost' identified by 'qwe';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> exit
Bye
[root@localhost /]# mysql -u qz5 -pqwe
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| qz1 |
+--------------------+
2 rows in set (0.00 sec)
mysql> use qz1
mysql> show tables;
+---------------+
| Tables_in_qz1 |
+---------------+
| 天上人间 |
| 皇家10号 |
...略...
| 皇家娱乐 |
| zq |
| zqusers |
+---------------+
14 rows in set (0.00 sec)
mysql> select * from 天上人间;
+--------+--------+--------+--------------+
| 姓名 | 性别 | 编号 | 家庭地址 |
+--------+--------+--------+--------------+
| 丹丹 | 女 | 12 | 未知 |
| 悦悦 | 女 | 13 | 未知 |
| 橙橙 | 女 | 14 | 未知 |
| 思思 | 女 | 15 | 未知 |
+--------+--------+--------+--------------+
4 rows in set (0.00 sec)
mysql> drop table zq;
ERROR 1142 (42000): DROP command denied to user 'qz5'@'localhost' for table 'zq'
【拒绝DROP删除命令】
【允许用户qz5在所有终端连接mysql,并拥有所有权限】
mysql> grant all privileges on *.* to 'qz5'@'%' identified by '5514';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; 【刷新权限】
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'qz5'@'%'; 【查看qz5权限,GRANT ALL PRIVILEGES:所有权限】
+------------------------------------------+
| Grants for qz5@% |
+------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'qz5'@'%' |
+------------------------------------------+
1 row in set (0.00 sec)
数据库权限撤销与查看
- 格式:revoke 权限列表 on 数据库名.表名 from 用户名@来源地址;
- usage权限只能用于数据库登录,不能执行任何操作
- usage权限不能被回收,即revoke不能撤销用户
mysql> revoke all privileges on *.* FROM 'qz5'@'%';
Query OK, 0 rows affected (0.01 sec)
【查看权限】
mysql> show grants for 'qz5'@'%';
+---------------------------------+
| Grants for qz5@% |
+---------------------------------+
| GRANT USAGE ON *.* TO 'qz5'@'%' |
+---------------------------------+
1 row in set (0.00 sec)