Appearance
MySQL 快速入门
MySQL是一个开源的关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL)。MySQL因其可靠性、易用性和高性能而被广泛采用,是Web应用开发中最受欢迎的数据库之一。
什么是MySQL
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。它基于客户端-服务器模型,使用SQL作为交互语言。
主要特性
- 开源免费:遵循GPL许可证,可免费使用
- 高性能:优化的存储引擎和查询处理
- 跨平台:支持多种操作系统
- 多存储引擎:支持InnoDB、MyISAM等多种存储引擎
- 可扩展性:支持主从复制、集群等扩展方案
- 安全性:强大的用户权限管理机制
安装MySQL
在Windows上安装
- 访问MySQL官网下载MySQL Community Server
- 运行安装程序并选择自定义安装
- 选择需要的组件(MySQL Server、MySQL Workbench等)
- 配置root用户密码
- 完成安装并启动MySQL服务
在macOS上安装
bash
# 使用Homebrew安装
brew install mysql
# 启动MySQL服务
brew services start mysql
在Linux上安装
Ubuntu/Debian
bash
# 更新包列表
sudo apt update
# 安装MySQL服务器
sudo apt install mysql-server
# 启动MySQL服务
sudo systemctl start mysql
sudo systemctl enable mysql
CentOS/RHEL
bash
# 安装MySQL
sudo yum install mysql-server
# 启动MySQL服务
sudo systemctl start mysqld
sudo systemctl enable mysqld
初始配置
安全配置
安装完成后,运行安全配置脚本:
bash
sudo mysql_secure_installation
该脚本会引导你设置root密码、删除匿名用户、禁止root远程登录等。
连接到MySQL
bash
# 使用root用户连接
mysql -u root -p
# 连接到特定数据库
mysql -u root -p -D database_name
# 连接到远程MySQL服务器
mysql -h hostname -u username -p
基本SQL操作
创建和使用数据库
sql
-- 显示所有数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 使用数据库
USE myapp;
-- 删除数据库
DROP DATABASE myapp;
创建表
sql
-- 创建用户表
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
);
-- 创建订单表
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
product_name VARCHAR(100) NOT NULL,
quantity INT NOT NULL DEFAULT 1,
price DECIMAL(10,2) NOT NULL,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
插入数据
sql
-- 插入单条记录
INSERT INTO users (username, email, password)
VALUES ('john_doe', 'john@example.com', 'hashed_password');
-- 插入多条记录
INSERT INTO users (username, email, password) VALUES
('jane_smith', 'jane@example.com', 'hashed_password'),
('bob_wilson', 'bob@example.com', 'hashed_password');
-- 从其他表插入数据
INSERT INTO orders (user_id, product_name, quantity, price)
SELECT id, 'Laptop', 1, 999.99 FROM users WHERE username = 'john_doe';
查询数据
sql
-- 查询所有用户
SELECT * FROM users;
-- 查询特定字段
SELECT username, email FROM users;
-- 条件查询
SELECT * FROM users WHERE username = 'john_doe';
-- 模糊查询
SELECT * FROM users WHERE username LIKE '%john%';
-- 排序
SELECT * FROM users ORDER BY created_at DESC;
-- 限制结果数量
SELECT * FROM users LIMIT 10;
-- 连接查询
SELECT u.username, o.product_name, o.order_date
FROM users u
JOIN orders o ON u.id = o.user_id;
更新数据
sql
-- 更新特定记录
UPDATE users
SET email = 'new_email@example.com'
WHERE username = 'john_doe';
-- 批量更新
UPDATE orders
SET price = price * 1.1
WHERE order_date > '2023-01-01';
删除数据
sql
-- 删除特定记录
DELETE FROM users WHERE username = 'john_doe';
-- 删除所有记录(保留表结构)
DELETE FROM users;
-- 删除表
DROP TABLE orders;
MySQL数据类型
数值类型
sql
-- 整数类型
TINYINT -- 1字节,范围-128到127
SMALLINT -- 2字节
MEDIUMINT -- 3字节
INT -- 4字节
BIGINT -- 8字节
-- 浮点数类型
FLOAT -- 单精度浮点数
DOUBLE -- 双精度浮点数
DECIMAL(M,D) -- 精确小数,M总位数,D小数位数
字符串类型
sql
-- 定长字符串
CHAR(10) -- 固定长度,最大255字符
-- 变长字符串
VARCHAR(255) -- 可变长度,最大65,535字符
-- 文本类型
TINYTEXT -- 最大255字符
TEXT -- 最大65,535字符
MEDIUMTEXT -- 最大16,777,215字符
LONGTEXT -- 最大4,294,967,295字符
日期时间类型
sql
DATE -- 日期,'YYYY-MM-DD'
TIME -- 时间,'HH:MM:SS'
DATETIME -- 日期时间,'YYYY-MM-DD HH:MM:SS'
TIMESTAMP -- 时间戳,'YYYY-MM-DD HH:MM:SS'
YEAR -- 年份,1901-2155
常用命令
数据库管理
sql
-- 查看当前数据库
SELECT DATABASE();
-- 查看表结构
DESCRIBE table_name;
-- 或
DESC table_name;
-- 查看创建表的SQL语句
SHOW CREATE TABLE table_name;
-- 查看所有表
SHOW TABLES;
-- 查看表状态
SHOW TABLE STATUS;
索引操作
sql
-- 创建索引
CREATE INDEX idx_username ON users(username);
-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);
-- 查看表的索引
SHOW INDEX FROM users;
-- 删除索引
DROP INDEX idx_username ON users;
MySQL客户端工具
命令行客户端
bash
# 连接并执行SQL文件
mysql -u root -p -D database_name < script.sql
# 导出数据库
mysqldump -u root -p database_name > backup.sql
# 导入数据库
mysql -u root -p database_name < backup.sql
图形化客户端
- MySQL Workbench:官方图形化工具
- phpMyAdmin:基于Web的管理工具
- HeidiSQL:轻量级Windows客户端
- Sequel Pro:macOS专用客户端
性能优化基础
基本优化原则
- 使用适当的索引:为经常查询的字段创建索引
- 优化查询语句:避免SELECT *,使用LIMIT
- 合理设计表结构:选择合适的数据类型
- 定期维护:优化表、更新统计信息
简单性能检查
sql
-- 查看当前连接
SHOW PROCESSLIST;
-- 查看慢查询日志状态
SHOW VARIABLES LIKE 'slow_query_log%';
-- 查看查询缓存状态
SHOW STATUS LIKE 'Qcache%';
第一个MySQL应用
让我们创建一个简单的Node.js应用来连接MySQL:
javascript
// 安装MySQL驱动
npm install mysql2
// app.js
const mysql = require('mysql2/promise');
// 创建连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'your_password',
database: 'myapp',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
async function main() {
try {
// 查询用户
const [rows] = await pool.execute('SELECT * FROM users LIMIT 5');
console.log('Users:', rows);
// 插入用户
const [result] = await pool.execute(
'INSERT INTO users (username, email, password) VALUES (?, ?, ?)',
['test_user', 'test@example.com', 'hashed_password']
);
console.log('Inserted user ID:', result.insertId);
} catch (error) {
console.error('Database error:', error);
} finally {
await pool.end();
}
}
main();
总结
MySQL是一个功能强大且广泛使用的关系型数据库管理系统。通过本章的学习,你应该已经掌握了MySQL的基本概念、安装方法和基本操作。在接下来的章节中,我们将深入探讨MySQL的高级特性和最佳实践。