当前位置:主页 > 查看内容

一章深度剖析MySQL数据库理论+基操(3万多字详细汇总)

发布时间:2021-05-26 00:00| 位朋友查看

简介:MySQL数据库 数据库与MySQL概述与基本概念 数据Data 表 数据库 数据库类型 关系型数据库介绍 非关系型数据库介绍 MySQL数据库介绍 主键、唯一键、外键 数据库日志 MySQL数据库管理 查看 常用的数据类型 SQL语句 SQL语言分类 DDLcreate、drop、alter create创……

数据库与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位
  • CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
  • VARCHAR存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
  • 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点

SQL语句

  • SQL(Structured Query Language)即结构化查询语言
  • 关系型数据库的标准语言
  • 用于维护管理数据库
    • 包括数据查询、数据更新、访问控制、对象管理等功能

SQL语言分类

  • DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
  • DML:数据操纵语言,用于对表中的数据进行管理
  • DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
  • DCL:数据控制语言,用于设置或者更改数据库用户或角色权限

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 皇家9add 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 皇家10add 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 皇家9values(1,'nanjing');
Query OK, 1 row affected (0.06 sec)
mysql> insert into 皇家10values(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 皇家10drop foreign key FK_地址;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table 皇家10drop 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)
;原文链接:https://blog.csdn.net/TaKe___Easy/article/details/115519963
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