什么是MySQL?

MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现在属于Oracle公司。它使用结构化查询语言(SQL)进行数据库管理,是目前最流行的开源数据库之一。

核心特性

1. 开源免费

  • 社区版完全免费
  • 商业版提供额外功能和技术支持
  • 拥有庞大的开源社区支持

2. 跨平台支持

  • 支持Windows、Linux、macOS等主流操作系统
  • 支持多种硬件架构

3. 高性能

  • 支持多线程,充分利用CPU资源
  • 优化的SQL查询算法
  • 支持索引优化查询速度

4. 可靠性

  • 支持事务处理(ACID特性)
  • 数据备份和恢复机制
  • 主从复制架构

存储引擎

InnoDB(默认引擎)

  • 事务支持:支持ACID事务
  • 行级锁:提高并发性能
  • 外键约束:保证数据完整性
  • 崩溃恢复:自动故障恢复机制

MyISAM

  • 表级锁:适合读多写少的场景
  • 全文索引:支持全文搜索
  • 压缩表:节省存储空间

基本操作

数据库操作

1
2
3
4
5
6
7
8
-- 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 删除数据库
DROP DATABASE mydb;

-- 使用数据库
USE mydb;

表操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 创建表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

-- 修改表结构
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users MODIFY COLUMN email VARCHAR(150);

-- 删除表
DROP TABLE users;

数据操作

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 插入数据
INSERT INTO users (username, email, password)
VALUES ('john_doe', 'john@example.com', 'hashed_password');

-- 查询数据
SELECT * FROM users WHERE username = 'john_doe';
SELECT username, email FROM users LIMIT 10;

-- 更新数据
UPDATE users SET email = 'new_email@example.com' WHERE id = 1;

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

索引优化

索引类型

  • 主键索引:PRIMARY KEY
  • 唯一索引:UNIQUE
  • 普通索引:INDEX
  • 全文索引:FULLTEXT
  • 组合索引:多个列的索引

创建索引

1
2
3
4
5
6
7
8
-- 创建普通索引
CREATE INDEX idx_username ON users(username);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);

-- 创建组合索引
CREATE INDEX idx_user_email ON users(username, email);

高级特性

事务处理

1
2
3
4
5
6
7
8
9
10
11
12
START TRANSACTION;
-- 或者
BEGIN;

-- 执行多个SQL操作
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;
-- 或者回滚
ROLLBACK;

视图

1
2
3
4
5
6
7
8
-- 创建视图
CREATE VIEW active_users AS
SELECT id, username, email
FROM users
WHERE status = 'active';

-- 使用视图
SELECT * FROM active_users;

存储过程

1
2
3
4
5
6
7
8
9
DELIMITER //
CREATE PROCEDURE GetUserById(IN user_id INT)
BEGIN
SELECT * FROM users WHERE id = user_id;
END //
DELIMITER ;

-- 调用存储过程
CALL GetUserById(1);

性能优化技巧

1. 查询优化

  • 使用EXPLAIN分析查询计划
  • 避免SELECT *,只查询需要的列
  • 使用LIMIT限制结果集大小

2. 索引优化

  • 为经常查询的列创建索引
  • 避免在索引列上使用函数
  • 定期分析和优化表

3. 配置优化

  • 调整innodb_buffer_pool_size
  • 优化max_connections
  • 配置合适的query_cache_size

备份与恢复

使用mysqldump备份

1
2
3
4
5
# 备份整个数据库
mysqldump -u username -p database_name > backup.sql

# 备份特定表
mysqldump -u username -p database_name table1 table2 > backup.sql

恢复数据

1
mysql -u username -p database_name < backup.sql

主从复制配置

主服务器配置

1
2
3
4
5
-- my.cnf配置
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = your_database

从服务器配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- my.cnf配置
[mysqld]
server-id = 2
relay-log = mysql-relay-bin

-- 在从服务器上执行
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;

START SLAVE;

常见应用场景

  1. Web应用:用户管理、内容管理、订单系统
  2. 电商平台:商品管理、订单处理、用户数据
  3. 内容管理系统:文章、评论、用户管理
  4. 数据分析:业务数据存储和查询

学习资源推荐

  • 官方文档https://dev.mysql.com/doc/
  • 在线教程:MySQL Tutorial
  • 书籍:《MySQL技术内幕》、《高性能MySQL》
  • 实践项目:搭建个人博客、开发小型电商系统

总结

MySQL作为最流行的开源关系型数据库,凭借其稳定性、高性能和丰富的功能,成为Web开发的首选数据库。掌握MySQL对于后端开发者来说是必备技能,建议从基础SQL语法开始,逐步深入到性能优化和架构设计。