SQL数据库中的完整性约束详解(sql数据库完整性约束)

SQL是一种强大的数据库语言,通过SQL语言,可以在数据库中定义各种规则、限制来维护数据的一致性、准确性和完整性等多个方面的要求。而完整性约束是SQL中的一种重要规则,本文将对SQL数据库中的完整性约束做详细的解释和说明。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名与空间、虚拟空间、营销软件、网站建设、邵原网站维护、网站推广。

1. 什么是完整性约束?

完整性约束(Integrity Constrnt)是SQL中的一种数据规则,用于限制数据库中的数据格式、类型、内容等的有效性,从而保证数据的正确性、一致性和合理性。

2. 完整性约束的种类

在SQL中,完整性约束主要包括以下几种类型:

2.1 非空约束(Not Null)

非空约束用于在数据库中限制某个字段(列)的值不能为空值(null),如果在添加或更新数据时,该字段为空,则会引发错误。

2.2 唯一约束(Unique)

唯一约束用于在数据库中限制某个字段(列)的值不能重复,即该字段的值在整个表中必须是唯一的。

2.3 主键约束(Primary Key)

主键约束用于在数据库中限制某个字段(列)的值不能为null,并且该字段的值在整个表中必须唯一。而且,每个表中只能有一个主键。

2.4 外键约束(Foreign Key)

外键约束用于在数据库中定义两个表之间的关联关系,如果两个表之间存在外键关系,则删除或修改父表中的数据时,必须要满足某些条件,例如在主表中必须有匹配的子表记录。

2.5 检查约束(Check)

检查约束用于在数据库中限制某个字段(列)的值必须满足特定条件,例如价格必须大于0,年龄必须在0~150之间等。

3. 完整性约束实例

下面是一些使用SQL完整性约束的实例:

— 创建一个学生表,用于演示各种完整性约束

