欢迎光临武汉雪聪网
详情描述
MySQL数据库从安装到理解

MySQL 是一个流行的开源关系型数据库管理系统,广泛应用于 Web 开发。以下是 MySQL 从安装到基本理解的完整指南:

一、MySQL 安装

Windows 系统安装

下载安装包

  • 访问 MySQL 官网 (dev.mysql.com)
  • 下载 MySQL Community Server
  • 选择 Windows (x86, 64-bit) MSI Installer

安装步骤

# 1. 运行安装程序
# 2. 选择安装类型:Developer Default(推荐)
# 3. 配置 MySQL Server
#    - 设置 root 密码
#    - 配置服务名称和端口(默认3306)
# 4. 完成安装

Linux 系统安装(Ubuntu/Debian)

# 更新包列表
sudo apt update

# 安装 MySQL
sudo apt install mysql-server

# 启动 MySQL 服务
sudo systemctl start mysql

# 设置开机启动
sudo systemctl enable mysql

# 安全配置
sudo mysql_secure_installation

macOS 安装

# 使用 Homebrew 安装
brew install mysql

# 启动 MySQL 服务
brew services start mysql

# 初始化安全设置
mysql_secure_installation

二、MySQL 基础概念

1. 数据库结构层次

数据库实例 → 数据库 → 表 → 行(记录) → 字段(列)

2. 数据类型

  • 数值类型:INT, DECIMAL, FLOAT, DOUBLE
  • 字符串类型:CHAR, VARCHAR, TEXT
  • 日期时间:DATE, DATETIME, TIMESTAMP
  • 其他:BLOB, ENUM, SET

三、基本操作

1. 连接 MySQL

-- 命令行连接
mysql -u root -p

-- 连接指定主机和端口
mysql -h localhost -P 3306 -u root -p

2. 数据库操作

-- 显示所有数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE test_db;

-- 使用数据库
USE test_db;

-- 删除数据库
DROP DATABASE test_db;

3. 表操作

-- 创建表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    age INT DEFAULT 18,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 显示表结构
DESCRIBE users;

-- 修改表
ALTER TABLE users ADD COLUMN phone VARCHAR(15);

-- 删除表
DROP TABLE users;

4. 数据操作(CRUD)

-- 插入数据
INSERT INTO users (username, email, age) 
VALUES ('张三', 'zhangsan@example.com', 25);

-- 查询数据
SELECT * FROM users;
SELECT username, email FROM users WHERE age > 20;

-- 更新数据
UPDATE users SET age = 26 WHERE username = '张三';

-- 删除数据
DELETE FROM users WHERE id = 1;

四、高级查询

1. 条件查询

SELECT * FROM users 
WHERE age BETWEEN 20 AND 30 
AND email LIKE '%@example.com'
ORDER BY created_at DESC
LIMIT 10;

2. 聚合函数

-- 统计、求和、平均值等
SELECT 
    COUNT(*) as total_users,
    AVG(age) as avg_age,
    MAX(age) as max_age,
    MIN(age) as min_age
FROM users;

3. 分组查询

SELECT 
    age_group,
    COUNT(*) as user_count
FROM (
    SELECT 
        CASE 
            WHEN age < 20 THEN '青少年'
            WHEN age BETWEEN 20 AND 30 THEN '青年'
            ELSE '成年'
        END as age_group
    FROM users
) as grouped
GROUP BY age_group;

4. 连接查询

-- 创建订单表
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    amount DECIMAL(10,2),
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 内连接
SELECT 
    u.username,
    o.amount,
    o.order_date
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

-- 左连接
SELECT 
    u.username,
    COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id;

五、索引优化

1. 创建索引

-- 单列索引
CREATE INDEX idx_email ON users(email);

-- 复合索引
CREATE INDEX idx_age_created ON users(age, created_at);

-- 唯一索引
CREATE UNIQUE INDEX idx_unique_username ON users(username);

2. 查看索引

SHOW INDEX FROM users;

-- 分析查询性能
EXPLAIN SELECT * FROM users WHERE age > 25;

六、事务管理

-- 开始事务
START TRANSACTION;

-- 执行操作
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;

-- 提交或回滚
COMMIT;  -- 确认更改
-- ROLLBACK;  -- 撤销更改

七、存储过程

-- 创建存储过程
DELIMITER //
CREATE PROCEDURE GetUserCount()
BEGIN
    SELECT COUNT(*) as total FROM users;
END //
DELIMITER ;

-- 调用存储过程
CALL GetUserCount();

八、备份与恢复

备份数据库

# 备份整个数据库
mysqldump -u root -p test_db > backup.sql

# 备份指定表
mysqldump -u root -p test_db users > users_backup.sql

恢复数据库

# 恢复数据库
mysql -u root -p test_db < backup.sql

九、安全配置

1. 用户管理

-- 创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

-- 授予权限
GRANT SELECT, INSERT ON test_db.* TO 'newuser'@'localhost';

-- 查看权限
SHOW GRANTS FOR 'newuser'@'localhost';

-- 撤销权限
REVOKE INSERT ON test_db.* FROM 'newuser'@'localhost';

2. 修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

十、性能优化建议

使用合适的数据类型 合理设计索引 **避免 SELECT *** 使用 EXPLAIN 分析查询 定期优化表 配置合适的缓存大小

学习资源推荐

官方文档:dev.mysql.com/doc/ 在线练习:SQLZoo, LeetCode Database 书籍推荐
  • 《MySQL必知必会》
  • 《高性能MySQL》

实践项目建议

设计一个博客系统的数据库 创建电商网站的数据表结构 实现用户权限管理系统 设计数据分析报表的查询语句

这个学习路线涵盖了 MySQL 的核心内容。建议按照顺序学习,从基础操作开始,逐步深入高级功能。实践是最好的学习方式,多动手编写 SQL 语句,解决实际问题。