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.rhkb.cn/news/285290.html

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

相关文章

202基于matlab的曲柄滑块机构的运动学仿真分析

基于matlab的曲柄滑块机构的运动学仿真分析,分析各个杆的速度、位移、加速度曲线,以及曲柄滑块机构的动画。程序已调通,可直接运行。 202 matlab 曲柄滑块机构 运动学仿真分析 - 小红书 (xiaohongshu.com)

Windows/Linux-openEuler系统使用路由侠内网穿透,部署项目详细教程

文章目录 Windows/Linux-openEuler系统使用路由侠内网穿透,部署项目详细教程一、在windows系统下载安装路由侠并实现项目部署1、下载路由侠并注册安装到Windows系统2、点击内网映射,添加映射,注册域名前缀3、选择网站应用4、配置你想要代理项…

macOS访问samba文件夹的正确姿势,在哪里更改“macOS的连接身份“?还真不好找!

环境:路由器上需要身份认证的Mini NAS macOS Sonoma 14 这是一个非常简单的问题,但解决方法却藏得比较深,不够直观,GPT也没有给出明确的解决提示,特意记录一下。 macOS很多地方都很自动,有时候让人找不到设…

day04_JDBC_课后练习(创建数据库,表格,添加模拟数据,搭建开发环境,编写实体类,实现接口,测试)

文章目录 day04_JDBC_课后练习1、创建数据库2、创建如下表格3、添加模拟数据4、搭建开发环境,准备各个工具组件(1)使用druid(德鲁伊)数据库连接池(2)使用尚硅谷的JDBCTools工具类(直…

StarRocks 助力金融营销数字化进化之路

作者:平安银行 数据资产中心数据及 AI 平台团队负责人 廖晓格 平安银行五位一体,做零售金融的领先银行,五位一体是由开放银行、AI 银行、远程银行、线下银行、综合化银行协同构建的数据化、智能化的零售客户经营模式,这套模式以数…

Unity构建详解(3)——SBP的依赖计算

【前置知识】 先要搞清楚Asset和Object的关系,可以简单理解为一个Asset对应多个Object。 unity自定义的Asset也要有一个存储的标准,其采用的是YAML,我们看到的所有Unity自定义的Asset格式,例如.prefab(预制体&#x…

解决长尾问题,BEV-CLIP:自动驾驶中复杂场景的多模态BEV检索方法

解决长尾问题,BEV-CLIP:自动驾驶中复杂场景的多模态BEV检索方法 理想汽车的工作,原文,BEV-CLIP: Multi-modal BEV Retrieval Methodology for Complex Scene in Autonomous Driving 链接:https://arxiv.org/pdf/2401.…

【数据结构】快速排序(用递归)

大家好,我是苏貝,本篇博客带大家了解快速排序,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 一. 基本思想二. 快速排序2.1 hoare版本2.2 挖坑法2.3 前后指针法2.4 快速排序优化三数取中法…

Python学习(一)

Python环境下载安装 安装略 验证安装结果与编写第一个Python程序

Vue 实现带拖动功能的时间轴

1.效果图 2. 当使用timeline-slider-vue组件时,你可以设置以下属性: date:用于设置时间轴滑块的初始日期,格式通常为 YYYY-MM-DD。 mask:一个布尔值,用于控制是否显示背景遮罩。 markDate:一…

需求:实现一个类似打印的效果(文字一个字一个字的输出)

实现效果: 需求:最近接到这么一个需求,ai机器人回复的问题,后端是通过websocket每隔一段事件返回数据,前端拿到数据后直接渲染,现在需要做到一个效果,后端返回的结果前端需要一个一个文字的输出…

MultiArch与Ubuntu/Debian 的交叉编译

返回:OpenCV系列文章目录(持续更新中......) 上一篇:基于ARM 的Linux系统的交叉编译 下一篇:MultiArch与Ubuntu/Debian 的交叉编译 警告: 本教程可能包含过时的信息。 什么是“MultiArch” OpenCV 可能…

【Canvas与艺术】暗蓝网格汽车速度仪表盘

【关键点】 采用线性渐变色&#xff0c;使上深下浅的圆有凹下效果&#xff0c;使上浅下深的圆有凸起效果&#xff0c;两者结合就有立体圆钮的感觉。 【图例】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type&quo…

php搭建websocket

1.项目终端执行命令&#xff1a;composer require topthink/think-worker 2.0.x 2.config多出三个配置文件&#xff1a; 3.当使用php think worker:gateway命令时&#xff0c;提示不支持Windows。 4.打包项目为zip格式 5.打包数据库 6.阿里云创建记录 7.宝塔面板新增站点…

win10如何录制视频?解锁屏幕录制新姿势!

在Windows 10操作系统中&#xff0c;视频录制已经成为一项非常实用的功能。无论是进行在线教育、游戏直播&#xff0c;还是制作教学视频、会议记录&#xff0c;一款易于使用且功能强大的录屏软件都是必不可少的。在本文中&#xff0c;我们将向您介绍win10如何录制视频的三种方法…

一枝独秀,基于区块链共益型短视频平台享视,真的能抗衡各大短视频平台吗

早在2006年&#xff0c;全球非营利性组织共益实验室(B Lab)就提出了共益企业(B Corp)的概念&#xff0c;致力于推动商业向善。 但时至今日&#xff0c;共益企业发展仍处初级阶段&#xff0c;而且只强调要对社区、员工、环境、供应商、消费者等利益相关者负责&#xff0c;认定标…

【协议-HTTPS】

https https是在http协议的基础上&#xff0c;添加了SSL/TLS握手以及数据加密传输&#xff0c;也属于应用层协议。 httpshttp加密认证完整性保护 https交互图&#xff1a; HTTPS的整体过程分为证书验证和数据传输阶段&#xff1a; ① 证书验证阶段 浏览器发起 HTTPS 请求 服务…

电脑不能读取移动硬盘,但是可以读取U盘解决方法

找到此电脑 右键设备管理器&#xff0c;找到其中的通用串行总线控制器。 注意&#xff0c;凡是插入到电脑当中不能读取的U盘或者移动硬盘&#xff0c;都会在通用串行总线控制器当中显示为USB大容量存储设备 鼠标选中“USB大容量存储设备”&#xff0c;右键卸载它。此时&#x…

【算法每日一练]-动态规划(保姆级教程 篇17 状态压缩)#POJ1185:炮兵阵地 #互不侵犯

目录 今日知识点&#xff1a; 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1和i-2行进行不断转移 把状态压缩成j,dp每行i的布置状态&#xff0c;从i-1行进行状态匹配&#xff0c;然后枚举国王数转移 POJ1185&#xff1a;炮兵阵地 思路&#xff1a; 题目&#xff1a;互…

Verilog刷题笔记44

题目&#xff1a;Consider the n-bit shift register circuit shown below: 解题&#xff1a; module top_module (input clk,input w, R, E, L,output Q );always(posedge clk)beginif(L1)Q<R;elseQ<(E1)?w:Q;endendmodule结果正确&#xff1a; 注意点&#xff1a; …