CREATE TABLE students (

id INT PRIMARY KEY,

name VARCHAR(50) NOT NULL,

age INT CHECK(age>=0 AND age

gender ENUM(‘male’,’female’) NOT NULL,

phone VARCHAR(11) UNIQUE

);

3.1 非空约束(Not Null)

在上面的表中,名字(name)字段被定义为非空字段,确保在添加学生时该字段不能为null:

— 在学生表中添加一条记录,缺少名字会报错

INSERT INTO students (id, age, gender, phone) VALUES (1, 20, ‘male’, ‘135********’);

— 在学生表中添加一条记录,名字不为空

INSERT INTO students (id, name, age, gender, phone) VALUES (2, ‘Tom’, 18, ‘male’, ‘152********’);

3.2 唯一约束(Unique)

在上面的表中,(phone)字段的值必须是唯一的,否则会报错:

— 在学生表中添加一条记录,已经存在会报错

INSERT INTO students (id, name, age, gender, phone) VALUES (3, ‘Lucy’, 19, ‘female’, ‘152********’);

— 在学生表中添加一条记录,不重复

INSERT INTO students (id, name, age, gender, phone) VALUES (4, ‘Jack’, 20, ‘male’, ‘186********’);

3.3 主键约束(Primary Key)

在上面的表中,ID字段被定义为主键,确保在添加学生数据时,ID值不会重复,并且不能为空:

— 在学生表中插入一条记录,ID值不为null且不重复

INSERT INTO students (id, name, age, gender, phone) VALUES (5, ‘Lisa’, 19, ‘female’, ‘135********’);

— 在学生表中插入一条记录,ID值为null会报错

INSERT INTO students (name, age, gender, phone) VALUES (‘Smith’, 22, ‘male’, ‘139********’);

3.4 外键约束(Foreign Key)

在SQL数据库中,使用外键约束可以在两个表之间建立关联关系,并且确保删除子表中的记录不会导致主表中的数据丢失。例如下面例子中的两个表格:

— 创建两个表,一个班级表和一个学生表

CREATE TABLE classes (

class_id INT PRIMARY KEY,

class_name VARCHAR(20) NOT NULL

);

CREATE TABLE students (

id INT PRIMARY KEY,

name VARCHAR(50) NOT NULL,

age INT CHECK(age>=0 AND age

gender ENUM(‘male’,’female’) NOT NULL,

phone VARCHAR(11) UNIQUE,

class_id INT,

FOREIGN KEY (class_id) REFERENCES classes(class_id)

);

— 在学生表中插入数据,确保外键约束关系存在

INSERT INTO classes(class_id, class_name) VALUES(1, ‘Class 1’);

INSERT INTO students(id, name, age, gender, phone, class_id) VALUES(1, ‘John’, 18, ‘male’, ‘135********’, 1);

3.5 检查约束(Check)

使用检查约束(Check)可以限制数据必须满足特定条件,例如年龄必须在0~150之间等。下面是一个加了检查约束的实例:

— 在学生表中加一个检查约束,确保年龄必须在0~150之间

ALTER TABLE students ADD CHECK(age >=0 AND age

— 在学生表中插入一条数据,该数据满足约束条件

INSERT INTO students (id, name, age, gender, phone, class_id) VALUES (2, ‘Mike’, 20, ‘male’, ‘152********’, 1);

— 在学生表中插入一条数据,该数据不满足约束条件

INSERT INTO students (id, name, age, gender, phone, class_id) VALUES (3, ‘Kate’, -1, ‘female’, ‘139********’, 1);

4.

在SQL数据库开发中,完整性约束是非常重要的一个概念。SQL中提供了多种约束类型,其中包括非空(NOT NULL)、唯一(UNIQUE)、主键(PRIMARY KEY)、外键(FOREIGN KEY)和检查(CHECK)等。正确使用完整性约束可以有效的保证数据的一致性、准确性和完整性等多个方面的要求。同时,在开发中也需要考虑到约束的性能问题,如约束重复或失去了意义,需要及时的删除或优化。

成都网站建设公司-创新互联,建站经验丰富以策略为先导10多年以来专注数字化网站建设,提供企业网站建设,高端网站设计,响应式网站制作,设计师量身打造品牌风格,热线:028-86922220

SQL完整性约束条件中的主键、外键约束是什么意思

以一个例子来说明下。比如一个省表有省ID和省名,市表有市ID、慎乱市名和省ID那么在市表里面的外键就是省ID,当你设置了他们的约束,这样起到一个数据完整性的作用,当你删除一个省的时候,如果下面有市,那么你直接删除是删除不了的,这就是一种约束梁孝者,防止橡薯数据的不完整性

比如, 下面的例子

学号(PK),班级, 年级, 姓名

LODGE

SUSAN

在这个表里, 班级为01的记录中, 年级却有两个2年级和1年级, 这就是冗余代来的问题了, 尽管可以通过对输入的控制来避免这样的情况, 但由于逻辑上的问题往往使处理程序很复杂, 又很容易造成BUG, 比如由于某种疏忽而出现上述情况,而使用这些数据的处理, 就极有可能出现错误,.

那么, 怎样避免呢, 观察上面几个字段, 就不难发现年级对班级有依赖性, 换句话说, 只需知道班级就能知道年级了, 所以可以把表拆成这个样子

S(学号(PK),班级(FK), 姓名)

C(班级(PK),年级)

这样逻辑上就清晰了, 因为没了冗余, 对输入的控制就简单了, 因为, 如果有疏忽, 就会引起错误, 而一旦写到表里, 这样的数据就肯定是完整的, 从而避免了很多后期处理上出现BUG的可能性

现在来看看 上面的设计, 在这里偶要利用这个机会来说明一下, 数据库的设计思路.

s(学号(PK),姓名,编号(FK))

c(编号(PK),班级, 年级,系名)

偶猜想编号是对班级的编号, 所以这个结构和上面的结构是一致的

但是, 问题在于这个结构中比已知条件多了两个字段, 编号和系名

这样很容易引起新的问题, 比如编号作为主键它的值如何确定的问题(这很重要, 如果处理不当就会发生逻辑上的错误). 在初期设计中, 应当特别注意这些问题, 不要任意追加实际上不存在的字段, 这样才能保证设计的严密性, 当然, 在处理中使用数字类型来保证处理的效率等问题是要考虑的, 不过这应该放在后面, 等到系统的团卖御基本逻辑完全确定了, 再做调整. 这样一个过程, 就是从物理设计到逻辑设计的过程,

在这里所谓物理设计, 就是完全按照实际的情况, 做出的数据库结构设计和处理逻辑塌岩设计. 在这一阶段完全不需要考虑, 和数据库库应用有关的问题, 是纯粹的现实的反映. 这一阶段的原则是, 原原本本反映出现实的情况, 特别是要明确界定系统和用户之间的分界点.

而所谓逻辑设计, 就是要把上面抽象好的物理设计进行优化, 作出高效益的数据库结构和系统处理流程, 并追加必要的逻辑字段如上面的编号和这些字段处理方法, 这时候的原则是, 完全反映物理逻辑并保持物理设计中已经确定的用户界面

就上面这个简单的例子来说

在物理设计的时候, 偶们确定好了这样的结构

S(学号(PK),班级(FK), 姓名)

C(班级(PK),年级)

这就意味着, 用户只需知道

学号,班级, 姓名,年级

就能使用偶们的系统

而在逻辑设计阶段, 偶们注意到, 实际上用户对班级名称有很多种不同的叫法, 直接作主键计算机处理起来比较难

因此, 设计出这样的结构

s(学号(PK),姓名,编配态号(FK))

c(编号(PK),班级, 年级)

但是这样用户在输入数据的时候, 就必须要明白班级编号的意思, 这不符合偶们所设计的物理界面的要求, 所以要再改进

s(学号(PK),姓名,编号(FK))

c(编号(PK),班级, 年级)

d(班级(PK), 编号)

偶们增加了表d这是一个字典, 它的作用是可以让用户输入班级名而系统可以找到对应的编号, 请注意, 在d中的编号不是外键, 因为它和偶们的主处理逻辑没有直接关系, 它只是个辅助表, 另外, c中保留了班级字段, 但这不是冗余, 这个班级和d的班级是两个概念, 前者是班级的表示名称, 而后者是班级的输入名称

最后, 要说明的是, 偶们的最终设计, 仍然犯了个错误, 这就是, 偶们增加了一个新物理流程-字典编辑, 这时候, 偶们需要和用户共同讨论, 看看他们是否真得愿意这么使用, 而通常的结果会是,

他们不打算用这个字典, 他们完全能够使用标准输入名称, 于是偶们的字典里就只能保存一个名称了, 显然然偶们可以去掉这个表, 但用户的保证是不可信的, 偶们不能允许在他们犯错误的情况下, 而使得系统可能保存错误的结果, 于是偶们再行调整偶们的设计方案

s(学号(PK),姓名,编号(FK))

c(编号(PK),班级(NOT NULL UNIQUE), 年级)

这个最终方案是这个意思, 因为偶们不信任用户, 所以偶们仍然不能使用班级作为主键, 这样即使用户输入有误也不会增加错误的记录, 根据物理逻辑的要求, 偶们把班级作为候补主键, 使它不能为空而且不能重复, 这样就基本上满足要求了, 显然编号成为了内部逻辑字段, 它可以完全由偶们的系统自行决定

楼上贴那么多、晕了、我来简单说明下、所谓主键呢、就相当于我们的身份证一样、独一无二含念、起到唯谈码困一标识的作用、而外键呢、比如在校读书时、班级会有你的记录、当意外辍学、原来的班级就会把你的信息删除、这样才能保证数据的完整性、其他的还模禅是什么外键约束、唯一约束、都是为了数据库的规范性以及完整性建立的、 完全个人理解、祝君好运、、

关于sql 数据库完整性约束的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

创新互联【028-86922220】值得信赖的成都网站建设公司。多年持续为众多企业提供成都网站建设,成都品牌建站设计,成都高端网站制作开发,SEO优化排名推广服务,全网营销让企业网站产生价值。

文章标题:SQL数据库中的完整性约束详解(sql数据库完整性约束)
标题链接:http://www.hantingmc.com/qtweb/news38/246038.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联