了解 SQL 与数据库
1.1 数据库基础
数据库的典型应用场景:手机联系人、电子邮件地址簿、网站搜索、系统登录、ATM 取款机等。
1.1.1 基本概念
- 数据库(Database)
- 以某种有组织的方式存储的数据集合,是保存有组织数据的容器(通常是一个文件或一组文件)。
用“数据库”代表数据库软件是不正确的,也因此产生大量混淆。 确切地说,数据库软件应称为数据库管理系统(DBMS)。 数据库是通过 DBMS 创建和操纵的容器,不同数据库的形式与实现各不相同。
- 表(Table)
- 某种特定类型数据的结构化清单,可用于存储顾客清单、产品目录、订单信息等。
存储在表中的数据应为同一类型的数据或清单。不应将顾客清单与订单清单放在同一张表中,否则会给后续检索和访问带来困难。
- 数据库中每个表拥有唯一的表名,同一数据库内不允许重名。
- 不同数据库可以使用相同的表名,通过
数据库名+表名保证全局唯一。
描述表的结构、数据存储规则、字段命名等信息,称为模式(schema)。模式既可以描述单张表,也可以描述整个数据库及表间关系。
- 模式(Schema)
- 关于数据库和表的布局及特性的信息。
1.1.2 列和数据类型
表由列(column)组成,一列存储表中某一类信息。
- 列(Column)
- 表中的一个字段。所有表都由一个或多个列构成。
可以把数据库表想象成网格: 垂直方向是列,每列存储一类信息(如顾客编号、姓名、城市、邮编等)。
正确地将数据分解为多个列极为重要。 例如城市、州、邮政编码应拆分为独立列,才能按地区分类和筛选。 是否继续分解(如街道名与门牌号),取决于是否需要按其中某部分排序或筛选。
每个列都必须指定数据类型,用于限定该列可以存储什么内容。
- 数据类型(Datatype)
- 定义了列可以存储哪些数据种类,限制或允许某类数据存入。
数据类型的作用: - 保证数据规范,防止非法值录入
优化存储与性能
是不同 DBMS 之间兼容性差异的主要来源之一
数据类型及其名称是 SQL 不兼容的主要原因。 多数基本类型通用,但高级类型差异很大,同一类型在不同 DBMS 中名称也可能不同。 设计表结构时需要特别注意。
1.1.4 行
表中的数据按行存储,每条记录独占一行。
- 行(Row)
- 表中的一个记录。
日常也常称为“记录(record)”,两个词基本通用。
从技术术语上讲,行(row) 是更标准的说法。
1.1.5 主键
表中每一行都应该有能唯一标识自己的一列或多列,例如:顾客编号、订单 ID、雇员 ID、ISBN 等。
- 主键(Primary Key)
- 一列或多列,其值能够唯一标识表中的每一行。
主键用于精确定位某一行。没有主键,更新或删除数据时极易误操作。
虽然不是强制要求,但绝大多数数据库设计都会为每张表设置主键,便于后续数据维护。
主键必须满足以下条件:
任意两行主键值不重复
每一行必须有主键值(不允许
NULL)主键值不允许修改或更新
主键值一般不重复使用(删除行后,其主键不再分配给新行)
主键可以是单列,也可以是多列组合。多列主键要求所有列的组合值唯一,单列可以重复。
另一种重要的键:外键(Foreign Key),将在第 12 课介绍。
1.2 什么是 SQL
SQL(读作 S-Q-L 或 sequel)是 Structured Query Language(结构化查询语言) 的缩写,是专门用于与数据库沟通的语言。
SQL 设计目标非常明确:提供一种简单高效的方式,从数据库中读写和管理数据。
SQL 的优点
不是某家厂商专有,绝大多数主流 DBMS 都支持
语法简单,关键词少且接近自然英语,易学易用
语法简洁但能力强大,可实现复杂高级的数据操作
许多 DBMS 会在标准 SQL 基础上增加扩展语法,提供专属功能。
Oracle:PL/SQL
SQL Server:Transact-SQL
标准 SQL 由 ANSI 制定,称为 ANSI SQL。