MySQL数据库零基础入门教程:从安装配置到数据查询全掌握
MySQL数据库零基础入门教程:从安装配置到数据查询全掌握
引言
MySQL 是最流行的开源关系型数据库,广泛应用于互联网、电子商务和数据分析领域。本教程面向零基础读者,涵盖环境搭建、核心操作、表设计与查询、性能优化、备份恢复和实战案例,助你快速掌握 MySQL 核心技能。
目录
- 环境准备
- 安装与配置
- 基础操作
- 表结构设计
- 核心查询语句
- 进阶与事务
- 索引与性能优化
- 备份与恢复
- 常用工具
- 实战示例
- 总结与延伸
1. 环境准备
- 系统:Windows 10/11、Ubuntu 18.04+、CentOS 7+
- 硬件:CPU ≥2核,内存 ≥2GB,硬盘 ≥1GB 空间
- 网络:建议稳定网络,方便下载和远程访问
基本概念:数据库、表、行/列、主键/外键、索引、SQL
2. 安装与配置
2.1 Windows
-
前往官方(dev.mysql.com)下载社区版 MSI 安装包。
-
选择
Developer Default
或Server only
。 -
配置向导:
- Server Type:Standalone,端口 3306
- Authentication:Use Strong Password Encryption
- Accounts:设置 root 密码,可添加只读/写用户
- Windows Service:开机自启
-
验证:
mysql -u root -p
2.2 Ubuntu
sudo apt update
tudo apt install mysql-server
sudo mysql_secure_installation
sudo systemctl enable --now mysql
2.3 核心配置
-
文件:
/etc/mysql/my.cnf
或my.ini
-
建议:
bind-address=127.0.0.1
(仅本地)或0.0.0.0
(允许远程)innodb_buffer_pool_size=物理内存70%
max_connections=300
- 开启
slow_query_log
2.4 安全加固
-- 禁用匿名,删除测试库
sudo mysql_secure_installation
-- 创建应用用户
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongP@ssw0rd';
GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO 'app'@'%';
FLUSH PRIVILEGES;
3. 基础操作
3.1 服务管理
- Windows:
net start mysql
/net stop mysql
- Linux:
sudo systemctl start mysql
/stop mysql
3.2 登录与退出
mysql -u 用户名 -p
exit;
3.3 数据库与表
-- 创建/删除数据库
CREATE DATABASE mydb CHARSET utf8mb4;
DROP DATABASE mydb;
USE mydb;-- 创建/删除表
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
DROP TABLE users;
4. 表结构设计
- 数据类型:INT, BIGINT, DECIMAL, VARCHAR, TEXT, DATE, DATETIME, BOOLEAN
- 主键&外键:保证数据唯一性和关联完整性
- 索引策略:BTREE、HASH、覆盖索引,用于加速查询
- 范式:1NF(原子性)、2NF(无部分依赖)、3NF(无传递依赖)
示例:用户表 & 订单表
CREATE TABLE users (id INT PK AUTO_INCREMENT, name VARCHAR(50));
CREATE TABLE orders (id INT PK AUTO_INCREMENT, user_id INT,amount DECIMAL(10,2),FOREIGN KEY (user_id) REFERENCES users(id)
);
5. 核心查询语句
CRUD
INSERT INTO users (name,email) VALUES ('张三','zhang@example.com');
SELECT * FROM users;
UPDATE users SET email='zhangsan@example.com' WHERE id=1;
DELETE FROM users WHERE id=1;
筛选&排序
SELECT * FROM users WHERE name LIKE '张%' ORDER BY created_at DESC LIMIT 10;
聚合&分组
SELECT user_id, COUNT(*) cnt FROM orders GROUP BY user_id HAVING cnt>5;
多表关联
SELECT u.name, o.amount
FROM users u
JOIN orders o ON u.id=o.user_id;
视图
CREATE VIEW vip_orders AS SELECT * FROM orders WHERE amount>1000;
6. 进阶与事务
窗口函数
SELECT user_id, amount,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY amount DESC) rn
FROM orders;
存储过程
DELIMITER $$
CREATE PROCEDURE add_user(IN n VARCHAR(50), IN e VARCHAR(100))
BEGININSERT INTO users(name,email) VALUES(n,e);
END$$
DELIMITER ;
事务
START TRANSACTION;
UPDATE accounts SET balance=balance-100 WHERE id=1;
UPDATE accounts SET balance=balance+100 WHERE id=2;
COMMIT;
执行计划&慢查询
EXPLAIN SELECT ...
查看查询路径- 分析
slow_query_log
7. 索引与性能优化
- 合理建索引:避免过多、选择性高的列
- 拆分大表:垂直/水平分表
- 参数调优:
innodb_buffer_pool_size
、连接池设置
8. 备份与恢复
mysqldump
mysqldump -u root -p mydb > mydb.sql
mysql -u root -p mydb < mydb.sql
XtraBackup
xtrabackup --backup --target-dir=/data/backup
提示:定期全备 + 增量,恢复前停止服务
9. 常用工具
- 可视化:MySQL Workbench、Navicat
- 驱动:Connector/J、Connector/Python
- ORM:SQLAlchemy、Hibernate
10. 实战示例:简易博客
- 表设计
CREATE TABLE posts (id INT PK AUTO_INCREMENT, title VARCHAR(100), content TEXT, created DATETIME);
CREATE TABLE comments (id INT PK AUTO_INCREMENT, post_id INT, author VARCHAR(50), text TEXT);
- 典型操作:分页查询、全文索引搜索