1. 首页 > MySQL教程 > 正文

MySQL教程FG010-MySQL基础教程

本文档风哥主要介绍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
# 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命令优化表

风哥提示:在生产环境中,建议使用参数化查询和预编译语句,避免SQL注入攻击。from MySQL:www.itpux.com
GF-MySQL数据库培训文档系列

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息