参考文章1:https://www.bilibili.com/video/BV1Kr4y1i7ru/
参考文章2:https://dhc.pythonanywhere.com/article/public/1/
教程在windows上安装mysql社区版8.0.26版本
windows上安装方法参考视频:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=3
我用的是linux,我就介绍Ubuntu20.04上的安装mysql服务的方法:
首先,打开一个终端窗口。
更新包列表以确保获取最新的软件版本。可以通过运行以下命令来完成这一步:
sudo apt update
安装MySQL服务器,运行以下命令:
sudo apt install mysql-server
在安装完毕后,MySQL服务应该会自动启动。可以使用以下命令来确认MySQL正在运行:
sudo systemctl status mysql
对于初次安装MySQL,需要运行mysql_secure_installation脚本来提高MySQL的安全性。运行以下命令:
sudo mysql_secure_installation
这个脚本将会引导你设置root用户的密码、删除匿名用户、禁止root远程登录,并删除测试数据库。
这个我们就不设置了,反正是调试用,设置太多影响效率
在Ubuntu 20.04中完全卸载MySQL,可以按照以下步骤操作:
首先,需要停止正在运行的MySQL服务。打开终端并输入以下命令:
sudo systemctl stop mysql
然后,使用apt来卸载MySQL。输入以下命令:
sudo apt-get remove --purge mysql-server mysql-client mysql-common
sudo apt-get autoremove
sudo apt-get autoclean
最后,为了确保所有相关的文件和配置都被删除,可以手动删除数据目录。默认情况下,这个目录通常是/var/lib/mysql。但是,应该检查系统以确认正确的位置。删除之前,请确保不再需要其中的任何数据。可以使用以下命令来删除这个目录:
sudo rm -rf /var/lib/mysql
注意:这将永久删除所有MySQL数据库和相关数据,所以在执行此操作前请确保已备份重要数据。
同理,不通过表结构存储的数据库称为非关系型数据库
。
在学习具体的SQL语句之前,先来了解一下SQL语言的通用语法。
--
注释内容 或 #
注释内容/*
注释内容 */
SHOW DATABASES;
SELECT DATABASE();
CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];
示例:
create database itcast;
可以加if not exists
判断选项,这样数据库存在不会创建,同时也不会报错:
create database if not exists itcast;
创建时指定默认字符集(建议使用utf8mb4,占4个字节;而utf8只占3个字节):
create database if not exists itcast3 dafault charset utf8mb4;
当创建数据库时,选择utf8mb4
字符集的原因主要有以下几点:
完整的Unicode支持:utf8mb4
(UTF-8 Multibyte 4)是一个在MySQL中用于表示UTF-8字符的字符集。与早期的utf8
实现相比,它提供了对4字节长的Unicode字符的全面支持。这意味着它可以存储任何标准的Unicode字符。而原始的utf8
实现只支持最多3字节长的字符,无法处理某些特殊字符,例如Emoji表情符号或者某些特殊的汉字。
数据安全性:由于utf8
不能正确处理4字节长的字符,如果试图插入这样的字符,可能会导致数据截断和丢失。使用utf8mb4
可以避免这种情况,确保数据的完整性。
未来兼容性:随着更多的新的Unicode字符和Emoji表情符号的出现,utf8mb4
能够保证未来的兼容性。
因此,为了确保你的数据库能够处理所有类型的Unicode字符,一般建议在创建数据库时使用utf8mb4
字符集。
注意:字符集主要影响文本类型数据,例如 CHAR, VARCHAR, TEXT 等的存储和处理。通常它不会影响非字符串数据类型,如整型、浮点型、日期时间类型等的存储和处理。
DROP DATABASE [ IF EXISTS ] 数据库名;
USE 数据库名;
age tinyint unsigned
score double(4,1)
,表示最长四位有效数字(100.0),然后1表示有1位小数。username varchar(50)
gender char(1)
birthday date
SHOW TABLES;
DESC 表名;
SHOW CREATE TABLE 表名;
示例
show create table tb_user;
上面代码显示的是tb_user
表的创建语句。这个语句包含了表的名称、字段定义、存储引擎和字符集等信息。
具体解释如下:
CREATE TABLE tb_user
:创建名为tb_user
的表。
下面是四个字段的定义:
id
int DEFAULT NULL COMMENT ‘编号’:创建一个名为id
的字段,数据类型为整型(int),默认值为NULL,注释为’编号’。name
varchar(50) DEFAULT NULL COMMENT ‘姓名’:创建一个名为name
的字段,数据类型为可变长字符串(varchar),最大长度为50个字符, 默认值为NULL,注释为’姓名’。age
int DEFAULT NULL COMMENT ‘年龄’:创建一个名为age
的字段,数据类型为整型(int),默认值为NULL,注释为’年龄’。gender
varchar(1) DEFAULT NULL COMMENT ‘性别’:创建一个名为gender
的字段,数据类型为可变长字符串(varchar),最大长度为1个字符, 默认值为NULL,注释为’性别’。ENGINE=InnoDB
:指定表的存储引擎为InnoDB。MySQL支持多种存储引擎,每种存储引擎都有自己的优点和特性,InnoDB是最常用的一种,支持事务处理和行级锁定。
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
:指定表的默认字符集为utf8mb4,排序规则为utf8mb4_0900_ai_ci。字符集决定了表中文本数据的存储和处理方式,而排序规则决定了如何比较字符。
COMMENT='用户表'
:给表添加注释,说明这是一个’用户表’。
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释],
字段2 字段2类型 [COMMENT 字段2注释],
字段3 字段3类型 [COMMENT 字段3注释],
...
字段n 字段n类型 [COMMENT 字段n注释]
)[ COMMENT 表注释 ];
注意:最后一个字段后面没有逗号
create table tb_user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
) comment '用户表';
https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8
示例2
设计一张员工信息表,要求如下:
create table emp (
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
entrydate date comment '入职时间'
) comment '员工表';
把这个粘贴到终端就能添加了。
root@ubuntu:~#
root@ubuntu:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.34-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| myDatabase |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql>
mysql>
mysql> use myDatabase;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql>
mysql>
mysql> select database();
+------------+
| database() |
+------------+
| myDatabase |
+------------+
1 row in set (0.00 sec)
mysql>
mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| tb_user |
+----------------------+
1 row in set (0.00 sec)
mysql>
mysql>
mysql> create table emp (
-> id int comment '编号',
-> workno varchar(10) comment '工号',
-> name varchar(10) comment '姓名',
-> gender char(1) comment '性别',
-> age tinyint unsigned comment '年龄',
-> idcard char(18) comment '身份证号',
-> entrydate date comment '入职时间'
-> ) comment '员工表';
Query OK, 0 rows affected (0.10 sec)
mysql>
mysql> show tables;
+----------------------+
| Tables_in_myDatabase |
+----------------------+
| emp |
| tb_user |
+----------------------+
2 rows in set (0.01 sec)
mysql>
mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| workno | varchar(10) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| gender | char(1) | YES | | NULL | |
| age | tinyint unsigned | YES | | NULL | |
| idcard | char(18) | YES | | NULL | |
| entrydate | date | YES | | NULL | |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
mysql>
https://www.bilibili.com/video/BV1Kr4y1i7ru?p=8
ALTER TABLE ttt ADD fff ttt COMMENT 'xxx';
。MySQL中的字段可以在创建表时创建,也可以在创建表后单独添加ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
例:ALTER TABLE emp ADD nickname varchar(20) COMMENT '昵称';
# 列出所有数据库
show databases;
# 切换到指定数据库
use myDatabase;
# 查看当前使用的数据库
select database();
# 列出当前数据库所有表
show tables;
# 查看指定表结构
desc tb_user;
# 为指定表增加指定字段
alter table tb_user add email varchar(255);
# 查看指定表结构
desc tb_user;
ALTER TABLE 表名 MODIFY
)(主要用于修改列的数据类型或更改默认值等。它只能用来修改已经存在的列的属性,不能修改列的名称)ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
ALTER TABLE 表名 CHANGE
)(不仅可以修改列的数据类型或更改默认值,还可以更改列的名称)ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
ALTER TABLE emp CHANGE nickname username varchar(30) COMMENT '昵称';
ALTER TABLE 表名 DROP 字段名;
)ALTER TABLE 表名 DROP 字段名;
ALTER TABLE 表名 RENAME TO 新表名
)ALTER TABLE 表名 RENAME TO 新表名
DROP TABLE [IF EXISTS] 表名;
)DROP TABLE [IF EXISTS] 表名;
TRUNCATE TABLE 表名
)(可用于清理表数据)TRUNCATE TABLE 表名;
表中
的数据进行增删改INSERT
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
insert into employee(id,workno,name,gender,age,idcard,entrydate) values(1,'1','Itcast','男',10,'123456789012345678','2000-01-01');
用DataGrip:
点击表右键 --> New --> Query Console:
将上面的sql语句粘贴进去,全选sql语句(不然软件不知道你要执行哪一句),然后点击运行:
查询表数据,双击表即可查看,或者执行select * from xxx表
查询表数据:
执行:
select * from emp;
INSERT INTO 表名 VALUES (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...);
insert into emp values(3,'3','Itcast','男',10,'12345','2000-01-01');
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
示例:
insert into emp values(4,'4','Itcast','男',10,'123456789012345681','2000-01-01'),(5,'5','Itcast','男',10,'123456789012345682','2000-01-01');
注意用逗号,
分隔不同条(行)的数据。
UPDATE
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];
(注意:如果不带where条件修改的是整张表的数据)UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];
DELETE
DELETE FROM 表名 [ WHERE 条件 ];
(不带where条件将会删除整张表数据)DELETE FROM 表名 [ WHERE 条件 ];
语法:
SELECT
字段列表
FROM
表名字段
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后的条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
数据准备
表结构:
create table emp (
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
workaddress varchar(50) comment '工作地址',
entrydate date comment '入职时间'
) comment '员工表';
表数据:
INSERT INTO emp (id, workno, name, gender, age, idcard,workaddress, entrydate)
VALUES
(1,'1','柳岩','女',20,'123456789012345678' ,'北京','2000-01-01'),
(2,'2','张无忌','男',18,'123456789012345670' ,'北京' ,'2005-09-01'),
(3,'3','韦一笑','男',38,'123456789712345670' ,'上海' ,'2005-08-01'),
(4,'4','赵敏','女',18,'123456757123845670' ,'北京' ,'2009-12-01'),
(5,'5','小昭','女',16,'123456769012345678' ,'上海' ,'2007-07-01'),
(6,'6','杨道','男',28,'12345678931234567X' ,'北京' ,'2006-01-01'),
(7,'7','范瑶','男',40,'123456789212345670' ,'北京' ,'2005-05-01'),
(8,'8','黛绮丝','女',38,'123456157123645670' ,'天津' ,'2015-05-01'),
(9,'9','范凉凉','女',45,'123156789012345678' ,'北京' ,'2010-04-01'),
(10,'10','陈友谅','男',53,'123456789012345670' ,'上海' ,'2011-01-01'),
(11,'11','张士诚','男',55,'123567897123465670' ,'江苏' ,'2015-05-01'),
(12,'12','常遇春','男',32,'123446757152345670' ,'北京' ,'2004-02-01'),
(13,'13','张三丰','男',88,'123656789012345678' ,'江苏' ,'2020-11-01'),
(14,'14','灭绝','女',65,'123456719012345670' ,'西安' ,'2019-05-01'),
(15,'15','胡青牛','男',70,'12345674971234567X' ,'西安' ,'2018-04-01'),
(16,'16','周芷若','女',18,null ,'北京' ,'2012-06-01');
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;
(建议开发中不要直接写*
)SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
或者SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;
SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;
SELECT DISTINCT 字段列表 FROM 表名;
SELECT DISTINCT 字段列表 FROM 表名;
ESCAPE
关键字定义转义字符SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
/
之后的_
不作为通配符
在SQL查询中,LIKE操作符用于搜索某列的模式。其中,百分号(%)和下划线(_)是特殊字符。百分号表示任意数量的字符,包括零字符;而下划线代表一个单独的任意字符。
有时,我们可能需要搜索包含这些特殅字符的数据。为了使这些特殊字符被识别为普通字符,我们需要使用ESCAPE关键字。它定义了一个转义字符,让你能够在LIKE模式中搜索百分号或下划线。
在你给出的例子中,
ESCAPE '/'
声明了斜杠(/
)作为转义字符。然后,在WHERE子句中,name LIKE '/_张三'
表示搜索以“张三”开头且前面有任意一个字符的所有名字。因此,/_张三
匹配到的可能是“1张三”,“a张三”等等。总的来说,加上
ESCAPE '/'
是为了明确指定在该查询中,我们希望把斜杠(/
)视为转义字符,使得在LIKE模式中可以正确解析其后的下划线。
WHERE
关键字SELECT 字段列表 FROM 表名 WHERE 条件列表;
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN … AND … | 在某个范围内(含最小、最大值) |
IN(…) | 在in之后的列表中的值,多选 |
LIKE 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
IS NULL | 是NULL |
逻辑运算符 | 功能 |
---|---|
AND 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者(多个条件任意一个成立) |
NOT 或 ! | 非,不是 |
# 查找年龄等于20的员工信息
select * from emp where age = 20;
# 查找年龄等于20的员工信息
select * from emp where age < 20;
# 查找身份证号为null的员工信息
select * from emp where idcard is null;
# 查找身份证号不是null的员工信息
select * from emp where idcard is not null;
# 查找年龄不等于88的员工信息
select * from emp where age != 88;
select * from emp where age <> 88;
# 查询年龄在15到20岁之间的员工信息
select * from emp where age > 15 and age < 20;
select * from emp where age > 15 && age < 20;
# 注意between为闭区间
select * from emp where age between 15 and 20;
# 查询性别为女且年龄小于25岁的员工
select * from emp where gender = '女' and age < 25;
select * from emp where age in(18,19,40);
# 查询姓名为两个字的员工信息
select * from emp where name like '__';
# 查询身份证号最后一位为X的员工信息
select * from emp where emp.idcard like '%X';
select * from emp where emp.idcard like '_________________X';
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
SELECT 聚合函数(字段列表) FROM 表名;
-- 统计企业员工数量(注意:不会统计字段值为null的行,所以不要把可能为null的字段来用于统计)
SELECT count(*) FROM emp;
SELECT count(id) FROM emp;
-- 统计员工的平均年龄
SELECT avg(age) FROM emp;
-- 统计员工的最大年龄
SELECT max(age) FROM emp;
-- 统计员工的最小年龄
SELECT min(age) FROM emp;
-- 统计西安地区的年龄之和
SELECT sum(age) FROM emp where workaddress = '西安';
GROUP BY
关键字、HAVING
关键字(可用AS
关键字设置别名)SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];
-- 根据性别分组,统计男性和女性数量(只显示分组数量,不显示哪个是男哪个是女)
select count(*) from emp group by gender;
-- 根据性别分组,统计男性和女性数量(会显示哪个是男,哪个是女)
select gender, count(*) from emp group by gender;
-- 根据性别分组,统计男性和女性的平均年龄
select gender, avg(age) from emp group by gender;
-- 统计根据工作地址分组的人数
select workaddress, count(*) from emp group by workaddress;
-- 统计年龄小于45,根据工作地址分组的人数
select workaddress, count(*) from emp where age < 45 group by workaddress;
-- 统计年龄小于45,根据工作地址分组的人数,输出员工数量大于等于3的组(可设置别名as,as关键字可省略)
select workaddress, count(*) from emp where age < 45 group by workaddress having count(*) >= 3;
select workaddress, count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;
select workaddress, count(*) as address_count from emp where age < 45 group by workaddress having address_count >= 3;
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
-- 根据年龄升序排序
SELECT * FROM emp ORDER BY age ASC;
SELECT * FROM emp ORDER BY age;
-- 根据入职时间降序排序
SELECT * FROM emp ORDER BY entrydate desc ;
-- 两字段排序,根据年龄升序排序,入职时间降序排序
SELECT * FROM emp ORDER BY age ASC, entrydate DESC;
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
-- 查询第一页数据,展示10条
SELECT * FROM emp LIMIT 0, 10;
-- 查询第一页时,索引可省略
SELECT * FROM emp LIMIT 10;
-- 查询第二页
SELECT * FROM emp LIMIT 10, 10;
注意,第五个问题可能有歧义:
它可能有以下两种理解:
1、查询emp表中性别为男,且年龄在20到40岁(含20和40)的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
2、1、查询emp表中性别为男,且年龄在20到40岁(含20和40),年龄升序排序,年龄相同按入职时间升序排序,获取前5个员工信息。
对于第一种理解,“查询emp表中性别为男,且年龄在20到40岁(含20和40)的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。” 因为SQL的限制,不能直接先取前5条然后再排序,但可以通过子查询实现,如下:
SELECT *
FROM (
SELECT *
FROM emp
WHERE sex = '男' AND age BETWEEN 20 AND 40
LIMIT 5
) AS subquery
ORDER BY age ASC, join_time ASC;
对于第二种理解,“查询emp表中性别为男,且年龄在20到40岁(含20和40),年龄升序排序,年龄相同按入职时间升序排序,获取前5个员工信息。” 这个问题是先排序,然后取前五个记录。对应的SQL语句为:
SELECT *
FROM emp
WHERE sex = '男' AND age BETWEEN 20 AND 40
ORDER BY age ASC, join_time ASC
LIMIT 5;
DQL
语句编写顺序和执行顺序DQL
编写顺序:SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
-- 查询年龄大于15的员工的姓名、年龄,并根据年龄进行升序排序
select name,age from emp where age > 15 order by age asc ;
-- 验证执行顺序
select e.name e_name,e.age e_age from emp e where e.age > 15 order by e_age asc ;
USE mysql;
SELECT * FROM user;
localhost,root的含义是这个root只能通过本机访问数据库,无法通过远程方式访问数据库
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
DROP USER '用户名'@'主机名';
-- 创建用户arnoldtest1,只能在当前主机localhost访问,密码123456
# create user 'arnoldtest1'@'localhost' identified by 'Reaishenghuo';
-- 提示:[2023-10-02 02:07:26] [HY000][1819] Your password does not satisfy the current policy requirements
-- 用:SHOW VARIABLES LIKE 'validate_password%';查看当前密码规则
SHOW VARIABLES LIKE 'validate_password%';
# validate_password.changed_characters_percentage,0
# validate_password.check_user_name,ON
# validate_password.dictionary_file,""
# validate_password.length,8
# validate_password.mixed_case_count,1
# validate_password.number_count,1
# validate_password.policy,MEDIUM
# validate_password.special_char_count,1
CREATE USER 'arnoldTest1'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';
-- 创建用户arnoldTest1,能在任意主机访问
create user 'arnoldTest1'@'%' identified by 'Reai#2023shenghuo';
-- 修改密码
alter user 'arnoldTest1'@'localhost' identified with mysql_native_password by 'Reai#2024shenghuo';
-- 删除用户
drop user 'arnoldTest1'@'localhost';
drop user 'arnoldTest1'@'%';
SQL
开发人员操作的比较少,主要是DBA(Database Administrator数据库管理员)
使用权限 | 说明 |
---|---|
ALL, ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
更多权限请看权限一览表
SHOW GRANTS FOR
SHOW GRANTS FOR '用户名'@'主机名';
GRANT
关键字GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
REVOKE
关键字REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
*
进行通配,代表所有
-- 创建用户
CREATE USER 'arnoldTest'@'localhost' IDENTIFIED BY 'Reai#2023shenghuo';
-- 查询权限
SHOW GRANTS FOR 'arnoldTest'@'localhost';
-- 授予权限(授予'arnoldTest'@'localhost'用户对myDatabase所有表的所有权限)
grant all on myDatabase.* to 'arnoldTest'@'localhost' ;
-- 撤销权限
revoke all on myDatabase.* from 'arnoldTest'@'localhost' ;
-- 删除用户
drop user 'arnoldTest'@'localhost';
不知道为啥授予和撤销权限的时候,老提示:
myDatabase> grant all on myDatabase.* to 'arnoldTest'@'localhost'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:57] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
myDatabase> revoke all on myDatabase.* from 'arnoldTest'@'localhost'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
[2023-10-02 02:44:59] [42000][1044] Access denied for user 'root'@'%' to database 'myDatabase'
莫名其妙的问题,以后遇到再说了!。。。