什么是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;
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
| [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
| [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;
|
常见应用场景
- Web应用:用户管理、内容管理、订单系统
- 电商平台:商品管理、订单处理、用户数据
- 内容管理系统:文章、评论、用户管理
- 数据分析:业务数据存储和查询
学习资源推荐
总结
MySQL作为最流行的开源关系型数据库,凭借其稳定性、高性能和丰富的功能,成为Web开发的首选数据库。掌握MySQL对于后端开发者来说是必备技能,建议从基础SQL语法开始,逐步深入到性能优化和架构设计。