MySQL数据库基本操作(增删改查)与用户授权

前言

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的语言。SQL的设计目标是提供一种简单、直观的语言,使得用户可以通过编写SQL语句来处理他们想要的数据和操作。

目录

一、结构介绍

1. 查看信息

1.1 查看数据库信息

1.2 查看数据库中的表信息

1.3 显示数据表的结构(字段)

2. 结构字段

3. 常用数据类型

二、SQL语言

1. 分类

2. DDL

2.1 创建数据库

2.2 创建数据表 

2.3 获取表结构

2.4 删除数据库

2.5 删除数据表 

3. DML

3.1 表中插入新数据

3.2 更新修改

3.3 删除表数据

4. DQL

5. 数据表的高级操作

5.1 清空表

5.2 三种删除命令区别 

6. 临时表

7. 克隆表 

8. DCL

8.1 修改表名

8.2 扩展表结构(增加字段)

8.3 修改字段(列)名,添加唯一键

8.4 删除

二、用户授权管理

1. 用户管理

1.1 新建用户

1.2 查看用户信息

1.3 重命名指定

1.4 删除用户

1.5 修改当前密码

1.6 修改其他用户密码

1.7 忘记密码

2. 用户授权

2.1 基本格式介绍

2.2 授权示例

2.3 查看权限

2.4 撤销权限

2.5 all privilege 权限


一、结构介绍

1. 查看信息

1.1 查看数据库信息

mysql> show databases;

1.2 查看数据库中的表信息

mysql> use mysql;     #首先要切换到mysql库内
mysql> show tables;  #或者
mysql> show tables in mysql;

1.3 显示数据表的结构(字段)

mysql> use mysql;
mysql> describe user;#或者
mysql> describe mysql.user;   #describe 库名.表名

2. 结构字段

Field:字段名称
type :数据类型
Null :是否允许为空值
key  :主键
Default:默认值
Extra  :扩展属性,例如:AUTO_INCREMENT:这个属性通常用于整数类型的字段,表示这个字段的值是自动递增的。

3. 常用数据类型

int:整型                   #用于定义整数类型的数据
float:单精度浮点4字节32位    #准确表示到小数点后六位		
double:双精度浮点8字节64位   #精确度更高
char:固定长度的字符类型	   #用于定义字符类型数据,如:20字节,只写入4个字符,依然占用20字节
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错
varchar:可变长度的字符类型   #区别于char,如:20字节,只写入4个字符,占用4字节
text:文本
image:图片
decimal(5,2):5个有效长度数字,小数点后面有2位
#指定长度数组 ,如:999.99

二、SQL语言

SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。在MySQL数据库中SQL语句不区分大小写。

1. 分类

① DDL:数据定义语言(创建、修改、删除数据库对象)

② DML:数据操纵语言(插入、修改、删除、查询数据)

③ DQL:数据查询语言(数据库中查询信息)

④ DCL:数据控制语言(数据库访问权限和安全性)

2. DDL

用于创建数据库对象,如库、表、索引等

2.1 创建数据库

