Skip to content
On this page

MySQL 快速入门

MySQL是一个开源的关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL)。MySQL因其可靠性、易用性和高性能而被广泛采用,是Web应用开发中最受欢迎的数据库之一。

什么是MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。它基于客户端-服务器模型,使用SQL作为交互语言。

主要特性

  • 开源免费:遵循GPL许可证,可免费使用
  • 高性能:优化的存储引擎和查询处理
  • 跨平台:支持多种操作系统
  • 多存储引擎:支持InnoDB、MyISAM等多种存储引擎
  • 可扩展性:支持主从复制、集群等扩展方案
  • 安全性:强大的用户权限管理机制

安装MySQL

在Windows上安装

  1. 访问MySQL官网下载MySQL Community Server
  2. 运行安装程序并选择自定义安装
  3. 选择需要的组件(MySQL Server、MySQL Workbench等)
  4. 配置root用户密码
  5. 完成安装并启动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专用客户端

性能优化基础

基本优化原则

  1. 使用适当的索引:为经常查询的字段创建索引
  2. 优化查询语句:避免SELECT *,使用LIMIT
  3. 合理设计表结构:选择合适的数据类型
  4. 定期维护:优化表、更新统计信息

简单性能检查

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的高级特性和最佳实践。