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函数)。

