AcFun视频下载器完整指南:3分钟学会免费保存A站视频的终极方法
2026/6/17 21:36:09
SQL(Structured Query Language)分为几大类:DDL(数据定义)、DML(数据操作)、DQL(数据查询)、DCL(数据控制)、事务控制。下面按功能分类汇总最常用语句,并附带示例(假设有表users和orders)。
| 语句 | 用法 | 示例 |
|---|---|---|
| CREATE DATABASE | 创建数据库 | CREATE DATABASE mydb CHARACTER SET utf8mb4; |
| DROP DATABASE | 删除数据库 | DROP DATABASE mydb; |
| USE | 切换数据库 | USE mydb; |
| SHOW DATABASES | 查看所有数据库 | SHOW DATABASES; |
| 语句 | 用法 | 示例 |
|---|---|---|
| CREATE TABLE | 创建表 | ```CREATE |
| DROP TABLE | 删除表 | DROP TABLE users; |
| TRUNCATE TABLE | 清空表数据(保留结构) | TRUNCATE TABLE users; |
| ALTER TABLE … ADD | 添加列 | ALTER TABLE users ADD COLUMN email VARCHAR(100); |
| ALTER TABLE … MODIFY | 修改列类型 | ALTER TABLE users MODIFY age SMALLINT; |
| ALTER TABLE … DROP | 删除列 | ALTER TABLE users DROP COLUMN email; |
| ALTER TABLE … RENAME | 重命名表 | ALTER TABLE users RENAME TO customers; |
| SHOW TABLES | 查看所有表 | SHOW TABLES; |
| DESC/DESCRIBE | 查看表结构 | DESC users; |
| 语句 | 用法 | 示例 |
|---|---|---|
| INSERT INTO | 插入单行 | INSERT INTO users (name, age) VALUES ('张三', 25); |
| INSERT INTO 多行 | 插入多行 | INSERT INTO users (name, age) VALUES ('李四', 30), ('王五', 22); |
| UPDATE | 更新数据 | UPDATE users SET age = age + 1 WHERE id = 1; |
| DELETE | 删除数据 | DELETE FROM users WHERE id = 1; |
| DELETE 清空表 | 清空表(可回滚) | DELETE FROM users; |
基本查询
SELECT*FROMusers;SELECTname,ageFROMusersWHEREage>20ORDERBYageDESCLIMIT10;常用关键字
| 关键字 | 用法 | 示例 |
|---|---|---|
| WHERE | 条件过滤 | WHERE age BETWEEN 20 AND 30 AND name LIKE '张%' |
| ORDER BY | 排序 | ORDER BY age DESC, id ASC |
| LIMIT/OFFSET | 分页(MySQL) | LIMIT 10 OFFSET 20(第3页,每页10条) |
| DISTINCT | 去重 | SELECT DISTINCT age FROM users; |
| GROUP BY | 分组统计 | SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1; |
| HAVING | 分组后过滤(配合 GROUP BY) | 同上 |
聚合函数
| 函数 | 含义 |
|---|---|
| COUNT(*) | 行数 |
| COUNT(column) | 非NULL值数量 |
| SUM(column) | 求和 |
| AVG(column) | 平均值 |
| MAX/MIN(column) | 最大/最小值 |
多表查询
-- 内连接SELECTu.name,o.amountFROMusers uINNERJOINorders oONu.id=o.user_id;-- 左连接SELECTu.name,o.amountFROMusers uLEFTJOINorders oONu.id=o.user_id;-- 右连接、全连接类似子查询
SELECTnameFROMusersWHEREidIN(SELECTuser_idFROMordersWHEREamount>1000);联合查询
SELECTnameFROMusersWHEREage>30UNIONALL-- UNION 去重,UNION ALL 不去重SELECTnameFROMcustomersWHEREage>30;| 语句 | 用法 | 示例 |
|---|---|---|
| CREATE INDEX | 创建普通索引 | CREATE INDEX idx_name ON users(name); |
| CREATE UNIQUE INDEX | 创建唯一索引 | CREATE UNIQUE INDEX idx_email ON users(email); |
| DROP INDEX | 删除索引 | DROP INDEX idx_name ON users; |
STARTTRANSACTION;-- 或 BEGININSERTINTOusers...;UPDATEorders...;COMMIT;-- 提交-- ROLLBACK; -- 回滚(出错时)| 语句 | 用法 | 示例 |
|---|---|---|
| GRANT | 授予权限 | GRANT SELECT, INSERT ON mydb.* TO 'user'@'localhost'; |
| REVOKE | 撤销权限 | REVOKE INSERT ON mydb.* FROM 'user'@'localhost'; |
| CREATE USER | 创建用户 | CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'; |
-- 查看当前数据库版本SELECTVERSION();-- 查看当前使用的数据库SELECTDATABASE();-- 查看表占用空间大小(MySQL)SELECTtable_name,table_rows,data_length/1024/1024ASdata_MB,index_length/1024/1024ASindex_MBFROMinformation_schema.tablesWHEREtable_schema='mydb';-- 批量更新(CASE WHEN)UPDATEusersSETlevel=CASEWHENage<18THEN'minor'WHENage<60THEN'adult'ELSE'senior'END;掌握以上语句,就能应对 95% 的日常 SQL 开发需求!如果需要特定数据库(如 PostgreSQL 的高级特性)或复杂查询示例,欢迎继续提问。