一、MySQL介绍和安装
一、MySQL简介
什么是 MySQL?
MySQL 是目前最流行的开源关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发(现属于 Oracle)。它使用结构化查询语言(SQL)进行数据的访问和管理,具备高性能、高可靠性和易使用等特点,广泛应用于 Web 开发、数据分析、ERP 系统等各种场景。
MySQL 的核心特点:
- 开源免费:大多数功能免费开放,可商用;
- 跨平台支持:可在 Windows、Linux、macOS 等系统运行;
- 高性能和可扩展性:适用于中小型项目也能支撑大型系统;
- 安全性强:提供用户权限管理和数据加密机制;
- 与流行语言无缝集成:支持 PHP、Java、Python、Node.js 等。
二、MySQL 安装流程(以 Windows 为例)
1:下载安装包
- 访问官网: 👉 dev.mysql.com/downloads/
- 选择 "MySQL Installer for Windows" 下载适合你操作系统的安装程序(推荐使用带有 GUI 的 Full 版本)。

2:启动安装程序
- 双击运行安装包
- 选择安装类型(推荐 Server only)其他的可以自行学习了解
- 安装仅安装mysql服务

继续执行

执行后点击next

直到出现界面, 这里表示用哪个协议链接,端口号哪个,默认即可

继续next 默认强类型密码就行

继续next 设置密码可以自己搭配系统会提示强弱 add user可以新建其他用户,这里看你需要。我这里继续next Linxiroot.123

继续next即可直到最后出现下一个界面

出现最后一个页面点击执行即可

然后出现finish按钮,出现这个界面

后续我不需要进行配置就直接略过next了,然后再点击finish

默认已经启动中,但是可以查看

安装完成

可以使用这个来查看数据库;输入密码后可以输入show databases;来查看

MySQL默认的数据库:
- information_schema:信息数据库,其中包括MySQL在维护的其他数据库、表、列、访问权限等信息;
- performance_schema:性能数据库,记录着MySQLServer数据库引擎在运行过程中的一些资源消耗相关的信息;
- mysql:用于存储数据库管理者的用户信息、权限信息以及一些日志信息等
- sys:相当于是一个简易版的performance schema,将性能数据库中的数据汇总成更容易理解的形式;
三、安装过程中的常见问题及解决方法
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 无法连接到 MySQL 服务 | 服务未启动 | 在"服务"中手动启动 MySQL |
| 忘记 root 密码 | 权限问题 | 重置密码或重新初始化数据库 |
| 端口被占用 | 3306端口被占用 | 修改为其他端口,如 3307,并在配置中同步调整 |
二、MySQL连接和GUI
验证 MySQL 是否安装成功
方法一:命令行登录
这个方式需要先进行环境变量配置 
配置后验证一下

