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.hqwc.cn/news/564689.html

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

相关文章

银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report

人民银行金融统计数据大集中自动化报送系统(简称PBOC Report),是基于现代计算机网络技术应用基础上,由人行总行设置金融统计数据服务器,建立的一个全国统一的金融统计数据库。 人行针对各银行存贷款、中间业务、网点人…

学习刷题-13

3.23 hw机试【二叉树】 剑指offer32 剑指 offer32(一、二、三)_剑指offer 32-CSDN博客 从上到下打印二叉树I 一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照从 左 到 右 的顺序返回每一层彩灯编号。 输…

【机器学习300问】48、如何绘制ROC曲线?

ROC曲线(受试者工作特征曲线)是一种用于可视化评估二分类模型性能的指标。特别是在不同阈值情况下模型对正类和负类的区分能力。那么“阈值”到底是个什么呢?ROC曲线中的每一个点到底是什么意思? 一、ROC曲线的绘制【理论】 二分…

LabVIEW电动汽车直流充电桩监控系统

LabVIEW电动汽车直流充电桩监控系统 随着电动汽车的普及,充电桩的安全运行成为重要议题。通过集成传感器监测、单片机技术与LabVIEW开发平台,设计了一套电动汽车直流充电桩监控系统,能实时监测充电桩的温度、电压和电流,并进行数…

Notepad++ 如何调整显示字面大小

在 Notepad 上,可以使用 ctrl 加上鼠标的左键来滚动来进行调整。 如何恢复默 可以使用 Ctrl 加数字键盘上的 / 键 来恢复默认设置。 当然也可以通过菜单栏上 view 菜单下的 Zoom 选项。 上面的界面中可以看到我们的在 Notepad 中使用的选项。 Notepad 如何调整显示…

pycharm搭建新的解释器及删除处理

目录 1.创建虚拟环境 个人实际操作: 对于“继承全局站点包”: 2.创建一个新项目 3.删除操作 (1)删除解释器 (2)删除新建项目 1.创建虚拟环境 Pycharm官方文档说明网址: Configure a virt…

02课程发布模块之部署Nginx

部署Nginx 部署网关 通过Nginx访问后台网关,然后由网关再将请求转发到具体的微服务,网关会把请求转发到具体的服务 upstream gatewayserver{server 127.0.0.1:63010 weight10; } # 网站首页对应的虚拟机 server {listen 80;server_name www.51xuecheng.cn…

基于SpringBoot+Vue+Mybatis的408刷题小程序管理端

简介 原始数据:书目信息、章节信息、题目信息、系统菜单、系统角色、系统用户。 主要任务:系统主要采用spring boot作为后端框架,前端使用vueelementUI,为408刷题小程序提供一个方面的管理和维护的任务,主要功能包括…

20240316-2-协同过滤(collaborative filtering)

协同过滤(collaborative filtering) 直观解释 协同过滤是推荐算法中最常用的算法之一,它根据user与item的交互,发现item之间的相关性,或者发现user之间的相关性,进行推荐。比如你有位朋友看电影的爱好跟你类似,然后最…

C#绘制面形图

创建windows窗体应用 ,从工具箱添加Button和Panel using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Fo…

array go 语言的数组 /切片

内存地址通过& package mainimport "fmt"func main() {var arr [2][3]int16fmt.Println(arr)fmt.Printf("arr的地址是: %p \n", &arr)fmt.Printf("arr[0]的地址是 %p \n", &arr[0])fmt.Printf("arr[0][0]的地址是 %p \n"…

Express:快速搭建Node.js应用的基石

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…