Skip to content

MySQL 简介

什么是MySQL?

MySQL是最流行的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现属于Oracle公司。

主要特性

  • 开源免费:社区版完全免费
  • 高性能:支持高并发访问
  • 跨平台:支持Windows、Linux、macOS等
  • 易用性:SQL语法简单易学
  • 支持大型数据库:支持千万级数据量

MySQL架构

┌─────────────────────────────────┐
│      连接层 (Connection)         │
├─────────────────────────────────┤
│      服务层 (Service Layer)      │
│  ┌────────────────────────────┐ │
│  │  查询缓存 | 解析器 | 优化器  │ │
│  └────────────────────────────┘ │
├─────────────────────────────────┤
│      引擎层 (Storage Engine)     │
│      InnoDB | MyISAM | Memory   │
├─────────────────────────────────┤
│      存储层 (File System)        │
└─────────────────────────────────┘

存储引擎

InnoDB(推荐)

  • 支持事务(ACID)
  • 支持行级锁
  • 支持外键约束
  • 支持崩溃恢复
sql
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=InnoDB;

MyISAM

  • 不支持事务
  • 支持表级锁
  • 查询速度快
  • 适合读多写少场景

基本操作

数据库操作

sql
-- 创建数据库
CREATE DATABASE blog CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 查看所有数据库
SHOW DATABASES;

-- 使用数据库
USE blog;

-- 删除数据库
DROP DATABASE blog;

表操作

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

-- 查看表结构
DESC users;
SHOW CREATE TABLE users;

-- 修改表
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users MODIFY COLUMN age TINYINT;
ALTER TABLE users DROP COLUMN phone;

-- 删除表
DROP TABLE users;

数据操作(CRUD)

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

-- 批量插入
INSERT INTO users (username, email, age) VALUES 
('user1', 'user1@example.com', 20),
('user2', 'user2@example.com', 22);

-- 查询数据
SELECT * FROM users;
SELECT username, email FROM users WHERE age > 20;
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;

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

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

数据类型

数值类型

类型字节范围
TINYINT1-128 ~ 127
SMALLINT2-32768 ~ 32767
INT4-2^31 ~ 2^31-1
BIGINT8-2^63 ~ 2^63-1
DECIMAL(M,D)变长精确小数
FLOAT4单精度浮点
DOUBLE8双精度浮点

字符串类型

类型最大长度说明
CHAR(N)255定长字符串
VARCHAR(N)65535变长字符串
TEXT65535长文本
MEDIUMTEXT16MB中等长度文本
LONGTEXT4GB超长文本

日期时间类型

类型格式说明
DATEYYYY-MM-DD日期
TIMEHH:MM:SS时间
DATETIMEYYYY-MM-DD HH:MM:SS日期时间
TIMESTAMPYYYY-MM-DD HH:MM:SS时间戳
YEARYYYY年份

约束

sql
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,        -- 主键约束
    username VARCHAR(50) NOT NULL UNIQUE,     -- 非空约束 + 唯一约束
    email VARCHAR(100) UNIQUE,                -- 唯一约束
    age INT CHECK (age >= 0 AND age <= 150),  -- 检查约束
    status TINYINT DEFAULT 1,                 -- 默认值约束
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES dept(id) -- 外键约束
);

事务

ACID特性

  • 原子性(Atomicity):事务不可分割
  • 一致性(Consistency):事务前后数据一致
  • 隔离性(Isolation):事务之间相互独立
  • 持久性(Durability):事务提交后永久保存

事务操作

sql
-- 开启事务
START TRANSACTION;
-- 或
BEGIN;

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

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;

索引

索引是提高查询效率的关键。

sql
-- 创建索引
CREATE INDEX idx_username ON users(username);
CREATE UNIQUE INDEX idx_email ON users(email);

-- 复合索引
CREATE INDEX idx_name_age ON users(username, age);

-- 查看索引
SHOW INDEX FROM users;

-- 删除索引
DROP INDEX idx_username ON users;

💡 提示

这是一个demo文档,欢迎补充更多MySQL相关内容。

深入学习

基于 VitePress 构建