bash
mysql -u root -p
输入密码后,如果进入 MySQL 提示符,则说明安装成功。
方法二:使用 GUI 工具(navicat)
打开工具,配置连接参数(主机名、端口、用户名、密码),点击"连接"即可。
三、SQL语句和数据类型
在数据库管理中,SQL(结构化查询语言)是用于与关系型数据库交互的标准语言。SQL语句允许用户进行数据操作、查询、更新、删除等操作。
SQL语句的常用规范:
- 通常关键字使用大写的,比如CREATE、TABLE、SHOW等等:
- 一条语句结束后,需要以
;结尾 - 如果遇到关键字作为表明或者字段名称,可以使用
反引号包裹;
SQL语句的基本结构
SQL语句一般包括以下几类操作:
- 数据查询(SELECT)
- 数据插入(INSERT)
- 数据更新(UPDATE)
- 数据删除(DELETE)
- 创建表(CREATE TABLE)
- 修改表结构(ALTER TABLE)
- 删除表(DROP TABLE)
常见的SQL数据类型
在SQL中,每个列都有一个数据类型,它决定了该列可以存储什么类型的数据。以下是一些常见的数据类型:
1. 数值类型
- INT: 整数类型。可以存储没有小数部分的数字。
- DECIMAL(p, s) : 精确的定点数,
p表示总位数,s表示小数位数。 - FLOAT: 浮动小数点数。
- DOUBLE: 双精度浮动小数点数,精度高于FLOAT。
2. 字符串类型
- CHAR(n) : 固定长度字符串,长度为
n。 - VARCHAR(n) : 可变长度字符串,最多存储
n个字符。 - TEXT: 用于存储较长的文本数据。
- LONGTEXT: 用于存储非常大的文本数据。
3. 日期和时间类型
- DATE : 存储日期,格式为
YYYY-MM-DD。 - TIME : 存储时间,格式为
HH:MM:SS。 - DATETIME : 存储日期和时间,格式为
YYYY-MM-DD HH:MM:SS。 - TIMESTAMP: 用于存储时间戳,通常用于记录数据的修改时间。
4. 布尔类型
- BOOLEAN : 用于存储
TRUE或FALSE值。
5. 二进制类型
- BLOB: 存储二进制数据(如图片、文件等)。
6. 其他数据类型
- ENUM: 枚举类型,用于限制列的值只能是预定义的一组值中的一个。
- SET: 用于存储一组独立的值,可以包含多个值,但每个值只能选择一次。
四、SQL语句-DDL语句
DDL(Data Definition Language)是用于定义和修改数据库结构的语言部分,主要包括创建、修改、删除数据库对象,如表、视图、索引等。 DDL(Data Definition Language,数据定义语言)是SQL的一个子集,用于定义、修改和删除数据库中的结构性对象,如表、视图、索引等。常见的DDL语句包括 CREATE、ALTER、DROP 等,它们通常不涉及数据的操作,而是用于数据库结构的定义和修改。
常见的DDL语句:
CREATE:用于创建数据库对象。ALTER:用于修改数据库对象。DROP:用于删除数据库对象。TRUNCATE:用于删除表中的所有数据。RENAME:用于重命名数据库对象。COMMENT:用于为数据库对象添加注释。
1. CREATE 语句
CREATE 语句用于创建新的数据库对象,如数据库、表、视图、索引等。它是数据库的最基本的定义语句。
示例:
-
创建数据库:
sqlCREATE DATABASE school; --推荐使用下面这一种方式因为上面已经存在数据库的话会提示报错。 CREATE DATABASE IF NOT EXISTS test_study; --你也可以执行创建时候编码格式一般就是默认即可。 -
创建表:
sqlCREATE TABLE students ( student_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), birth_date DATE ); -
创建索引:
sqlCREATE INDEX idx_student_name ON students (last_name, first_name); -
创建视图:
sqlCREATE VIEW student_view AS SELECT student_id, first_name, last_name FROM students WHERE birth_date > '2000-01-01';
2. ALTER 语句
ALTER 语句用于修改已经存在的数据库对象的结构,比如增加、删除列,修改列的数据类型等。
示例:
-
添加列:
sqlALTER TABLE students ADD email VARCHAR(100); -
删除列:
sqlALTER TABLE students DROP COLUMN email; -
修改列的数据类型:
sqlALTER TABLE students MODIFY COLUMN first_name VARCHAR(100); -
重命名表:
sqlALTER TABLE students RENAME TO alumni;
3. DROP 语句
DROP 语句用于删除数据库中的对象。执行 DROP 后,数据和结构会永久丢失,因此在使用时需要非常小心。
示例:
-
删除数据库:
sqlDROP DATABASE school; --推荐加上条件更完善 DROP DATABASE IF EXISTS test_study; -
删除表:
sqlDROP TABLE students; -
删除索引:
sqlDROP INDEX idx_student_name; -
删除视图:
sqlDROP VIEW student_view;
4. TRUNCATE 语句
虽然 TRUNCATE 语句不是严格意义上的DDL语句,但它常被归类于DDL,因为它主要用于删除表中的所有数据,而不涉及数据的逐行删除。它比 DELETE 快,因为它不生成日志和触发器。
示例:
sql
TRUNCATE TABLE students;
5. 其他 DDL 语句
-
RENAME 语句:重命名数据库对象(如表、列等)。
sqlRENAME TABLE old_table TO new_table; -
COMMENT 语句:为数据库对象添加注释。
sqlCOMMENT ON COLUMN students.first_name IS '学生的名字';
6. 总结
DDL语句是数据库管理中必不可少的部分,主要负责数据库对象的定义、修改和删除。与DML(数据操作语言)不同,DDL主要操作数据库结构,而非数据本身。
五、SQL语句-DML语句
DML(Data Manipulation Language,数据操作语言)
DML语句允许用户查询、插入、更新和删除数据库中的数据。DML语句的执行不直接影响数据库的结构(如表、索引等),只会影响数据本身。
常见的DML语句有以下几种:
- SELECT --- 查询数据
- INSERT --- 插入数据
- UPDATE --- 更新数据
- DELETE --- 删除数据
下面将分别介绍这些DML语句。
1. SELECT 语句
SELECT语句用于从一个或多个表中查询数据,可以通过不同的条件进行筛选和排序。
示例:
sql
SELECT * FROM employees;
这条语句查询employees表中的所有数据。
常见用法:
- 查询指定列:
sql
SELECT name, salary FROM employees;
- 带条件的查询:
sql
SELECT * FROM employees WHERE department = 'HR';
- 排序查询结果:
sql
SELECT * FROM employees ORDER BY salary DESC;
- 限制返回的记录数:
sql
SELECT * FROM employees LIMIT 10;
2. INSERT 语句
INSERT语句用于向数据库表中插入新的数据行。
示例:
sql
INSERT INTO employees (name, department, salary)
VALUES ('John Doe', 'IT', 60000);
批量插入数据:
sql
INSERT INTO employees (name, department, salary)
VALUES
('Alice Smith', 'Finance', 70000),
('Bob Johnson', 'HR', 55000),
('Charlie Brown', 'IT', 65000);
3. UPDATE 语句
UPDATE语句用于更新表中已存在的数据。
示例:
sql
UPDATE employees
SET salary = 75000
WHERE name = 'John Doe';
这条语句将employees表中name为"John Doe"的记录的salary更新为75000。
更新多个字段:
sql
UPDATE employees
SET salary = 80000, department = 'Marketing'
WHERE name = 'Alice Smith';
4. DELETE 语句
DELETE语句用于从表中删除一条或多条数据记录。
示例:
sql
DELETE FROM employees WHERE name = 'John Doe';
这条语句会删除employees表中name为"John Doe"的记录。
删除所有数据:
sql
DELETE FROM employees;
注意 :
DELETE会删除记录,但不会删除表结构;如果需要删除表结构,应该使用DROP语句。
DML语句的事务控制
在执行DML语句时,通常会涉及到事务(Transaction)的概念。事务是一组要么全部执行,要么全部不执行的操作。SQL提供了事务控制语句,帮助确保数据的完整性和一致性:
- COMMIT:提交事务,使得所有更改持久化。
- ROLLBACK:回滚事务,撤销自上次提交以来的所有更改。
- SAVEPOINT:设置事务中的保存点,可以在之后进行回滚。
示例:
sql
BEGIN;
UPDATE employees SET salary = 90000 WHERE name = 'Charlie Brown';
-- 发现错误,撤销
ROLLBACK;
小结
DML语句是数据库操作的核心,它提供了对数据库数据的增、删、改、查功能。掌握DML语句的使用,可以帮助你高效地进行数据库的管理和操作。在实际应用中,DML语句通常与事务控制一起使用,以保证数据操作的安全性和一致性。
六、SQL语句-DQL语句(重要)
DQL(Data Query Language)是SQL中的一种子语言,DQL语句是进行数据库查询操作的核心部分
DQL主要包含 SELECT 语句,它允许用户从数据库表中检索数据,可以根据条件筛选数据,排序,限制返回的数据数量等。
常见的DQL操作如下:
SELECT:查询数据FROM:指定数据来源的表WHERE:设置查询条件ORDER BY:对结果进行排序GROUP BY:对结果进行分组HAVING:对分组后的数据进行筛选
常用的DQL操作
-
简单查询 使用
SELECT语句从一个表中查询所有数据。sqlSELECT * FROM employees;这里,
*表示查询该表中的所有列。 -
查询指定列 如果只想查询表中的部分列,可以指定列名。
sqlSELECT name, age, salary FROM employees; -
条件查询 使用
WHERE子句来筛选符合条件的数据。sqlSELECT * FROM employees WHERE age > 30;该语句将查询年龄大于30岁的员工。
-
逻辑运算符
AND、OR和NOT运算符可以组合多个条件进行查询。sqlSELECT * FROM employees WHERE age > 30 AND salary > 5000; -
排序查询 使用
ORDER BY子句对查询结果进行排序。可以使用ASC(升序)或DESC(降序)指定排序方式。sqlSELECT * FROM employees ORDER BY salary DESC;该查询会按薪水降序排序员工。
-
限制返回结果的数量 使用
LIMIT子句来限制返回的结果行数。sqlSELECT * FROM employees LIMIT 5;该查询将返回前5条员工数据。
-
分组查询 使用
GROUP BY子句来对数据进行分组,并且通常结合COUNT、SUM、AVG等聚合函数一起使用。sqlSELECT department, COUNT(*) FROM employees GROUP BY department;该查询将按部门分组,统计每个部门的员工数量。
-
过滤分组结果 使用
HAVING子句来对分组后的数据进行进一步筛选。注意,HAVING是对GROUP BY子句后的结果进行筛选的,而WHERE是对原始数据进行筛选的。sqlSELECT department, COUNT(*) FROM employees GROUP BY department HAVING COUNT(*) > 10;该查询将返回员工人数超过10人的部门。
-
联合查询 使用
UNION或UNION ALL将多个查询结果进行合并。UNION会去重,而UNION ALL会返回所有结果,包括重复的。sqlSELECT name FROM employees WHERE age > 30 UNION SELECT name FROM employees WHERE salary > 5000; -
子查询 子查询是嵌套在主查询中的查询语句,可以用于复杂查询。
sqlSELECT name FROM employees WHERE department = (SELECT department FROM employees WHERE name = 'John');该查询将返回与员工 'John' 同一部门的所有员工的姓名。
DQL语句的示例
示例1:查询某一特定条件的数据
sql
SELECT name, age FROM employees WHERE salary > 6000;
这个查询会返回所有薪水超过6000的员工的姓名和年龄。
示例2:查询并排序数据
sql
SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 10;
这个查询会返回薪水最高的前10位员工。
示例3:使用聚合函数
sql
SELECT department, AVG(salary) AS average_salary FROM employees GROUP BY department;
该查询会按部门分组,并计算每个部门的平均薪水。
示例4:使用HAVING子句过滤分组数据
sql
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department HAVING COUNT(*) > 5;
这个查询会返回员工数量大于5的部门。
四、总结
DQL语句主要用于从数据库中查询数据,常见的查询操作包括选择列、添加条件、排序、分组、限制结果等。通过灵活使用 SELECT 语句和不同的子句,可以实现各种复杂的数据查询需求。在实际工作中,理解并掌握这些DQL操作,可以帮助我们更高效地获取和分析数据。
七 、SQL语句-DCL语句
DCL(Data Control Language):数据控制语言;对数据库、表格的权限进行相关访问控制操作,
常见的 DCL 语句包括 GRANT 和 REVOKE。
1. GRANT 语句
GRANT 语句用于将权限授予用户或角色。可以授予的权限包括数据库操作权限(如:SELECT、INSERT、UPDATE、DELETE)以及数据库结构权限(如:CREATE、ALTER、DROP)。
1.1 GRANT 语法
sql
GRANT 权限类型 ON 数据库对象 TO 用户;
- 权限类型 :指定授予用户的权限类型,例如
SELECT、INSERT、UPDATE、DELETE等。 - 数据库对象:指定授予权限的对象,通常是数据库、表、视图等。
- 用户:指定要授予权限的数据库用户。
1.2 示例
-
授予 SELECT 权限给用户:
sqlGRANT SELECT ON employees TO 'john'@'localhost'; -
授予用户对表的所有权限:
sqlGRANT ALL PRIVILEGES ON employees TO 'admin'@'localhost'; -
授予用户多个权限:
sqlGRANT SELECT, INSERT, UPDATE ON employees TO 'manager'@'localhost'; -
授予用户权限,并使其立即生效:
sqlGRANT SELECT ON *.* TO 'user1'@'localhost'; FLUSH PRIVILEGES; -
授予对所有数据库的所有权限:
sqlGRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;这条语句授予
admin用户对所有数据库的所有权限,并且WITH GRANT OPTION允许用户将这些权限再授予其他用户。
2. REVOKE 语句
REVOKE 语句用于撤销之前授予的权限。与 GRANT 语句相反,REVOKE 会撤销对数据库用户的访问权限。
2.1 REVOKE 语法
sql
REVOKE 权限类型 ON 数据库对象 FROM 用户;
- 权限类型:要撤销的权限类型。
- 数据库对象:指定撤销权限的对象。
- 用户:指定要撤销权限的用户。
2.2 示例
-
撤销用户对表的 SELECT 权限:
sqlREVOKE SELECT ON employees FROM 'john'@'localhost'; -
撤销多个权限:
sqlREVOKE SELECT, INSERT ON employees FROM 'manager'@'localhost'; -
撤销对所有数据库的所有权限:
sqlREVOKE ALL PRIVILEGES ON *.* FROM 'admin'@'localhost'; -
撤销权限后刷新权限表:
sqlREVOKE ALL PRIVILEGES ON *.* FROM 'user1'@'localhost'; FLUSH PRIVILEGES;
3. SHOW GRANTS 语句
SHOW GRANTS 语句用于显示当前数据库用户的权限。通过该语句,管理员可以查看某个用户在数据库中的所有权限。
3.1 SHOW GRANTS 语法
sql
SHOW GRANTS FOR 用户;
3.2 示例
sql
SHOW GRANTS FOR 'admin'@'localhost';
此语句将返回用户 admin 在数据库中的所有权限列表。
4. 权限的类型
常见的权限类型包括:
- SELECT:允许查询数据库表。
- INSERT:允许在表中插入数据。
- UPDATE:允许更新表中的数据。
- DELETE:允许删除表中的数据。
- CREATE:允许创建新的数据库对象(如表、视图、索引等)。
- DROP:允许删除数据库对象(如表、视图等)。
- ALTER:允许修改数据库对象(如修改表结构)。
- INDEX:允许创建或删除索引。
- EXECUTE:允许执行存储过程或函数。
- ALL PRIVILEGES:授予所有权限。
5. WITH GRANT OPTION
在授予权限时,可以使用 WITH GRANT OPTION 来允许授予者将其拥有的权限再次授予给其他用户。只有具备此选项的用户才能继续授予其他用户权限。
示例:
sql
GRANT SELECT, INSERT ON employees TO 'user1'@'localhost' WITH GRANT OPTION;
该语句授予 user1 用户对 employees 表的 SELECT 和 INSERT 权限,并允许 user1 将这些权限授予其他用户。
6. FLUSH PRIVILEGES
在修改用户权限(例如使用 GRANT 或 REVOKE)后,通常需要执行 FLUSH PRIVILEGES 来刷新权限缓存,使得新的权限立即生效。
示例:
sql
FLUSH PRIVILEGES;
7. DCL 语句的作用
- 权限控制:DCL 语句主要用于数据库安全管理,确保不同用户对数据库的访问权限合理分配,防止数据泄露、篡改等问题。
- 数据访问控制:通过授予或撤销特定权限,可以控制用户可以执行哪些操作,如查询数据、插入数据、删除数据等。
- 灵活性 :
WITH GRANT OPTION使得权限管理更为灵活,允许用户将自己获得的权限转授权给其他用户。
8. 总结
- DCL 语句 主要包括
GRANT和REVOKE,用于控制数据库用户的权限。 GRANT:授予权限,能够指定用户对数据库对象的访问权限。REVOKE:撤销权限,用于取消用户对某个数据库对象的访问权限。- 权限管理:DCL 语句是确保数据库安全、避免非法访问和操作的重要工具。
使用 DCL 语句时,数据库管理员应谨慎授予权限,确保每个用户仅能访问其需要的数据和功能,避免权限过大导致潜在的安全风险。