文章摘要: 结构化查询语言(Structured Query Language),简称SQL。是一种用于特殊目的的编程语言,用于存取数据以及查询、更新和管理关系数据库系统。
提示
- SQL中的注释不要使用
#作为单行注释,这会导致数据迁移时导致错误。 - 本文章命令中的
[ ]括起来的表示可选的内容。 - 在使用语法时需要时刻确定自己所在的“数据库”、再给出具体的“表”来查数据。
- 查询的语法比较常用,且比较复杂,查询与“添加、修改、删除”的语法分开记忆。
- 字符串、日期类型、数据中间有空格,都需要将数据包含在引号中。
简介
简要说明
- 结构化查询语言(Structured Query Language),简称SQL。
- 是一种用于特殊目的的编程语言,用于存取数据以及查询、更新和管理关系数据库系统。
- SQL是所有关系型数据库的统一操作规范。
主要功能
- 数据查询:允许用户从数据库中检索数据。
- 数据操作:可以插入、更新和删除数据库中的记录。
- 数据定义:用于创建、修改和删除数据库中的表格和其他对象。
- 数据控制:提供权限和访问控制,以保护数据库中的数据。
- 事务管理:支持事务,确保数据库操作的原子性、一致性、隔离性和持久性(ACID属性)。
注意事项
- 安全性:编写SQL查询时要注意防止SQL注入攻击,确保数据安全。
- 性能优化:复杂的查询可能会影响数据库性能,应优化SQL语句和数据库结构。
- 数据完整性:在设计数据库时,应确保数据的完整性和一致性。
- 标准遵从性:不同的数据库系统可能有不同的SQL方言,应了解所使用系统的特定语法和功能。
适用场景
- 数据管理:在企业和组织中管理大量数据。
- 数据分析:进行数据分析和报告,支持决策制定。
- 应用程序开发:为需要数据存储和检索的应用程序提供后端支持。
- 网站开发:管理网站后端数据库,如用户信息、内容管理等。
- 数据科学:在数据科学项目中,用于数据清洗、准备和探索性数据分析。
- 商业智能:构建商业智能报告和仪表板,以监控业务关键指标。
基本概念
数据写在数据库中的表中。数据库和表是数据的载体。
通用语法
- 可以单行或多行书写,以分号
;表示一句SQL的结尾。 - 可以使用空格和缩进来增强语句的可读性。
- 不区分大小写,关键字建议使用大写。
注释格式
- 单行注释:
-- 注释内容 - 多行注释:
/* 注释内容 */
对象
| 数据库对象 | 对应关键字 | 描述 |
|---|---|---|
| 表 | table | - 表是存储数据的逻辑单元。 - 以行和列的形式存在。 - 列是字段,行是记录。 |
| 数据字典 | - 系统表,存放数据库相关的表。 - 内容通常由数据库系统维护。 - 程序员通常不该手动修改表和数据。 | |
| 约束 | constraint | - 执行数据校验的规则。 - 用于保证数据完整性的规则。 |
| 视图 | view | - 一个或多个数据表的逻辑显示。 - 视图不存储数据。 |
| 索引 | index | - 用于提高查询性能。 - 类似书的目录。 |
| 函数 | function | - 用于完成一次特定的计算。 - 具有一个返回值。 |
| 存储过程 | procedure | - 用于完成一次完整的业务逻辑。 - 没有返回值。 - 但可以同传出参数将多个值传给调用环境。 |
| 触发器 | trigger | - 相当于一个事件监听器。 - 当数据库发生特定的事件后,触发器被触发完成相应的处理。 |
SQL语句和语法
详细总结:Language-SQL-语句语法
数据 - 定义语言(DDL)
- 数据定义语言
- 用于定义数据库对象(数据库、表、字段)。
- 主要针对
数据库、表、字段进行增、删、改、查的操作命令。 字段是表的每列数据的标识。- 这些不是实际真正存储的数据信息,此处不操作实际存储的数据。
数据 - 操作语言(DML)
- 数据操作语言
- 用于对表的
数据进行增加、删除、修改的操作操作命令。 - 提示:此处没有查询命令。
- 需要根据已经定义创建完的数据库、表、表中的字段后,再进行操作的。
数据 - 查询语言(DQL)
- 数据查询语言
- 用于查询数据库表中的数据
权限 - 控制语言(DCL)
- 用于管理数据库用户、控制数据库的访问权限。
事务 - 控制语言(TCT)
- 用于控制SQL执行的提交和回滚。
- 原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败。
- 一致性:事务完成时,必须使所有的数据都保持一致状态。
- 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- 持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
事务产生的问题
- 脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。
- 不可重复读(nonrepeatable read):同一个查询在同一个事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生不可重复读。
- 幻读(phantom read):同一个查询在同一事务中多次进行,由于其他提交事务所做的插入或删除操作,每次返回不同的结果集,此时返回幻读。
事务的隔离界别
- Read Uncommitted(未提交读):事务中的修改,即使没有提交,对其他事务也是可见的。
- Read Committed(提交读):一个事务只能看见已经提交的事务所做的修改。
- Repeatable Read(重复读):在同一事务中,查询同一个记录会返回相同的结果,即使在这个事务中其他地方已经修改过这个记录。
- Serialize(串行化):所有事务依次逐个执行,这样每个事务都感觉不到其他事务的存在。
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
|---|---|---|---|---|
Read Uncommitted(未提交读) | Y | Y | Y | 不加锁 |
Read Committed(提交读) | Y | Y | 不加锁 | |
Repeatable Read(重复读) | 不加锁 | |||
Serialize(串行化) | 加锁 |
运算符
详细总结:Language-SQL-运算符
数据类型
详细总结:Language-SQL-数据类型
约束
- 约束作用于表中字段上的规则。
- 用于限制存储在表中的数据。
- 保证数据库中数据的正确性、有效性和完整性。
详细总结:Language-SQL-约束
权限
- 权限管理是数据库管理系统(DBMS)中非常重要的一个方面,它确保了数据库的安全性、完整性和一致性。
详细总结:Language-SQL-权限
函数
- 提高代码重用性和隐藏实现细节。
- 函数即别人封装好的模板代码。
详细总结:Language-SQL-函数
字符集
校验规则
索引
- 数据库索引是一种数据结构。
- 用于帮助数据库高效地执行查询操作。(类似于书籍的目录,快速定位到想要查找的信息)
优点
- 提高查询性能。
- 保证数据的唯一性。
- 加速排序和分组操作。
缺点
- 降低写入性能,因为索引需要更新。
- 占用额外的存储空间。
- 增加数据库的维护复杂度。
作用
- 提高查询速度:通过索引,数据库可以快速定位到数据行,而不需要扫描整个表。
- 确保数据的唯一性:唯一索引可以保证表中某一列或列组合的数据是唯一的。
- 帮助排序和分组:索引可以存储数据的排序顺序,从而加快排序和分组操作。
注意事项
- 选择性:为高选择性的列创建索引,即列中具有大量唯一值的列。
- 列顺序:在复合索引中,根据查询条件将最常使用的列放在索引的前面。
- 维护成本:索引可以提高查询速度,但也会增加插入、更新和删除操作的成本。
- 空间占用:索引需要额外的磁盘空间来存储。
- 性能监控:定期检查索引的性能,必要时进行优化或重建。
索引的类型
- B-Tree索引:最常用的索引类型,适用于各种查询类型。
- 哈希索引:基于哈希表实现,适用于精确匹配查询。
- 全文索引:用于文本搜索,可以快速查找文本中的关键词。
- 空间索引:用于地理空间数据的搜索。