《SQL必知必会》
介绍需要了解的SQL(Structured Query Language——结构化查询语言)
知识,从简单的数据检索
入手,逐步过渡到一些较为复杂的内容,如联结
、子查询
、存储过程
、游标
、触发器
以及表约束
等。
第1课 了解SQL
介绍什么是SQL
,它为什么很有用。
1.1 数据库基础
1.1.1 数据库
数据库
是一个以某种有组织的方式存储的数据集合(通常是一个文件或一组文件)。最简单的办法是将数据库想象为一个文件柜。这个文件柜是一个存放数据的物理位置,不管数据是什么,也不管数据是如何组织的。
- 数据库软件应称为
数据库管理系统DBMS
。数据库
是通过DBMS
创建和操纵的容器。
1.1.2 表
文件称为表。表
是一结构化的文件,可用来存储某种特定类型的数据。表可以保存顾客清单、产品目录、或者其他信息清单。
- 数据库中的每个表都有一个名字来标识自己。这个名字是唯一的,即数据库中没有其他表具有相同的名字。
- 表具有一些特性,这些特性定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。描述表的这组信息就是所谓的
模式schema
,模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。 模式
:关于数据库和表的布局及特性的信息。
1.1.3 列和数据类型
表
由列组成。列存储表中某部分的信息。
列
:表中的一个字段。所有表都是由一个或多个列组成的。
分解数据
正确地将数据分解为多个列极为重要。 例如,城市、州、邮政编码应该总是彼此独立的。通过分解这些数据,才有可能利用特定的列对数据进行分类和过滤(如找出特定州或特定城市的所有顾客)。
数据类型datatype
定义了列可以存储哪些数据种类。每个列都有相应的数据类型
,它限制该列中存储的数据。- 数据类型还帮助正确地分类数据,并在优化磁盘使用方面起重要的作用。
数据类型兼容
数据类型及其名称是SQL不兼容的一个主要原因。虽然大多数基本数据类型得到了一致的支持,但许多高级的数据类型却没有。更糟的是,偶尔会有相同的数据类型在不同的DBMS中具有不同的名称。对此用户毫无办法,重要的是在创建结构时要记住这些差异。
1.1.4 行
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
行row
:表中的一个记录record
。
1.1.5 主键
表中每一行都应该有一列(或几列)可以唯一标识自己。
主键primary key
:一列(或几列),其值能够唯一标识表中每一行。主键
用来表示一个特定的行。- 没有主键,更新或删除表中特定行就极为困难。
- 应该总是定义主键。
⭐️是主键的条件:
-
任意两行都不具有相同的主键值。
-
每一行都必须具有一个主键值(主键列不允许NULL值)。
-
主键列中的值不允许修改或更新。
-
主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)。
-
也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。
还有一种非常重要的键,称为外键
。