BI-SQL丨Constraints

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,那么插入和更新行为将会被终止。

语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL,
列名称 数据类型 NOT NULL,
......
)

使用实例

CREATE TABLE WHITETEST (TEST INT NOT NULL, ID INT)

我们通过上述语句创建了名为WHITETEST的表,并向TEST添加约束为不为空。

我们现在要对WHITETEST表进行数据更新。

INSERT INTO WHITETEST (TEST , ID) VALUES ( NULL , 13)

在数据仓库中我们执行上述语句,会返回如下结果:

因为列限制了TEST不为空,因此数据无法更新。

我们插入其他数据看看。

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语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL UNIQUE,
列名称 数据类型 NOT NULL,
CONSTRAINT uc_约束名 UNIQUE (列名称,列名称...)//多个列定义约束
......
)

PRIMARY KEY语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL PRIMARY KEY,
列名称 数据类型 NOT NULL,
CONSTRAINT pk_约束名 PRIMARY KEY (列名称,列名称...)//多个列定义约束
......
)

C.FOREIGN KEY

一个表中的外键,通常可以用来连接另外一张表中的主键。

举个例子:

我们有一张Fact表和一张Product表,两张表通过ProductID进行关联。

那么Product表中的ProductID就是主键,Fact表中的ProductID就是外键。

同时,外键的存在,可以防止意外删除。这对于数据仓库来说,很重要。

语法

CREATE TABLE 表名称
(
列名称 数据类型 FOREIGN KEY REFERENCES 表名称(主键ID),
列名称 数据类型 NOT NULL,
CONSTRAINT fk_约束名 FOREIGN KEY (外键)
REFERENCES 表名称(主键)//多个列定义约束
......
)

D.CHECK

CHECK通常可以用来约束限制列值的范围。

语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL CHECK (列名称>0),
列名称 数据类型 NOT NULL,
CONSTRAINT chk_约束名 CHECK (列名称>0,列名称='条件')//多个列定义约束
......
)

E.DEFAULT

DEFAULT通常可以用来约束列的默认值,如果没有其他值插入的情况下,默认值会出现在所有记录中。

语法

CREATE TABLE 表名称
(
列名称 数据类型 NOT NULL DEFAULT '默认值',
列名称 数据类型 NOT NULL,
......
)

约束的用法到这里基本上就差不多了,因为时间关系没有给小伙伴列举各个使用例子,但是建议小伙伴去动手尝试一下。

这里是白茶,一个PowerBI的初学者。

Fabric丨白茶 文章被收录于专栏

数据分析进阶之路,带你深入了解可视化技巧。

全部评论

相关推荐

刚刷到字节跳动官方发的消息,确实被这波阵仗吓了一跳。在大家还在纠结今年行情是不是又“寒冬”的时候,字节直接甩出了史上规模最大的转正实习计划——ByteIntern。咱们直接看几个最硬的数,别被花里胡哨的宣传词绕晕了。首先是“量大”。全球招7000多人是什么概念?这几乎是把很多中型互联网公司的总人数都给招进来了。最关键的是,这次的资源分配非常精准:研发岗给了4800多个Offer,占比直接超过六成。说白了,字节今年还是要死磕技术,尤其是产品和AI领域,这对于咱们写代码的同学来说,绝对是今年最厚的一块肥肉。其次是大家最关心的“转正率”。官方直接白纸黑字写了:整体转正率超过50%。这意味着只要你进去了,不划水、正常干,每两个人里就有一个能直接拿校招Offer。对于2027届(2026年9月到2027年8月毕业)的同学来说,这不仅是实习,这简直就是通往大厂的快捷通道。不过,我也得泼盆冷水。坑位多,不代表门槛低。字节的实习面试出了名的爱考算法和工程实操,尤其是今年重点倾斜AI方向,如果你简历里有和AI相关的项目,优势还是有的。而且,转正率50%也意味着剩下那50%的人是陪跑的,进去之后的考核压力肯定不小。一句话总结: 27届的兄弟们,别犹豫了。今年字节这是铁了心要抢提前批的人才,现在投递就是占坑。与其等到明年秋招去千军万马挤独木桥,不如现在进去先占个工位,把转正名额攥在手里。
喵_coding:别逗了 50%转正率 仔细想想 就是转正与不转正
字节7000实习来了,你...
点赞 评论 收藏
分享
找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务