1.DDL数据库定义语言
-
DDL-数据库操作
查询所有所有数据库
SHOW DATABASES;
查询当前数据库
SELECT DATABASES;
创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
删除
DROP DATABASE [IF EXISTS] 数据库名;
使用
USE 数据库名
-
DDL-表操作-查询
查询当前数据库所有表
SHOW TABLES; show tables;
查询表结构
DESC 表名;
查询指定表的建表语句
SHOW CREATE TABLE 表名; show create table 表名;
上面查询建表语句时,有一部分展示出来的SQL语句里面,有一部分并未自己编写,比如engine=InnoDB存储引擎,字符集,排序规则它们都是默认的
-
DDL-表操作-创建
CREATE TABLE 表名( 字段1 字段1类型(长度)[COMMENT 字段1注释], 字段2 字段2类型[COMMENT 字段2注释], 字段3 字段3类型[COMMENT 字段3注释], ... 字段n 字段n类型[COMMENT 字段n注释] )[COMMENT 表注释]; comment 备注、评论 [...]里面是可选参数、最后一个字段不需要加逗号
-
DDL-表操作-数据类型
MySQL中的类型很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型:(有符号都是正负数空间占一半,准确说负数的绝对值比正数小1,下面省略写了,不想敲了)
类型 大小 (有符号signed) (无符号UNSIGNED) 描述 TINYINT 1byte (-126,127) (0,255) 小整数值 SMALLINT 2byte () () MEDIUMINT 3byte INT或INTERGER 4byte BIGINT 8byte FLOAT 4byte DOUBLE 8byte DECIMAL 依赖于M(精度)和D(标度的值)
age年龄这个值就可以选择age TINYINT unsigned
score分数这个值就可以score double(4,1)
字符串类型:
类型 大小 描述 CHAR 0-255 bytes 定长字符串 VARCHAR 0-65535 bytes 变长字符串 TINYBLOB 0-255 bytes 不超过255个字符的二进制数据 TINITEXT 0-255 bytes 短文本字符串 BLOB 0-65 535 bytes 二进制形式的长文本数据 TEXT 0-65 635 bytes 长文本数据 MEDIUMBLOB 二进制 ...
char和varchar都可以定义字符串,区别是CHAR是定长、VARCHAR
varchar
-
varchar是可变长度的,所以查询时会稍微慢一些,因为需要额外的字节存储字符串的长度信息。
-
当存储的数据长度超过定义的最大长度时,会导致数据被截断
char
- CHAR是一种固定长度的字符串类,如果存储的数据长度不足指定的长度,会在数据后面填充空格,造成存储空间的浪费。
- CHAR比VARCHAR占用更多的存储空间,特别是存储长度较短的字符串时会显得浪费。
注意: char性能好,varchar性能较差
日期类型:
类型 大小 范围 格式 描述 DATE 3 1000-01-01到9999-12-31 YYYY-MM-DD 日期值 TIME 3 -838:59:59到 838:59:59 HH:MM:SS 时间值或持续时间 YEAR 1 1901到2155 YYYY 年份值 DATETIME 8 1000-01-01 00:00:00到9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值 TIMESTAMP 4 1970-01-01 00:00:01到2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值、时间戳
一般date、time、datetime使用得比较多
案例:
CREATE TABLE `emp` ( `id` int(11) DEFAULT NULL COMMENT '编号', `workno` varchar(10) DEFAULT NULL COMMENT '工号', `name` varchar(10) DEFAULT NULL COMMENT '姓名', `gender` char(1) DEFAULT NULL COMMENT '性别', `age` tinyint(3) unsigned DEFAULT NULL COMMENT '年龄', `idcard` char(18) DEFAULT NULL COMMENT '身份证号', `entryddate` date DEFAULT NULL COMMENT '入职时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表'
-
-
DDL-表操作-添加
添加字段:
alter table 表名 字段名 类型(长度) [COMMENT 注释] [约束];
案例:为emp表增加一个新得字段"昵称"为nickname,类型varchar(20)
alter table emp add nickname varchar(20) comment '昵称';
-
DDL-表操作-修改
修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
案例:将emp表得nickname字段修改为username,类型为varchar(30)
alter emp change nickname username varchar(30) comment '昵称';
-
DDL-表操作-修改
删除字段
ALTER TABLE 表名 DROP 字段名;
案例:
将emp表的字段username删除
alter table emp drop username;
修改表名
Alter 表名 rename to 新表名;
案例将emp表的表名修改为employee
-
DDL-表操作删除
删除表
DROP TABLE [IF EXISTS] 表名;
删除指定表,并重新创建该表
truncate table 表名;
注意:在删除表时,表中的全部数据都会被删除
总结:
数据库操作
show databases;
create database if not exsist;
use 数据库;
select database();
drop database 数据库名;
表操作
show tables;
create table 表名 (字段 字段类型,字段 字段类型);
desc 表名;
show create table 表名;
-- 字段名的操作
alter table 表名 add/modify/change/drop/rename to ...
drop table 表名;
2.DML数据库操纵语言
DML-介绍
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据进行增删改操作
-
添加数据(INSERT)
-
修改数据(UPDATE)
-
删除数据(DELETTE)
-
DML-添加数据
-
给指定的字段添加数据
INSERT INTO表名 (字段名1,字段名2...) value (值1,值2...)
-
给全部字段添加数据
INSERT INTO VALUES (值1,值2...)
-
批量添加数据
INSERT INTO 表名(字段名1,字段名2,...)VALUES (值1,值2...),(值1,值2...),(值1,值2...); INSERT INTO表名 VALUES (值1,值2...),(值1,值2...),(值1,值2...);
注意:
- 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
- 字符串和日期型数据应该包含在引号中。
- 插入的数据大小,应该在字段的规定范围
-
DML-修改数据
update 表名 set 字段名1 = 值1,字段名2=值2,...[where 条件];
注意:
- 修改语句的添加可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
-
DML-删除数据
DELETE from 表名 [where 条件]
注意:
- DELETE语句条件可以有,也可以没有条件,如果没有条件,则会删除整张表的所有数据。
- DELETE语句不能删除某一个字段的值(可以使用UPDATE)
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ','123456789123456789','2002-01-01')' at line 2
syntax语法,manual指南、手册 corresponds相当于、符合、相一致、通信
3.DQL数据库查询语言
-
DQL介绍
DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库表的记录。
查询关键字: SELECT
-
DQL-语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数
查询类型:
- 基本查询
- 条件查询(where)
- 聚合函数(count(*)、max、min、avg、sum)
- 分组函数(group by)
- 排序规则(order by)
- 分页查询(limit)
-
DQL-基本查询
1.查询多个字段
SELECT 字段1,字段2,字段3 ... FROM 表名; SELECT * FROM 表名;
2.设置别名(as 可以省略)
SELECT 字段1 [AS 别名1],字段2 [AS 别名2] ... FROM 表名;
3去除重复记录,查询该字段有哪些不同的
select distinct 字段列表 FROM 表名;
-
DQL-条件查询
1.语法
select 字段列表 FROM 表名 where 条件列表;
2.条件
比较运算符 功能 > 大于 >= 大于等于 < 小于 <= 小于等于 = 等于 <>或!= 不等于 BETWEEN...And... 在某个范围之内(含最小,最大值) in(...) 在in之后的列表中的值,多选一 like 占位符 模糊匹配(_匹配单个字符,%匹配任意个字符) IS 是null 逻辑运算符 功能 AND 或 && 并且(多个条件同时成立) OR 或 || 或者(多个条件任意一个成立) NOT 或 ! 非,不是
INSERT INTO employee (id, workno, name, gender, age, idcard, workaddress, entrydate) VALUES (1, '10001', '张三', '男', 25, '110101199001010001', '北京市朝阳区', '2020-01-01'), (2, '10002', '李四', '男', 28, '310101199002020002', '上海市黄浦区', '2019-12-15'), (3, '10003', '王五', '男', 30, '440101199003030003', '广东省深圳市福田区', '2018-05-10'), (4, '10004', '赵六', '女', 27, '320101199004040004', '江苏省南京市鼓楼区', '2020-03-20'), (5, '10005', '陈七', '女', 26, '510101199005050005', '四川省成都市武侯区', '2017-08-01'), (6, '10006', '刘八', '男', 29, '330101199006060006', '浙江省杭州市西湖区', '2019-10-05'), (7, '10007', '朱九', '男', 31, '210101199007070007', '辽宁省沈阳市和平区', '2016-11-11'), (8, '10008', '杨十', '女', 24, '430101199008080008', '湖南省长沙市岳麓区', '2020-02-28'), (9, '10009', '吴十一', '男', 27, '120101199009090009', '天津市和平区', '2019-07-01'), (10, '10010', '郑十二', '女', 26, '370101199010100010', '山东省济南市历下区', '2018-09-15'), (11, '10011', '黄十三', '男', 29, '510101199011110011', '四川省成都市锦江区', '2017-12-01'), (12, '10012', '马十四', '男', 28, '320101199012120012', '江苏省南京市玄武区', '2019-06-20'), (13, '10013', '罗十五', '女', 25, '440101199013130013', '广东省深圳市南山区', '2020-04-10'), (14, '10014', '梁十六', '女', 26, '330101199014140014', '浙江省杭州市拱墅区', '2018-08-01'), (15, '10015', '宋十七', '男', 27, '210101199015150015', '辽宁省沈阳市铁西区', '2019-09-05'), (16, '10016', '郭十八', '男', 30, '430101199016160016', '湖南省长沙市天心区', '2016-10-11'), (17, '10017', '曹十九', '女', 28, '120101199017170017', '天津市南开区', '2020-01-28'), (18, '10018', '许二十', '男', 26, '370101199018180018', '山东省青岛市市南区', '2019-06-01'), (19, '10019', '魏二十一', '女', 29, '510101199019190019', '四川省成都市青羊区', '2018-11-15'), (20, '10020', '张二十二', '男', 27, '320101199020200020', '江苏省苏州市姑苏区', '2020-03-20'), (21, '10021', '李二十三', '男', 25, '440101199021210021', '广东省广州市天河区', '2017-07-01'), (22, '10022', '王二十四', '女', 24, '330101199022220022', '浙江省宁波市江北区', '2019-09-15'), (23, '10023', '赵二十五', '男', 26, '210101199023230023', '辽宁省大连市中山区', '2018-12-01'), (24, '10024', '陈二十六', '女', 27, '430101199024240024', '湖南省株洲市天元区', '2020-05-20'), (25, '10025', '刘二十七', '男', 28, '120101199025250025', '天津市河东区', '2019-08-05'), (26, '10026', '朱二十八', '男', 30, '370101199026260026', '山东省烟台市芝罘区', '2016-09-11'), (27, '10027', '杨二十九', '女', 29, '510101199027270027', '四川省成都市金牛区', '2020-02-28'), (28, '10028', '吴三十', '男', 26, '320101199028280028', '江苏省无锡市滨湖区', '2019-05-01'), (29, '10029', '郑三十一', '女', 25, '440101199029290029', '广东省珠海市香洲区', '2018-10-15'), (30, '10030', '黄三十二', '男', 27, '330101199030300030', '浙江省温州市鹿城区', '2017-11-20');
-- 条件查询 -- 1.查询年龄等于25的员工 select name,age from employee where age = 25; -- 2.查询年龄小于25的员工信息 select name,age,workaddress from employee WHERE age<25; -- 3.查询年龄小于等于25的员工信息 select name,age,workaddress from employee WHERE age<=25; -- 4.查询没有身份证的号的员工信息 select * from employee where idcard is null; -- 5.查询有身份证号的员工信息 SELECT * from employee where idcard is not null; UPDATE employee set idcard = null where id = 18; -- 6.查询年龄不等于25的员工信息 select * from employee where age != 25; select * from employee where age <> 25; -- 7.查询年龄在25岁(包含)到30岁(包含)的员工信息 select * from employee where age BETWEEN 25 and 30; select * from employee where age >=25 and age<=30 ORDER BY age; select * from employee where age >=25 && age <= 30 order by age; -- 8.查询性别为 女 且年龄小于 25岁的员工信息 select * from employee where gender = '女' and age <= 25; -- 9.查询年龄等于24 或 28 或 30 的员工信息 select * from employee where age = 25 or age = 28 or age = 30 order by age; select * from employee where age in (24,28,30); -- 10.查询姓名为两个字的员工信息 select * from employee where name like '__'; -- 11.查询姓王的员工 select * from employee where name like '王%' select * from employee where idcard like '%x'
-
DQL-聚合函数
1.介绍
将一列数据作为一个整体,进行纵向计算。
2.常见聚合函数
函数 功能 count 统计数量 max 最大值 min 最小值 avg 平均值 sum 求和 3.语法
select 聚合函数(字段列表) FROM 表名;
注意: null值不参与所有聚合函数运算
-- 聚合函数 -- 1.统计该企业员工数量 SELECT count(*) from employee; -- 2.统计该企业员工的平均年龄 聚合函数计算不包括空值 SELECT count(idcard) from employee; -- 3.统计该企业员工的最大年龄 select max(age) from employee; -- 4.统计该企业员工的最小年龄 select min(age) from employee; -- 5.统计西安地区的员工的年龄之和 select * from employee where workaddress like "%成都%"; select sum(age) from employee where workaddress like "%成都%";
-
DQL-分组查询
1.语法
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组过滤后的条件];
这里涉及到了两个条件,这里的where和having分别有啥区别?
2.where与having区别(非常重要)
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
- 判断条件不同:where不能对聚合函数进行判断,而having可以
注意:
- 执行顺序: where > 聚合函数 > having。
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其它字段无任何意义。
-- 分组查询 -- 1.根据性别分组,统计男性员工 和 女性员工的数量 select gender,count(*) as '总数' from employee group by gender; -- 2.根据性别分组,统计男性员工 和 女性员工的平均年龄 select gender,count(*) as '总数',avg(age) as '平均年龄' from employee GROUP BY gender; -- 3.查询年龄小于28岁的员工,并根据工作地址分组,获取员工数量大于等于2的工作地址 select workaddress,count(*) from employee where age <28 GROUP BY workaddress having count(*) >= 2;
-
DQL-排序查询
1.语法:
select 字段列表 表名 order by 字段1 排序方式1,字段2 排序方式2;
2.排序方式
- ASC: 升序(默认值)
- DESC: 降序
注意: 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
-- 排序查询 -- 1.根据年龄对公司的员工进行升序排序 select * from employee order by age asc; -- 默认升序 select * from employee order by age desc; -- 2.根据入职时间,对员工进行降序排序 select * from employee order by entrydate desc; -- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序升序 select * from employee order by age asc,entrydate desc; -- asc可以省略
-
DQL-分页查询
1.语法
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意
- 起始索引从0开始,起始索引=(查询页码-1)*每页记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是Limit。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
-- 排序查询 -- 1.根据年龄对公司的员工进行升序排序 select * from employee order by age asc; -- 默认升序 select * from employee order by age desc; -- 2.根据入职时间,对员工进行降序排序 select * from employee order by entrydate desc; -- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序升序 select * from employee order by age asc,entrydate desc; -- asc可以省略 -- 分页查询 -- 1.查询第1页员工数据,每页展示10条记录 select * from employee limit 0,10; -- 2.查询第2页员工数据,每页展示10条记录 ---->(页码-1)*页展示数 select * from employee limit 9,10;
-
DQL-案例编写
1.查询年龄为20,21,22,23岁的员工信息。
2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工
3.统计员工表中,年龄小于60岁的,男性员工和女姓员工的人数。
4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
5.查询性别为男,且年龄在20~40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
-- 1.查询年龄为20,21,22,23,25,28岁的员工信息。 select * from employee where gender = '女' and age in (20,21,22,23,25,28); -- 2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工 select * from employee where age between 20 and 40 and gender = '男' and name like '___'; -- 3.统计员工表中,年龄小于28岁的,男性员工和女姓员工的人数。 select gender,count(*) from employee where age < 28 GROUP BY gender; -- 4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。 select name,age from employee where age<=35 order by age asc ,entrydate desc; -- 5.查询性别为男,且年龄在20~40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。 select * from employee where gender = '男' and age BETWEEN 20 and 40 ORDER BY age asc,entrydate asc LIMIT 0,5;
-
DQL-执行顺序(非常重要)
DQL语句需要知道它的执行顺序,上面有DQL的编写顺序,编写顺序并不是执行顺序。
执行顺序是先找这张表,也就是执行FROM,然后通过WHERE执行查询条件,第三步通过GROUP BY和HAVING来指定分组和分组的条件,第四步才是决定查询要返回哪些字段,也就是SELECT,再接着才是ORDER BY,最后才是LIMIT。
编写顺序:
select 字段列表 FROM 表名列表 WHERE 条件字段 GROUP BY 分组字段列表 HAVING 分组条件列表 ORDER BY 排序字段列表 LIMIT 分页参数
执行顺序:
FROM 表名列表 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后条件列表 SELECT 字段列表 ORDER BY 排序字段列表 LIMIT 分页参数
案例:sql语句的执行顺序
-- 查询年龄大于15的员工的姓名、年龄、并根据年龄进行升序排列 -- 证明先执行 from employee emp(as可以省略) 再执行where条件 select name,age from employee as emp where emp.age>25 ORDER BY age asc; -- 证明先执行where语句再执行select语句 eage识别不了,下面语句执行不了 select emp.name ename,emp.age eage from employee as emp where eage>25 ORDER BY age asc; -- 证明select是在order之前执行的 select name,age eage from employee as emp where emp.age>25 ORDER BY eage asc;
4.DCL数据库控制语言
-
DCL-介绍
DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户,控制数据库的访问权限。
我们有一个MySQL数据库服务器,DCL主要控制的就是有哪些用户,可以来访问我们这条MySQL服务器,当admin1这个用户去访问这个数据库的时候,它可以操作哪几个数据库,这个属于它的访问权限。admin2来访问的时候它的权限不一样,能访问的数据库也是不一样的。
[外链图片转存中…(img-KgIJ8VdD-1726414099649)]
上面的数据库里面有三个用户,其中它对应的第一个字段是Host,也就是主机,在MySQL当中,我们要去创建一个用户,要去删除一个用户可以通过用户名和host主机地址去同时定位,也就是双主键。
[外链图片转存中…(img-FMhJ24Ef-1726414099650)]
这个主机是指明了只能在哪个主机上面可以访问这个MySQL服务器,localhost代表只能在本机访问,不能远程访问。
案例:
-- 查询用户 use mysql; select * from user; -- 创建用户 admin1,只能在当前主机localhost访问,密码123456; create user 'admin1'@'localhost' IDENTIFIED by '123456'; -- 创建用户 admin2,可以在任意主机访问该数据库,密码123456; %是指的所有主机都能登录 CREATE user 'admin2'@'%' IDENTIFIED by '123456' -- 修改用户admin1的访问密码为1234; alter user 'admin1'@'localhost' IDENTIFIED with mysql_native_password by '1234'; -- 删除admin@localhost用户 drop user 'admin1'@'localhost';
我们有一个MySQL数据库服务器,DCL主要控制的就是有哪些用户,可以来访问我们这条MySQL服务器,当admin1这个用户去访问这个数据库的时候,它可以操作哪几个数据库,这个属于它的访问权限。admin2来访问的时候它的权限不一样,能访问的数据库也是不一样的。
上面的数据库里面有三个用户,其中它对应的第一个字段是Host,也就是主机,在MySQL当中,我们要去创建一个用户,要去删除一个用户可以通过用户名和host主机地址去同时定位,也就是双主键。
这个主机是指明了只能在哪个主机上面可以访问这个MySQL服务器,localhost代表只能在本机访问,不能远程访问。
案例:
-- 查询用户 use mysql; select * from user; -- 创建用户 admin1,只能在当前主机localhost访问,密码123456; create user 'admin1'@'localhost' IDENTIFIED by '123456'; -- 创建用户 admin2,可以在任意主机访问该数据库,密码123456; %是指的所有主机都能登录 CREATE user 'admin2'@'%' IDENTIFIED by '123456' -- 修改用户admin1的访问密码为1234; alter user 'admin1'@'localhost' IDENTIFIED with mysql_native_password by '1234'; -- 删除admin@localhost用户 drop user 'admin1'@'localhost';
-
DCL-管理用户
1.查询用户
USE mysql; SELECT * FROM user;
2.创建用户
create user '用户名'@'主机名' IDENTIFIED BY '密码';
3.修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
4.删除用户
DROP user '用户'@'主机名'
-
注意:
-
主机名可以使用%通配
-
这类SQL开发人员操作的比较少,主要DBA(Database Administrator 数据库管理员)使用。
-- 查询用户 use mysql; select * from user; -- 创建用户 admin1,只能在当前主机localhost访问,密码123456; create user 'admin1'@'localhost' IDENTIFIED by '123456'; -- 创建用户 admin2,可以在任意主机访问该数据库,密码123456; %是指的所有主机都能登录 CREATE user 'admin2'@'%' IDENTIFIED by '123456' -- 修改用户admin1的访问密码为1234; alter user 'admin1'@'localhost' IDENTIFIED with mysql_native_password by '1234'; -- 删除admin@localhost用户 drop user 'admin1'@'localhost';
-
-
DCL-权限控制
使用上面的语句能够创建用户,用户能登录mysql,但是用户不能够访问任何的数据库只能访问一个系统库,原因因为用户创建好了之后没有给用户分配权限。
MySQL中定义了很多种权限,但是常用的就以下几种:
权限 说明 ALL,ALL PRIVILEGES(all privileges) 所有权限 SELECT 查询数据 INSERT 插入数据 UPDATE 修改数据 DELETE 删除数据 ALTER 修改表 DROP 删除数据库/表/视图 CREATE 创建数据库/表 -
DCL-权限控制
1.查询权限
SHOW GRANTS FOR '用户名'@'主机名';
2.授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
注意:如果我们要把所有的数据库和数据库表授予权限,可以直接用* *表示
3.撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
注意:
- 多个权限之间,使用逗号分隔
- 授权时,数据库名和表名可以使用*进行通配
案例:
-- 查询权限 show grants for 'admin2'@'%'; -- 授予restudy这个库下面的所有权限 grant all on restudy.* to 'admin2'@'%'; -- 撤销权限 revoke all on restudy.* from 'admin2'@'%';