格式为:create database 数据库名;
示例:
mysql> create database school;   #创建数据库school
Query OK, 1 row affected (0.00 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |       #information_schema数据库提供了关于数据库对象的元数据信息
| mysql              |       #mysql 是一个系统数据库
| school             |       #新建的数据库
| performance_schema |       #performance_schema数据库则提供了关于数据库服务器性能的详细信息  
| sys                |       #sys是一个用于性能监测和诊断的工具库
+--------------------+
5 rows in set (0.00 sec)

2.2 创建数据表 

格式:create table 数据库名(至少一个字段定义...);
示例:
mysql> use school;
mysql> create table class(id int not null,name char(15) not null,score decimal(5,2),passwd char(45)default'',primary key(id));
Query OK, 0 rows affected (0.03 sec)
# id int not null:这是一个整数类型的列,且不允许为空。这通常用作表的主键,用于唯一标识每一行。
# name char(15) not null:这是一个字符类型的列,长度为 15,且不允许为空。用于存储学生的名字。
# score decimal(5,2):这是一个十进制数类型的列,总共有 5 位数,其中 2 位是小数。用于存储学生的分数。
# passwd char(45) default '':这是一个字符类型的列,长度为 45,且默认值为空字符串。用于存储学生的密码。
# primary key(id):这是一个主键约束,指定 id 列作为主键。主键是用于唯一标识每一行的列,且每一行的主键值都必须唯一。

2.3 获取表结构

格式:desc 表名;
示例:
mysql> desc class;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |  #字段
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   | PRI | NULL    |       |
| name   | char(15)     | NO   |     | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

2.4 删除数据库

格式:drop database 库名; #此方法删除库后,库以及库里的表一并删除,谨慎操作

2.5 删除数据表 

格式:
drop table 表名;  #此方法删除表后,表的结构和内容一并删除,谨慎操作
#一般需要先use进入库中再删除;如果不用use进入库中,删除则需加上数据库名
mysql> drop table 库名.表名;

3. DML

用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据

3.1 表中插入新数据

格式1:
use 库;
insert into 表名(字段1,字段2,...) values(字段1的值,字段2的值,...);
# values()中字符串建议加''
格式2:
insert into 表名 values(字段1的值,[字段2的值,]...);
# values()中部分字段值可以不写
示例:
mysql> insert into class(id,name,score,passwd) values(1,'zs',500.50,password('123456'));
# 向 class 表插入一行数据,id、name、score 和 passwd 是表 "class" 的列名,它们的值分别是 1、zs、500.50 和 123456,密码以密文显示
mysql> insert into class values(2,'lisi',666.00,666666);
# 向 class 表插入一行数据,id、name、score 和 passwd 是表 "class" 的列名,它们的值分别是 2、lisi、666.00 和 666666
mysql> select * from class;    #查看表信息
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | zs   | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 666.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
2 rows in set (0.00 sec)

3.2 更新修改

格式:
update 表名 set 字段名1=值1[,字段名2=值2] where 条件表达式;
# set 关键字用于指定要更新的列和它们的新值
# where 关键字用于指定更新操作应该应用到哪些行。只有满足 where 子句的行才会被更新
示例:
mysql> update class set name='wang' where name='zs';
# 将表 class 中所有 name 列的值为 zs 的行的 name 列的值更新为 wang
mysql> update class set score='580.00' where id=2;
# 将表 class 中 id 列的值为 2 的行的 score 列的值更新为 580.00
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
2 rows in set (0.00 sec)

3.3 删除表数据

格式:
delete from 表名;                 #删整张表,谨慎操作
delete from 表名 where 条件表达式;  #指定删除匹配项
如果不用use进入库中:
delete from 库名.表名;
示例:
mysql> delete from class where id=2;
# 从名为 "class" 的表中删除 id 列的值为 2 的行
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+------+--------+-------------------------------------------+
1 row in set (0.00 sec)

4. DQL

用于从数据表中查找符合条件的数据记录

格式:
select 字段名1[,字段名2],... from 表名[where 条件表达式]; #字段没有要求可以写成*
如果不用use进入库中:
select 字段名1[,字段名2],... from 库名.表名;
示例:
mysql> select * from class;
# 查询名为 class 的表中选择所有列和行的信息
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
2 rows in set (0.00 sec)mysql> select name,score from class where name='wang';
# 从名为 class 的表中选择 name 和 score 两列,匹配 name 列的值为 wang 的信息。
+------+--------+
| name | score  |
+------+--------+
| wang | 500.50 |
+------+--------+
1 row in set (0.00 sec)

其他示例:

mysql> select name from class\G;
# 以列表方式竖向显示
*************************** 1. row ***************************
name: wang
*************************** 2. row ***************************
name: lisimysql> select * from class limit 1;
# 只显示头1行
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+------+--------+-------------------------------------------+mysql> select * from class limit 1,1;
# 显示第1行后的前1行
+----+------+--------+--------+
| id | name | score  | passwd |
+----+------+--------+--------+
|  2 | lisi | 580.00 | 666666 |
+----+------+--------+--------+

5. 数据表的高级操作

5.1 清空表

方法一:

格式:
delect from 表名;
# delete 清空表后,返回的结果内有删除的记录条目
# delete 工作时是逐行的删除数据;如果表中有自增长字段,使用 delete from 删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录

方法二: 

truncate table 表名;
# truncate 清空表后,没有返回被删除的条目
#TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 truncate 会比 delete 清空表快;使用truncate table 清空表内数据后,id 会从 1 开始重新记录

5.2 三种删除命令区别 

特性/命令drop table 表名truncate table 表名delete from 表名
语言类属于DDL属于DDL属于DML
回滚恢复不可回滚(无法恢复)不可回滚(无法恢复)可回滚(可恢复)
是否带where不可带where不可带where可带where
删除情况表内容和结构删除表内容删除(结构保留)表结构保留,表内容视where执行情况
删除速度删除速度快删除速度快删除速度慢,需要逐行删

总结:

  • 不再需要一张表的时候,用drop
  • 想删除部分数据行时候,用delete,并且带上where子句
  • 保留表结构而删除所有数据的时候用truncate
  • 删除速度:drop> truncate > delete
  • delete 安全性最好 

6. 临时表

临时表是一种特殊的数据表,在生产环境中,有时候会用临时表做一些性能测试。它只在当前的数据库会话中存在(临时存放内存中),当会话结束时,临时表就会被自动删除。

格式:
create temporary table 表名 (字段1 数据类型[,字段2 数据类型],... [PRIMARY KEY (主键名)]);
# 临时表创建成功之后,使用 show tables 命令是看不到创建的临时表的,临时表会在连接退出后被销毁
# 在退出连接之前,也可以可执行增删改查等操作,比如使用 drop table 语句手动直接删除临时表
示例:
mysql> create temporary table class1 (id int(4) zerofill primary key auto_increment,name varchar(15) not null,cardid int(18) not null unique key,hobby varchar(60),shouji int(11) unique key);
# int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001
# auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
# unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
# not null:表示此字段不允许为NULL
# primary key(id):这是一个主键约束,指定 id 列作为主键。主键是用于唯一标识每一行的列,且每一行的主键值都必须唯一。
mysql> insert into class1 values(1,'hong',111111,'sing',138); 
mysql> insert into class1 values(2,'ming',111111,'dance',139);
ERROR 1062 (23000): Duplicate entry '111111' for key 'cardid'
# cardid唯一键约束,无法创建相同的值
mysql> insert into class1 values(2,'ming',222222,'dance',139);
mysql> insert into class1 (name,cardid,hobby,shouji) values('yang',333333,'rap',181);
mysql> select * from class1;
+------+------+--------+-------+--------+
| id   | name | cardid | hobby | shouji |
+------+------+--------+-------+--------+
| 0001 | hong | 111111 | sing  |    138 |
| 0002 | ming | 222222 | dance |    139 |
| 0003 | yang | 333333 | rap   |    181 |
+------+------+--------+-------+--------+
3 rows in set (0.00 sec)mysql> exit
mysql> use school;
mysql> select * from class1;
ERROR 1146 (42S02): Table 'school.class1' doesn't exist
# 退出即失效

7. 克隆表 

克隆表是指在数据库中创建一个已存在表的副本。克隆表包含了原表的结构和数据,但是它们是独立的,对克隆表的修改不会影响原表。克隆表通常用于备份数据,或者在进行复杂的数据处理时进行实验,以避免对原表的影响。

方法1:like 方法
create table 新表名 like 旧表名;    
#复制格式,通过like方法,复制旧表结构生成新表
insert into 新表名 select * from 旧表名;     
#备份内容
方法2:show create table 方法
create table 新表名 (select * from 旧表名);   
#复制旧表数据到新表中,即将旧数据表的数据记录生成到新的表中
示例:方法1
mysql> use school;
mysql> create table class1 like class;
mysql> desc class1;            
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   | PRI | NULL    |       |
| name   | char(15)     | NO   |     | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+
# 查看表结构,可见格式字段包括主键都存在
mysql> insert into class1 select * from class;
mysql> select * from class1;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
# 查看表内容都存在示例:方法2
mysql> create table class2 (select * from class);
mysql> select * from class2;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
# 查看表内容都存在
mysql> desc class2;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   |     | NULL    |       |
| name   | char(15)     | NO   |     | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+
# 查看表结构,格式字段存在,缺少主键
mysql> show create table class2\G     #获取数据表的表结构、索引等信息
*************************** 1. row ***************************Table: class2
Create Table: CREATE TABLE "class2" ("id" int(11) NOT NULL,"name" char(15) NOT NULL,"score" decimal(5,2) DEFAULT NULL,"passwd" char(45) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8

总结:克隆表有两种

① 迁移表:表的结构、属性、约束、数据等

② 备份数据:表的属性、内容(数据)

8. DCL

修改表名和表结构

8.1 修改表名

格式:
alter table 旧表名 rename 新表名;
示例:
mysql> alter table class2 rename class5;
# 将数据表 class2 修改名称为 class5
mysql> select * from class5;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+

8.2 扩展表结构(增加字段)

格式:
alter table 表名 add 字段名 数据类型;
示例:
mysql> alter table class5 add address varchar(100) default 'dizhiweizhi';
# 给数据表 class5 新增字段命名 address,定义数据类型为可变长度型,最大100字节,默认值为 dizhiweizhi
mysql> desc class5;
+---------+--------------+------+-----+-------------+-------+
| Field   | Type         | Null | Key | Default     | Extra |
+---------+--------------+------+-----+-------------+-------+
| id      | int(11)      | NO   |     | NULL        |       |
| name    | char(15)     | NO   |     | NULL        |       |
| score   | decimal(5,2) | YES  |     | NULL        |       |
| passwd  | char(45)     | YES  |     |             |       |
| address | varchar(100) | YES  |     | dizhiweizhi |       |
+---------+--------------+------+-----+-------------+-------+
mysql> select * from class5;
+----+------+--------+-------------------------------------------+-------------+
| id | name | score  | passwd                                    | address     |
+----+------+--------+-------------------------------------------+-------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | dizhiweizhi |
|  2 | lisi | 580.00 | 666666                                    | dizhiweizhi |
+----+------+--------+-------------------------------------------+-------------+
# default 'dizhiweizhi':表示此字段设置默认值为dizhiweizhi,可与 ot null 配合使用

8.3 修改字段(列)名,添加唯一键

格式:
alter table 表名 change 旧字段名 新字段名 数据类型 [unique key];
示例:
mysql> alter table class5 change name mingzi varchar(15) unique key;
# 将数据表 class5 的 name 字段名改成 mingzi ,定义数据类型为可变长度类型,最大 15 个字节,并定义唯一键约束
mysql> desc class5;
+---------+--------------+------+-----+-------------+-------+
| Field   | Type         | Null | Key | Default     | Extra |
+---------+--------------+------+-----+-------------+-------+
| id      | int(11)      | NO   |     | NULL        |       |
| mingzi  | varchar(15)  | YES  | UNI | NULL        |       |
| score   | decimal(5,2) | YES  |     | NULL        |       |
| passwd  | char(45)     | YES  |     |             |       |
| address | varchar(100) | YES  |     | dizhiweizhi |       |
+---------+--------------+------+-----+-------------+-------+

8.4 删除

格式:
alter table 表名 drop 字段名;
示例:
mysql> alter table class5 drop address;
# 删除数据表 class5 的 address 字段
mysql> desc class5;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   |     | NULL    |       |
| mingzi | varchar(15)  | YES  | UNI | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+

二、用户授权管理

1. 用户管理

1.1 新建用户

格式:
create user '用户名'@'来源地址' [identified by [password]'密码'];
# '用户名':指定将创建的用户名.
# '来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符%
# '密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
# 若使用加密密码,需要先使用 select password ('密码');获取密文,再在语句中添加 password '密文';
# 若省略"identified by"部分,则用户的密码将为空(不建议使用)示例:
mysql> create user 'fql'@'localhost' identified by '123123';
# 创建用户 fql 允许本地登录,密码 123123(插入数据后 mysql 自动加密)
mysql> select password('666666');
+-------------------------------------------+
| password('666666')                        |
+-------------------------------------------+
| *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC |
+-------------------------------------------+
mysql> create user 'wang'@'192.168.190.%' identified by password '*B2B366CA5C4697F31D4C55D61F0B17E70E5664EC';
# 创建用户 王 允许 192.168.190.段登录,密文密码

1.2 查看用户信息

mysql> use mysql;
格式:
select 字段1,字段2,... from user;
示例:
mysql> select User,authentication_string,Host from user;
# 查看 user 表中用户、密码、来源地址的信息
+-----------+-------------------------------------------+---------------+
| User      | authentication_string                     | Host          |
+-----------+-------------------------------------------+---------------+
| root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost     |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost     |
| fql       | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | localhost     |
| wang      | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC | 192.168.190.% |
+-----------+-------------------------------------------+---------------+

1.3 重命名指定

mysql> use mysql;
mysql> rename user 'wang'@'192.168.190.%' to 'lisi'@'192.168.190.%';
mysql> select User,authentication_string,Host from user where User='lisi';
+------+-------------------------------------------+---------------+
| User | authentication_string                     | Host          |
+------+-------------------------------------------+---------------+
| lisi | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC | 192.168.190.% |
+------+-------------------------------------------+---------------+

1.4 删除用户

mysql> drop user 'lisi'@'192.168.190.%';
# 删除用户 lisi
mysql> select User,authentication_string,Host from user;
+-----------+-------------------------------------------+-----------+
| User      | authentication_string                     | Host      |
+-----------+-------------------------------------------+-----------+
| root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| fql       | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | localhost |
+-----------+-------------------------------------------+-----------+

1.5 修改当前密码

mysql> set password = password('abc123');
# 修改当前用户密码为 abc123

1.6 修改其他用户密码

mysql> set password for 'fql'@'localhost' = password('123456');
# 修改用户 fql 密码为 123456

1.7 忘记密码

① 修改/etc/my.cnf 配置文件,免密登陆mysql

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables    #添加此条内容,使登录 mysql 不使用授权表

② 重启服务(生产环境谨慎操作),直接登录mysql修改密码

[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql
mysql> update mysql.user set authentication_string = password('666666') where user='root';
# 更新 mysql 库 user 表中 user 列的值为 root 的行的 authentication_string(密码)列的值为 '666666' 
mysql> flush privileges;
mysql> exit
[root@localhost ~]# mysql -u root -p'666666'
mysql>      # 成功登录或者免密登录进来后先刷新 MySQL 的权限表,在执行修改当前用户密码:
mysql> flush privileges;
mysql> set password for 'root'@'localhost'=password('新密码');

 ③ 还原/etc/my.cnf 配置,重启服务

2. 用户授权

在 MySQL 中,用户提权是指将用户的权限从一个级别提升到另一个更高的级别。或者根据需求给予合理的权限。

2.1 基本格式介绍

grant 权限列表 on 数据库名.表名 to '用户名'@'来源地址' [identifided by '密码'];
# 权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select, insert, update”。使用"all"表示所有权限,可授权执行任何操作。
# 数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*"。例如,使用"school.*"表示授权操作的对象为school数据库中的所有表。
# '用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、ip地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.baidu.com"、“192.168.190.%”等。
# identifided by:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“identifided by"部分,则用户的密码将为空。
# 允许用户fql在本地查询school数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录。grant select on school.* to 'fql'@'localhost' identifided by '123456';

2.2 授权示例

① 允许用户 fql 在本地连接 mysql,并拥有 school 库查询的权限

mysql> grant select on school.* to 'fql'@'localhost' identified by '123456';
mysql> flush privileges;[root@localhost ~]# mysql -u fql -p'123456'
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| school             |    # 只能看到 school 库
+--------------------+
mysql> use school;
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| class            |
| class1           |
| class5           |
+------------------+
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
mysql> delete from class;
ERROR 1142 (42000): DELETE command denied to user 'fql'@'localhost' for table 'class'
# 权限拒绝

尝试远程连接:被拒绝访问

② 授权 root 用户在 school 库所有权限,允许192.168.190段远程访问 

mysql> grant all privileges on school.* to 'root'@'192.168.190.%' identified by '666666';  

尝试远程连接:访问成功

2.3 查看权限

mysql> show grants for 'fql'@'localhost';
+-------------------------------------------------+
| Grants for fql@localhost                        |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'fql'@'localhost'         |
| GRANT SELECT ON "school".* TO 'fql'@'localhost' |
+-------------------------------------------------+

2.4 撤销权限

格式:
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址;
示例:撤销 fql 权限对于库 school 的权限
mysql> revoke all on "school".* from 'fql'@'localhost';
mysql> show grants for 'fql'@'localhost';
+-----------------------------------------+
| Grants for fql@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'fql'@'localhost' |
+-----------------------------------------+

2.5 all privilege 权限

权限说明
insert插入数据
select查询数据
update更新表的数据
delete删除表中数据
create创建库,表
drop删除库,表
refernces外键约束
index建立索引
alter更改表属性
create temp orary tableslock tables锁表
execute对存储过程或函数的执行权限
create view创建视图
show view显示视图
create routine创建存储过程
alter routine修改存储过程
event事件
trigger on创建触发器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/768148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Django实现信号与消息通知系统【第154篇—Django】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Django实现信号与消息通知系统 在Web应用程序中,实现消息通知系统是至关重…

华为数通 HCIP-Datacom H12-831 题库补充

2024年 HCIP-Datacom(H12-831)最新题库,完整题库请扫描上方二维码,持续更新。 缺省情况下,PIM报文的IP协议号是以下哪一项? A:18 B:59 C:103 D:9 答案&a…

从抛硬币试验看概率论的基本内容及统计方法

一般说到概率,就喜欢拿抛硬币做例子。大多数时候,会简单认为硬币正背面的概率各为二分之一,其实事情远没有这么简单。这篇文章会以抛硬币试验为例子并贯穿全文,引出一系列概率论和数理统计的基本内容。这篇文章会涉及的有古典概型…

ubuntu20.04安装 ffmpeg 开发环境

参考:参考1 一些相关软件包,已打包整理好,如下 源码包 1、安装步骤 创建安装目录 sudo mkdir -p /usr/local/ffmpeg/lib 解压源码 tar -jxf ffmpeg-4.3.2.tar.bz2 到指定ffmpeg目录进行配置 cd ffmpeg-4.3.2/ 配置:会报错很多…

Zookeeper(八)序列化与协议

目录 一 序列化与反序列化1.1 Jute序列化工具1.1 Recor接口1.2 OutputArchive和InputArchive 二 通信协议2.1 请求部分2.1.1 请求头2.2.2 请求体2.1.3 案例分析 2.2 响应部分2.2.1 响应头2.2.2 响应内容2.2.3 案例分析 官网:Apache ZooKeeper 一 序列化与反序列化 …

腾讯云GPU云服务器_GPU云计算_异构计算_弹性计算

腾讯云GPU服务器是提供GPU算力的弹性计算服务,腾讯云GPU服务器具有超强的并行计算能力,可用于深度学习训练、科学计算、图形图像处理、视频编解码等场景,腾讯云百科txybk.com整理腾讯云GPU服务器租用价格表、GPU实例优势、GPU解决方案、GPU软…

信号处理--使用EEGNet进行BCI脑电信号的分类

目录 理论 工具 方法实现 代码获取 理论 EEGNet作为一个比较成熟的框架,在BCI众多任务中,表现出不俗的性能。EEGNet 的主要特点包括:1)框架相对比较简单紧凑 2)适合许多的BCI脑电分析任务 3)使用两种卷…

