MySQL核心SQL语句速查宝典

SQL 语句使用超详细教程

以下是 MySQL 核心 SQL 语句的速查式教程,所有语句均可直接执行。

一、数据库操作

复制代码
-- 创建数据库(指定字符集)
CREATE DATABASE IF NOT EXISTS my_database DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

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

-- 选择数据库
USE my_database;

-- 查看当前数据库
SELECT DATABASE();

-- 删除数据库
DROP DATABASE IF EXISTS my_database;

二、数据表操作

2.1 创建表

复制代码
-- 创建用户表(含主键、自增、默认值、时间戳)
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
    username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
    email VARCHAR(100) NOT NULL COMMENT '邮箱',
    age TINYINT UNSIGNED DEFAULT 0 COMMENT '年龄',
    status ENUM('active', 'inactive') DEFAULT 'active' COMMENT '状态',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

-- 创建订单表(含外键关联用户表)
CREATE TABLE IF NOT EXISTS orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID',
    user_id INT NOT NULL COMMENT '用户ID',
    order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '订单号',
    amount DECIMAL(10,2) NOT NULL COMMENT '金额',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

2.2 修改表结构

复制代码
-- 查看所有表
SHOW TABLES;

-- 查看表结构
DESC users;

-- 查看建表语句
SHOW CREATE TABLE users;

-- 修改表名
ALTER TABLE users RENAME TO user_info;

-- 添加字段
ALTER TABLE users ADD COLUMN address VARCHAR(200) AFTER email;

-- 修改字段类型
ALTER TABLE users MODIFY COLUMN age INT UNSIGNED;

-- 修改字段名
ALTER TABLE users CHANGE COLUMN address user_address VARCHAR(200);

-- 删除字段
ALTER TABLE users DROP COLUMN user_address;

-- 删除表
DROP TABLE IF EXISTS orders;

三、数据增删改查

3.1 插入数据

复制代码
-- 插入单条数据
INSERT INTO users (username, email, age, status) VALUES ('zhangsan', 'zhangsan@example.com', 25, 'active');

-- 批量插入
INSERT INTO users (username, email, age, status) VALUES 
('lisi', 'lisi@example.com', 30, 'active'),
('wangwu', 'wangwu@example.com', 28, 'inactive');

-- 插入或更新(主键/唯一键冲突时更新)
INSERT INTO users (username, email, age) VALUES ('zhangsan', 'zhangsan_new@example.com', 26)
ON DUPLICATE KEY UPDATE email = VALUES(email), age = VALUES(age);

3.2 更新数据

复制代码
-- 更新单条(务必加 WHERE)
UPDATE users SET age = 26, email = 'zhangsan_updated@example.com' WHERE id = 1;

-- 批量更新
UPDATE users SET status = 'inactive' WHERE age > 30;

3.3 删除数据

复制代码
-- 删除单条(务必加 WHERE)
DELETE FROM users WHERE id = 3;

-- 批量删除
DELETE FROM users WHERE status = 'inactive';

-- 清空全表(保留结构,不可回滚)
TRUNCATE TABLE users;

四、数据查询(SELECT 详解)

4.1 基础查询

复制代码
-- 查询所有字段
SELECT * FROM users;

-- 查询指定字段
SELECT id, username, email FROM users;

-- 字段别名
SELECT id AS '用户ID', username '用户名' FROM users;

-- 去重查询
SELECT DISTINCT status FROM users;

-- 限制条数
SELECT * FROM users LIMIT 10;
SELECT * FROM users LIMIT 10, 5; -- 从第11条开始取5条

4.2 条件查询

复制代码
-- 比较运算符
SELECT * FROM users WHERE age = 25;
SELECT * FROM users WHERE age != 30;

-- 逻辑运算符
SELECT * FROM users WHERE age > 20 AND status = 'active';
SELECT * FROM users WHERE age < 22 OR age > 35;

-- 范围查询
SELECT * FROM users WHERE age BETWEEN 25 AND 35;

-- 枚举查询
SELECT * FROM users WHERE age IN (22, 25, 28);

-- 模糊查询(% 任意字符,_ 单个字符)
SELECT * FROM users WHERE username LIKE 'zhang%';
SELECT * FROM users WHERE email LIKE '%@example.com';

