本文档风哥主要介绍MySQL 8.4的基础教程,包括数据库创建、表管理、数据操作等基本操作。风哥教程参考MySQL官方文档Tutorial等。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 MySQL简介
MySQL是一种开源的关系型数据库管理系统,广泛应用于各种Web应用和企业级应用中。学习交流加群风哥微信: itpux-com
1.2 MySQL架构
MySQL采用客户端-服务器架构,包括MySQL服务器和客户端工具两部分。
1.3 MySQL数据类型
MySQL支持多种数据类型,包括数值类型、字符串类型、日期时间类型等。
Part02-生产环境规划与建议
2.1 数据库设计原则
数据库设计应遵循规范化原则,确保数据的完整性和一致性。
2.2 表结构设计
表结构设计应考虑数据类型、字段长度、索引等因素。
2.3 索引设计
合理设计索引可以提高查询性能,但过多的索引会影响插入和更新操作的性能。
Part03-生产环境项目实施方案
3.1 数据库创建
创建MySQL数据库的基本步骤:
# mysql -u root -p
Enter password: Fgedu123!
# 创建数据库
mysql> CREATE DATABASE fgedudb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.01 sec)
# 查看数据库
mysql> SHOW DATABASES;
+——————–+
| Database |
+——————–+
| fgedudb |
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
5 rows in set (0.00 sec)
# 使用数据库
mysql> USE fgedudb;
Database changed
3.2 表创建与管理
创建和管理MySQL表的基本操作:
mysql> CREATE TABLE fgedu_users (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> name VARCHAR(50) NOT NULL,
-> email VARCHAR(100) UNIQUE NOT NULL,
-> age INT,
-> created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
-> );
Query OK, 0 rows affected (0.02 sec)
# 查看表结构
mysql> DESC fgedu_users;
+————+————–+——+—–+——————-+——————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+——————-+——————-+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| email | varchar(100) | NO | UNI | NULL | |
| age | int | YES | | NULL | |
| created_at | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+————+————–+——+—–+——————-+——————-+
5 rows in set (0.00 sec)
# 修改表结构
mysql> ALTER TABLE fgedu_users ADD COLUMN phone VARCHAR(20);
Query OK, 0 rows affected (0.01 sec)
# 查看修改后的表结构
mysql> DESC fgedu_users;
+————+————–+——+—–+——————-+——————-+
| Field | Type | Null | Key | Default | Extra |
+————+————–+——+—–+——————-+——————-+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| email | varchar(100) | NO | UNI | NULL | |
| age | int | YES | | NULL | |
| created_at | timestamp | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| phone | varchar(20) | YES | | NULL | |
+————+————–+——+—–+——————-+——————-+
6 rows in set (0.00 sec)
# 删除表
mysql> DROP TABLE IF EXISTS fgedu_temp;
Query OK, 0 rows affected, 1 warning (0.00 sec)
3.3 数据操作
MySQL的数据操作包括插入、查询、更新和删除:
mysql> INSERT INTO fgedu_users (name, email, age, phone) VALUES (‘张三’, ‘zhangsan@example.com’, 25, ‘13800138000’);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO fgedu_users (name, email, age, phone) VALUES (‘李四’, ‘lisi@example.com’, 30, ‘13900139000’);
Query OK, 1 row affected (0.00 sec)
# 查询数据
mysql> SELECT * FROM fgedu_users;
+—-+——+——————+——+———————+————-+
| id | name | email | age | created_at | phone |
+—-+——+——————+——+———————+————-+
| 1 | 张三 | zhangsan@example.com | 25 | 2026-04-01 15:00:00 | 13800138000 |
| 2 | 李四 | lisi@example.com | 30 | 2026-04-01 15:00:00 | 13900139000 |
+—-+——+——————+——+———————+————-+
2 rows in set (0.00 sec)
# 更新数据
mysql> UPDATE fgedu_users SET age = 26 WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
# 查询更新后的数据
mysql> SELECT * FROM fgedu_users WHERE id = 1;
+—-+——+——————+——+———————+————-+
| id | name | email | age | created_at | phone |
+—-+——+——————+——+———————+————-+
| 1 | 张三 | zhangsan@example.com | 26 | 2026-04-01 15:00:00 | 13800138000 |
+—-+——+——————+——+———————+————-+
1 row in set (0.00 sec)
# 删除数据
mysql> DELETE FROM fgedu_users WHERE id = 2;
Query OK, 1 row affected (0.00 sec)
# 查询删除后的数据
mysql> SELECT * FROM fgedu_users;
+—-+——+——————+——+———————+————-+
| id | name | email | age | created_at | phone |
+—-+——+——————+——+———————+————-+
| 1 | 张三 | zhangsan@example.com | 26 | 2026-04-01 15:00:00 | 13800138000 |
+—-+——+——————+——+———————+————-+
1 row in set (0.00 sec)
3.4 索引管理
创建和管理MySQL索引的基本操作:
mysql> CREATE INDEX idx_name ON fgedu_users (name);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 创建唯一索引
mysql> CREATE UNIQUE INDEX idx_email ON fgedu_users (email);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 查看索引
mysql> SHOW INDEX FROM fgedu_users;
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| fgedu_users | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | email | 1 | email | A | 1 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | idx_email | 1 | email | A | 1 | NULL | NULL | | BTREE | | |
| fgedu_users | 1 | idx_name | 1 | name | A | 1 | NULL | NULL | | BTREE | | |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
4 rows in set (0.00 sec)
# 删除索引
mysql> DROP INDEX idx_name ON fgedu_users;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 查看删除后的索引
mysql> SHOW INDEX FROM fgedu_users;
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
| fgedu_users | 0 | PRIMARY | 1 | id | A | 1 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | email | 1 | email | A | 1 | NULL | NULL | | BTREE | | |
| fgedu_users | 0 | idx_email | 1 | email | A | 1 | NULL | NULL | | BTREE | | |
+————-+————+———-+————–+————-+———–+————-+———-+——–+——+————+———+—————+
3 rows in set (0.00 sec)
Part04-生产案例与实战讲解
4.1 基本查询示例
MySQL基本查询示例:
mysql> SELECT * FROM fgedu_users;
+—-+——+——————+——+———————+————-+
| id | name | email | age | created_at | phone |
+—-+——+——————+——+———————+————-+
| 1 | 张三 | zhangsan@example.com | 26 | 2026-04-01 15:00:00 | 13800138000 |
+—-+——+——————+——+———————+————-+
1 row in set (0.00 sec)
# 条件查询
mysql> SELECT * FROM fgedu_users WHERE age > 25;
+—-+——+——————+——+———————+————-+
| id | name | email | age | created_at | phone |
+—-+——+——————+——+———————+————-+
| 1 | 张三 | zhangsan@example.com | 26 | 2026-04-01 15:00:00 | 13800138000 |
+—-+——+——————+——+———————+————-+
1 row in set (0.00 sec)
# 排序查询
mysql> SELECT * FROM fgedu_users ORDER BY age DESC;
+—-+——+——————+——+———————+————-+
| id | name | email | age | created_at | phone |
+—-+——+——————+——+———————+————-+
| 1 | 张三 | zhangsan@example.com | 26 | 2026-04-01 15:00:00 | 13800138000 |
+—-+——+——————+——+———————+————-+
1 row in set (0.00 sec)
# 聚合查询
mysql> SELECT COUNT(*) AS total_users, AVG(age) AS avg_age FROM fgedu_users;
+————-+———+
| total_users | avg_age |
+————-+———+
| 1 | 26.0000 |
+————-+———+
1 row in set (0.00 sec)
4.2 数据导入导出
MySQL数据导入导出操作:
# mysqldump -u root -p fgedudb fgedu_users > fgedu_users.sql
Enter password: Fgedu123!
# 查看导出文件
# ls -la fgedu_users.sql
-rw-r–r– 1 root root 1024 Apr 1 15:30 fgedu_users.sql
# 导入数据
# mysql -u root -p fgedudb < fgedu_users.sql
Enter password: Fgedu123!
# 使用SELECT INTO OUTFILE导出数据
mysql> SELECT * FROM fgedu_users INTO OUTFILE ‘/tmp/fgedu_users.txt’ FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’;
Query OK, 1 row affected (0.00 sec)
# 查看导出文件
# cat /tmp/fgedu_users.txt
1,张三,zhangsan@example.com,26,2026-04-01 15:00:00,13800138000
# 使用LOAD DATA INFILE导入数据
mysql> LOAD DATA INFILE ‘/tmp/fgedu_users.txt’ INTO TABLE fgedu_users FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’;
Query OK, 1 row affected, 1 warning (0.00 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 1
Part05-风哥经验总结与分享
5.1 常见问题解答
MySQL基础操作中常见的问题包括:
- 连接失败:检查用户名、密码和网络连接
- 权限不足:确保用户有足够的权限
- 语法错误:检查SQL语句语法
- 性能问题:合理设计索引和查询语句
5.2 最佳实践建议
1. 使用参数化查询:避免SQL注入攻击
2. 合理设计表结构:遵循规范化原则
3. 优化查询语句:使用索引,避免全表扫描
4. 定期备份数据:确保数据安全
5. 监控数据库性能:及时发现和解决性能问题
6. 合理设置参数:根据实际需求调整MySQL参数
7. 定期优化表:使用OPTIMIZE TABLE命令优化表
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