关闭 Microsoft Word 2010 配置窗口

关闭 Microsoft Word 2010 配置窗口 References 出现这种问题,主要是安装时所用账户和目前登陆的账户不为同一个账户造成的。或者你进行过覆盖安装或是重新安装过系统,但是 office 的安装目录没有更改。先激活 Microsoft Office,然后执行下列…

Unity Canvas的三种模式

一、简介: Canvas的Render Mode一共有三种模式:Screen Space -OverLay、Screen Space-Camera、World Space Screen Space - Overlay(屏幕空间 - 覆盖): 这是最简单的 Canvas 渲染模式。UI 元素在这个模式下将渲染在屏…

web CSS笔记1

CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及…

栅格地图路径规划:基于霸王龙优化算法(Tyrannosaurus optimization,TROA)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

那些王道书里的题目-----计算机网络篇

注:仅记录个人认为有启发的题目 p155 34.下列四个地址块中,与地址块 172.16.166.192/26 不重叠,且与172.16.166.192/26聚合后的地址块不会引入多余地址的是() A.172.16.166.192/27 B.172.16.166.128/26 …

目标检测中的mAP计算原理和源码实现

简介 在目标检测任务中,mAP(mean Average Precision,平均精度均值)是一个非常重要的评价指标,用于衡量模型在多个类别上的平均性能。它综合考虑了模型在不同召回率下的精确率,能够全面反映模型在检测任务中…