-- NULL 查询
SELECT * FROM users WHERE email IS NULL;

4.3 排序与分组

复制代码
-- 排序(ASC 升序,DESC 降序)
SELECT * FROM users ORDER BY age ASC;
SELECT * FROM users ORDER BY created_at DESC;

-- 分组(配合聚合函数)
SELECT status, COUNT(*) AS '用户数量' FROM users GROUP BY status;

-- 分组后筛选
SELECT status, COUNT(*) AS '用户数量' FROM users GROUP BY status HAVING COUNT(*) > 1;

4.4 聚合函数

复制代码
-- 计数
SELECT COUNT(*) FROM users;
SELECT COUNT(email) FROM users;

-- 求和
SELECT SUM(age) FROM users WHERE status = 'active';

-- 平均值
SELECT AVG(age) FROM users;

-- 最大值/最小值
SELECT MAX(age) FROM users;
SELECT MIN(age) FROM users;

4.5 关联查询

复制代码
-- 内连接(只返回匹配记录)
SELECT u.username, o.order_no, o.amount FROM users u
INNER JOIN orders o ON u.id = o.user_id;

-- 左连接(返回左表所有,右表无匹配为 NULL)
SELECT u.username, o.order_no, o.amount FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

-- 右连接(返回右表所有,左表无匹配为 NULL)
SELECT u.username, o.order_no, o.amount FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

4.6 子查询

复制代码
-- 作为条件
SELECT * FROM users WHERE id IN (SELECT DISTINCT user_id FROM orders);

-- 作为临时表
SELECT u.username, temp.total_amount FROM users u
LEFT JOIN (
    SELECT user_id, SUM(amount) AS total_amount FROM orders GROUP BY user_id
) temp ON u.id = temp.user_id;

五、索引操作

复制代码
-- 查看索引
SHOW INDEX FROM users;

-- 创建普通索引
CREATE INDEX idx_username ON users(username);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);

-- 创建复合索引
CREATE INDEX idx_status_age ON users(status, age);

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

六、事务操作

复制代码
-- 开启事务
START TRANSACTION;

-- 执行操作(示例:转账)
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;

-- 提交事务
COMMIT;

-- 回滚事务(出错时执行)
ROLLBACK;

七、视图操作

复制代码
-- 创建视图
CREATE VIEW user_order_view AS
SELECT u.id, u.username, o.order_no, o.amount FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

-- 查询视图
SELECT * FROM user_order_view WHERE amount > 100;

-- 删除视图
DROP VIEW IF EXISTS user_order_view;

八、用户与权限

复制代码
-- 查看所有用户
SELECT user, host FROM mysql.user;

-- 创建用户
CREATE USER 'test_user'@'%' IDENTIFIED BY '123456';

-- 授权(授予 my_database 所有权限)
GRANT ALL PRIVILEGES ON my_database.* TO 'test_user'@'%';

-- 刷新权限
FLUSH PRIVILEGES;
相关推荐
你才是臭弟弟2 小时前
window sever 2019 安装~时序数据库TDengine TSDB 和 视图工具dbeaver
数据库·时序数据库·tdengine
Memory_荒年2 小时前
TiDB 单机部署与监控完整指南
运维·数据库·后端
殷紫川2 小时前
吃透分库分表:分片策略、跨库事务与平滑扩容全解
mysql·架构
殷紫川2 小时前
SQL 性能优化全解:从执行计划到底层逻辑,根治 99% 的慢 SQL 与规范落地
数据库·mysql
Memory_荒年2 小时前
TiDB:当 MySQL 遇上分布式,生了个“超级混血儿”
java·数据库·后端
殷紫川2 小时前
MySQL高可用生产落地全解:主从同步、MGR集群、读写分离从原理到实战
mysql·架构
asom222 小时前
DDD(领域驱动设计) 核心概念详解
java·开发语言·数据库·spring boot
ego.iblacat2 小时前
MySQL 数据库操作
数据库·mysql·adb
赵渝强老师2 小时前
【赵渝强老师】高斯数据库(openGauss)的逻辑存储结构
数据库·postgresql·opengauss·gaussdb·国产数据库·高斯数据库