什么是 结构化查询语言?
结构化查询语言是一种标准化的编程语言,专为管理和操作关系数据库而设计。它用于查询、插入、更新和删除数据,以及创建和修改数据库结构。
快速了解
| 创建时间 | 1974 年由 IBM(Donald Chamberlin 和 Raymond Boyce)开发 |
|---|---|
| 规范文档 | 官方规范 |
工作原理
SQL 于 20 世纪 70 年代初在 IBM 开发,并于 1986 年成为 ANSI 标准。它提供了一种声明式的数据库操作方法,用户指定想要什么数据,而不是如何检索它。SQL 由几个子语言组成:DDL(数据定义语言)用于模式、DML(数据操作语言)用于数据、DCL(数据控制语言)用于权限、TCL(事务控制语言)用于事务。虽然核心语法是标准化的,但不同的数据库系统(MySQL、PostgreSQL、SQL Server、Oracle)有自己的扩展和变体。
主要特点
- 声明式语言 - 指定要什么,而不是如何做
- ANSI/ISO 标准化,带有供应商扩展
- 支持 CRUD 操作(创建、读取、更新、删除)
- 包括 DDL、DML、DCL 和 TCL 子语言
- 基于集合论的关系模型
- 支持具有 ACID 属性的事务
常见用途
- 数据库查询和报告
- 数据操作和转换
- 数据库模式设计和管理
- 后端应用数据访问
- 数据分析和商业智能
示例
Loading code...常见问题
SQL 中 WHERE 和 HAVING 子句有什么区别?
WHERE 子句在分组之前过滤行,作用于原始数据;HAVING 子句在分组之后过滤组,作用于聚合结果。WHERE 不能使用聚合函数(如 COUNT、SUM),而 HAVING 通常与聚合函数配合使用。例如,WHERE salary > 5000 过滤个人工资,而 HAVING AVG(salary) > 5000 过滤平均工资超过 5000 的部门。
什么是 SQL 注入?如何防止?
SQL 注入是一种安全漏洞,攻击者通过在用户输入中插入恶意 SQL 代码来操纵数据库查询。防护措施包括:使用参数化查询或预编译语句、对用户输入进行严格验证和转义、使用 ORM 框架、限制数据库账户权限、以及定期进行安全审计。永远不要直接拼接用户输入到 SQL 语句中。
INNER JOIN、LEFT JOIN 和 RIGHT JOIN 有什么区别?
INNER JOIN 只返回两个表中匹配的行;LEFT JOIN 返回左表所有行,右表无匹配时填充 NULL;RIGHT JOIN 返回右表所有行,左表无匹配时填充 NULL。还有 FULL OUTER JOIN 返回两表所有行。选择哪种连接取决于业务需求,例如查询所有用户及其订单(包括无订单用户)应使用 LEFT JOIN。
如何优化 SQL 查询性能?
SQL 优化策略包括:为常用查询列创建索引、避免 SELECT * 而只选择需要的列、使用 EXPLAIN 分析查询计划、避免在 WHERE 子句中对列使用函数、合理使用连接代替子查询、限制返回结果数量(LIMIT)、以及定期更新表统计信息。此外,数据库设计时应遵循适当的范式化原则。
事务的 ACID 属性是什么意思?
ACID 是数据库事务的四个关键属性:原子性(Atomicity)确保事务要么全部完成要么全部回滚;一致性(Consistency)确保事务前后数据库处于有效状态;隔离性(Isolation)确保并发事务互不干扰;持久性(Durability)确保已提交的事务永久保存。这些属性共同保证了数据库操作的可靠性和数据完整性。