Matlab|【免费】智能配电网的双时间尺度随机优化调度

目录 1 主要内容 基础模型 2 部分代码 3 部分程序结果 4 下载链接 1 主要内容 该程序为文章《Two-Timescale Stochastic Dispatch of Smart Distribution Grids》的源代码,主要做的是主动配电网的双时间尺度随机优化调度,该模型考虑配电网的高效和安…

计算机网络——25Internet-Protocol

Internet Protocol 互联网中的网络层 主机、路由器中的网络层功能 IP数据报格式 项目说明ver版本号,如Ipv4就是0100head len头部的长度,一般头部是20个字节(也就是上图中的5行),但是也有可选项,也就是头部是变长的,因…

【C语言】指针基础知识(二)

一,指针变量类型的意义 1,指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。 例如:char* 的指针解引⽤访问⼀个字节,int* 的指针解引⽤访问四个字节,short*…

[SAP MM] 名词专业术语解释

采购凭证 采购凭证通常是一种证明文件,用于记录和跟踪特定时间点的采购活动 采购凭证是指企业在采购物品或服务时所开立的一种凭证,用于记录采购的信息和流程 采购凭证通常包括采购申请、采购订单、采购合同等,其中采购订单是最常用的采购…

Rust并发编程thread多线程和channel消息传递

安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。 并发(concurrent)的概念是指程序不同的部分独立执行,这与并行(parallel)的概念容易混淆,并行强调的是"同…

人工智能之Tensorflow批标准化

批标准化(Batch Normalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深,训练会越来越困难,收敛速度会很慢,常常会导致梯度消失问题。梯度消失问题是在神经网络中,当前…

chatgpt和 github copilot chat哪个更强

chatgpt大家应该都不陌生 ChatGPT 是由 OpenAI 开发的一种基于 GPT(生成式预训练模型)的聊天机器人。它可以生成语言上下文相关的响应,从而进行自然语言对话。ChatGPT 利用大规模的语言数据进行预训练,并通过微调或在线学习来适应…