SQL(结构化查询语言)是与关系型数据库交互的标准语言,掌握其基本命令是进行数据操作的核心技能,SQL命令主要分为数据查询语言(DQL)、数据操作语言(DML)、数据定义语言(DDL)、数据控制语言(DCL)和事务控制语言(TCL),以下将详细展开各类基本命令的使用方法及场景。

数据查询语言(DQL)
DQL主要用于从数据库中检索数据,其核心命令是SELECT
,通过SELECT
可以搭配WHERE
、GROUP BY
、HAVING
、ORDER BY
等子句实现复杂查询。SELECT column1, column2 FROM table_name WHERE condition;
用于从指定表中筛选符合条件的列。WHERE
子句支持比较运算符(如, >
, <
)、逻辑运算符(如AND
, OR
)和模糊查询(LIKE
配合通配符或_
)。GROUP BY
结合聚合函数(如COUNT()
, SUM()
, AVG()
)可实现分组统计,而HAVING
则用于对分组结果进行筛选,类似于WHERE
但作用于组级别。ORDER BY
可按升序(ASC
)或降序(DESC
)对结果排序。
数据操作语言(DML)
DML用于对数据库中的数据进行增删改操作,包括INSERT
、UPDATE
和DELETE
。INSERT
命令用于向表中插入数据,单行插入语法为INSERT INTO table_name (column1, column2) VALUES (value1, value2);
,多行插入可使用INSERT INTO ... SELECT ...
从其他表导入数据。UPDATE
用于修改表中数据,需搭配WHERE
子句明确更新范围,否则将更新全表数据,语法为UPDATE table_name SET column1 = new_value WHERE condition;
。DELETE
用于删除数据,同样需谨慎使用WHERE
,避免误删全表数据,语法为DELETE FROM table_name WHERE condition;
。MERGE
(或UPSERT
)命令可同时实现插入、更新和删除操作,常用于数据同步场景。
数据定义语言(DDL)
DDL用于定义和管理数据库结构,主要命令包括CREATE
、ALTER
、DROP
和TRUNCATE
。CREATE
用于创建数据库对象,如CREATE DATABASE db_name;
创建数据库,CREATE TABLE table_name (column1 datatype, column2 datatype);
创建表,CREATE INDEX idx_name ON table_name (column);
创建索引以提升查询效率。ALTER
用于修改表结构,如添加列(ALTER TABLE table_name ADD column_name datatype;
)、修改列类型(ALTER TABLE table_name MODIFY column_name new_datatype;
)或删除列(ALTER TABLE table_name DROP COLUMN column_name;
)。DROP
用于删除对象,如DROP TABLE table_name;
会删除表及其数据,DROP INDEX idx_name;
删除索引。TRUNCATE
用于快速清空表数据,但保留表结构,且比DELETE
速度更快,但不可回滚。
数据控制语言(DCL)与事务控制语言(TCL)
DCL用于控制数据库访问权限,核心命令为GRANT
和REVOKE
。GRANT
用于授予权限,如GRANT SELECT, INSERT ON table_name TO user_name;
授予用户对表的查询和插入权限。REVOKE
用于撤销权限,如REVOKE DELETE ON table_name FROM user_name;
撤销用户的删除权限,TCL则用于管理事务,确保数据一致性,主要命令包括COMMIT
(提交事务,永久保存更改)、ROLLBACK
(回滚事务,撤销未提交的更改)和SAVEPOINT
(设置保存点,支持部分回滚),事务块可写为BEGIN TRANSACTION; SQL操作1; SQL操作2; COMMIT;
,若执行过程中出错,则通过ROLLBACK
回滚到事务开始前的状态。

常用SQL命令速查表
命令类型 | 命令 | 语法示例 | 功能说明 |
---|---|---|---|
DQL | SELECT | SELECT * FROM users WHERE age > 25; | 查询符合条件的记录 |
DML | INSERT | INSERT INTO users (name, age) VALUES ('Tom', 30); | 插入新数据行 |
DML | UPDATE | UPDATE users SET age = 31 WHERE name = 'Tom'; | 更新现有数据 |
DML | DELETE | DELETE FROM users WHERE age < 18; | 删除符合条件的记录 |
DDL | CREATE TABLE | CREATE TABLE products (id INT, name VARCHAR(50)); | 创建新表 |
DDL | ALTER TABLE | ALTER TABLE products ADD price DECIMAL(10,2); | 添加新列 |
DDL | DROP TABLE | DROP TABLE products; | 删除表及所有数据 |
TCL | COMMIT | COMMIT; | 提交事务,保存更改 |
TCL | ROLLBACK | ROLLBACK; | 回滚事务,撤销更改 |
相关问答FAQs
Q1: 如何在SQL查询中实现分页功能?
A: 分页可通过LIMIT
和OFFSET
子句实现,语法为SELECT * FROM table_name LIMIT page_size OFFSET offset;
,每页显示10条记录,查询第2页数据的SQL为SELECT * FROM users LIMIT 10 OFFSET 10;
。page_size
为每页记录数,offset
为偏移量(计算公式为(页码-1)*page_size
),部分数据库(如SQL Server)使用OFFSET ... FETCH NEXT ...
语法,Oracle则通过ROWNUM
实现分页。
Q2: 什么是SQL注入?如何防范?
A: SQL注入是一种安全漏洞,攻击者通过在输入参数中插入恶意SQL代码,破坏原有查询逻辑,从而未授权访问或篡改数据库数据,登录查询中若直接拼接用户输入的密码(如"SELECT * FROM users WHERE password = '" + user_input + "'"
),攻击者输入' OR '1'='1
可能导致绕过验证,防范措施包括:使用参数化查询(预编译语句)代替字符串拼接;对用户输入进行严格过滤和验证;限制数据库用户权限,避免使用超级账户;启用数据库的SQL注入防护功能(如MySQL的real_escape_string
函数)。
