Constraints
Constraints,约束的意思。通常用来约束加入表中的数据,如果与约束冲突,则行为会被终止。
通常情况下,Constraints会与CREATE TABLE或ALTER TABLE搭配使用。
Constraints在数据仓库中一直都是一个很重要的概念,是用来管理如何插入或处理数据库数据的规则。要知道,对于数据库而言,最重要的是数据库数据的规范化和标准化,这将决定了当前数据的延展性和复用性。CREATE TABLE:创建表语句。ALTER TABLE:更新表语句。
Constraints数据仓库中经常使用的有以下几种约束:
- NOT NULL(不为空)
- UNIQUE(唯一)
- PRIMARY KEY(主键)
- FOREIGN KEY(外键)
- CHECK(检查)
- DEFAULT(默认值)
接下来我们来了解一下不同约束的使用场景。
A.NOT NULL
NOT NULL会约束列不接受空值,因此当插入数据或者更新数据的时候,如果列的约束为NOT NULL,那么插入和更新行为将会被终止。
语法
代码语言:txt复制CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL,
列名称 数据类型 NOT NULL,
......
)
使用实例
代码语言:txt复制CREATE TABLE WHITETEST (TEST INT NOT NULL, ID INT)
我们通过上述语句创建了名为WHITETEST的表,并向TEST添加约束为不为空。
我们现在要对WHITETEST表进行数据更新。
代码语言:txt复制INSERT INTO WHITETEST (TEST , ID) VALUES ( NULL , 13)
在数据仓库中我们执行上述语句,会返回如下结果:
因为列限制了TEST不为空,因此数据无法更新。
我们插入其他数据看看。
代码语言:txt复制INSERT INTO WHITETEST (TEST , ID) VALUES ( 16 , 13)
结果如下:
我们可以清楚的看到,数据插入成功。
B.UNIQUE与PRIMARY KEY
UNIQUE会约束列的数据作为唯一标识而存在。
PRIMARY KEY作为表的主键而存在。
注意
- UNIQUE与PRIMARY KEY区别是很大的。
- PRIMARY KEY会自带UNIQUE的属性。
- 表中可以有多个列为UNIQUE的约束,但是只能有一个PRIMARY KEY。
换句话理解就是维度的主键(唯一标识)可以有多个列,但是作为表的主键只能有一个。
- PRIMARY KEY任意两行的主键值都不能相同
- 每行都需要有一个PRIMARY KEY
- PRIMARY KEY的列从不修改更新
- PRIMARY KEY不允许重用,主键值被删除的情况下也不可以给新行使用
- UNIQUE可以包含NULL值
- UNIQUE可修改更新
- UNIQUE可重复使用
例如: 我们有一张订单表,其中存在订单ID,那么此时订单ID可以使用UNIQUE进行约束,来保证订单ID不重复。但是我们需要一个额外的主键来标记当前表中的每一行记录。以方便其他表引用此表中的数据。注:订单ID也可以作为主键,但是有可能信息过长,而且有可能产生信息被利用的情况。
语法
UNIQUE语法
代码语言:txt复制CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL UNIQUE,
列名称 数据类型 NOT NULL,
CONSTRAINT uc_约束名 UNIQUE (列名称,列名称...)//多个列定义约束
......
)
PRIMARY KEY语法
代码语言:txt复制CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL PRIMARY KEY,
列名称 数据类型 NOT NULL,
CONSTRAINT pk_约束名 PRIMARY KEY (列名称,列名称...)//多个列定义约束
......
)
C.FOREIGN KEY
一个表中的外键,通常可以用来连接另外一张表中的主键。
举个例子: 我们有一张Fact表和一张Product表,两张表通过ProductID进行关联。那么Product表中的ProductID就是主键,Fact表中的ProductID就是外键。
同时,外键的存在,可以防止意外删除。这对于数据仓库来说,很重要。
语法
代码语言:txt复制CREATE TABLE 表名称
(
列名称 数据类型 FOREIGN KEY REFERENCES 表名称(主键ID),
列名称 数据类型 NOT NULL,
CONSTRAINT fk_约束名 FOREIGN KEY (外键)
REFERENCES 表名称(主键)//多个列定义约束
......
)
D.CHECK
CHECK通常可以用来约束限制列值的范围。
语法
代码语言:txt复制CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL CHECK (列名称>0),
列名称 数据类型 NOT NULL,
CONSTRAINT chk_约束名 CHECK (列名称>0,列名称='条件')//多个列定义约束
......
)
E.DEFAULT
DEFAULT通常可以用来约束列的默认值,如果没有其他值插入的情况下,默认值会出现在所有记录中。
语法
代码语言:txt复制CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL DEFAULT '默认值',
列名称 数据类型 NOT NULL,
......
)
约束的用法到这里基本上就差不多了,因为时间关系没有给小伙伴列举各个使用例子,但是建议小伙伴去动手尝试一下。
这里是白茶,一个PowerBI的初学者。