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;数据类型
数值类型
| 类型 | 字节 | 范围 |
|---|---|---|
| TINYINT | 1 | -128 ~ 127 |
| SMALLINT | 2 | -32768 ~ 32767 |
| INT | 4 | -2^31 ~ 2^31-1 |
| BIGINT | 8 | -2^63 ~ 2^63-1 |
| DECIMAL(M,D) | 变长 | 精确小数 |
| FLOAT | 4 | 单精度浮点 |
| DOUBLE | 8 | 双精度浮点 |
字符串类型
| 类型 | 最大长度 | 说明 |
|---|---|---|
| CHAR(N) | 255 | 定长字符串 |
| VARCHAR(N) | 65535 | 变长字符串 |
| TEXT | 65535 | 长文本 |
| MEDIUMTEXT | 16MB | 中等长度文本 |
| LONGTEXT | 4GB | 超长文本 |
日期时间类型
| 类型 | 格式 | 说明 |
|---|---|---|
| DATE | YYYY-MM-DD | 日期 |
| TIME | HH:MM:SS | 时间 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 日期时间 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 时间戳 |
| YEAR | YYYY | 年份 |
约束
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相关内容。