概述
- MySQL 常用 SQL 语句的示例,涵盖数据定义、操作、查询等常见场景
一、数据库操作
-
创建数据库
CREATE DATABASE mydb;
-
选择数据库
USE mydb;
-
删除数据库
DROP DATABASE mydb;
二、表操作
-
创建表
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,age INT DEFAULT 18,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
修改表结构
-- 添加列 ALTER TABLE users ADD COLUMN address VARCHAR(200);-- 修改列类型 ALTER TABLE users MODIFY COLUMN age TINYINT;-- 删除列 ALTER TABLE users DROP COLUMN address;
-
删除表
DROP TABLE users;
三、数据操作(CRUD)
-
插入数据
INSERT INTO users (name, email, age) VALUES ('张三', 'zhangsan@example.com', 25);
-
查询数据
-- 查询所有列 SELECT * FROM users;-- 查询特定列 SELECT name, email FROM users;-- 条件查询 (WHERE) SELECT * FROM users WHERE age > 20;-- 排序 (ORDER BY) SELECT * FROM users ORDER BY created_at DESC;-- 分页 (LIMIT) SELECT * FROM users LIMIT 10 OFFSET 0; -- 第一页,每页10条
-
更新数据
UPDATE users SET age = 26 WHERE id = 1;
-
删除数据
DELETE FROM users WHERE id = 1;
四、高级查询
-
聚合函数
SELECT COUNT(*) FROM users; -- 总记录数 SELECT AVG(age) FROM users; -- 平均年龄 SELECT MAX(age) FROM users; -- 最大年龄
-
分组查询 (GROUP BY)
SELECT age, COUNT(*) AS count FROM users GROUP BY age HAVING count > 5; -- HAVING 过滤分组结果
-
连接查询
-- 内连接 (INNER JOIN) SELECT u.name, o.order_id FROM users u INNER JOIN orders o ON u.id = o.user_id;-- 左连接 (LEFT JOIN) SELECT u.name, o.order_id FROM users u LEFT JOIN orders o ON u.id = o.user_id;
-
子查询
SELECT * FROM users WHERE age > (SELECT AVG(age) FROM users);
五、索引操作
-
创建索引
CREATE INDEX idx_name ON users(name);
-
删除索引
DROP INDEX idx_name ON users;
六、事务处理
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 提交事务
-- ROLLBACK; -- 回滚事务
七、用户与权限
-
创建用户
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
-
授予权限
GRANT SELECT, INSERT ON mydb.* TO 'myuser'@'localhost';
-
撤销权限
REVOKE INSERT ON mydb.* FROM 'myuser'@'localhost';
-
删除用户
DROP USER 'myuser'@'localhost';
八、其他常用操作
-
模糊查询 (LIKE)
SELECT * FROM users WHERE name LIKE '张%';
-
去重查询 (DISTINCT)
SELECT DISTINCT age FROM users;
-
处理 NULL 值
SELECT * FROM users WHERE email IS NULL;
-
日期函数
SELECT NOW(); -- 当前时间 SELECT DATE_FORMAT(created_at, '%Y-%m-%d') FROM users;
九、导入导出数据
-
导出数据到文件
mysqldump -u root -p mydb > mydb.sql
-
导入数据
mysql -u root -p mydb < mydb.sql