sql中完整性约束怎么实现

sql中完整性约束怎么实现,第1张

数据完整性靠添加约束实现。实现完整性约束的方法依类别不同而不同。完整性约束可以分为两大类:静态约束和动态约束。

1、静态约束

静态约束是对数据库状态的约束,有可分为固定约束、隐含约束和显示约束。

2、固定约束

是数据模型固有的约束,如关系的属性是原子的,即满足INF的约束。固有约束在DBMS实现时已经考虑。

3、隐含约束

指隐含于数据模式中的约束,一般用数据定义语言(DDL)语句说明,并存于数据目录中。例如,域完整性约束、实体完整性以及参照完整性约束,都由相应的DDL语句说明。

4、显示约束

固有约束、隐含约束是最基本的约束,但概括不了所有的约束。数据完整性是多种多样的,且依赖于数据的语义与应用,这些约束只有显式地说明,故称显式约束。显式约束的说明一般有三种方法:

①用过程说明约束。这种方法不约束的说明和检验交给应用程序,应用程序中可以插入一些过程,以检验数据库更新是否违反给定的约束,如果违反约束,则回滚事务。检验约束的过程一般用通用高级程序语言编写,可以表达各式各样的约束。这是一种普遍方法。

②用语言说明约束。断言指数据库状态必须满足的逻辑条件。数据库完整性约束可以看成一系列断言的集合。为了表示约束,DBMS须提供断言说明语言。

③用触发子表示约束。触发子是一个软件机制,其功能相当于WHENEVERTHEN,即一旦给定条件成立,系统就引发相应的动作。利用触发子可以表示约束,以违反约束作为条件,以违反约束的处理作为动作。

动作不限于回滚事务,也可以给用户一个消息或过程。在系统中定义一批触发之后,就会监督数据库状态,一旦出现违反约束的更新,就会引发相应的动作。

5、动态约束

动态约束不是对数据库状态的约束,而是数据库从一个状态变为另一个状态时应遵守的约束,例如在更新职工表时,工资、工龄这些属性值一般只会增加,不会减少。动态约束一般也是显式说明的。

在上述约束中,固有约束必然实施,隐含约束在大部分现代DBMS中基本实施或部分实施,显式和动态约束只在个别DBMS中实施。

扩展资料

知识点①:对数据 *** 作语句来说,数据存储到数据库中,如果我们不对其进行分析和处理的话那么数据就是没有价值的,这种用户对数据中数据的 *** 作大多数查询和修改的,修改包括了增加新的数据删除旧的数据以及更改已有的数据。

那么SQL语言提供了功能强大的数据查询以及修改功能,那么他的查询功能是html语言的核心功能,这是数据库中使用得最多的 *** 作,那么查询语句也是SQL语言中比较复杂的一个语句。

知识点②:其实查询语句是数据库 *** 作中最基本和最重要的女婿之一,它的功能是从数据库中检索满足条件的数据,查询的数据源可以来自一张表也可以来自多张表甚至是仕途,那么他的查询功能是由领航。

或者多煮几路组成的一个记录集合,并允许选择一个或多个字段来作为,输出字段了,查询语句的基本结构可以描述,在一些结构中,我们可以对指定的输出字段以及用于指定数据的来源,那么他有什么单表查询呢,数据源只设计一张表查询的话是为了帮助读者更好地理解SQL语句中的执行情况,这里指大部分查询语句均列出来返回了结果。

约束是SQL Sever自动强制数据库完整的方式,约束定义了列中允许的取值。在SQL Sever中提供五种类型的完整性约束。1、NULL/NOT NULL 约束;2、UNIQUE约束(唯一约束);3、PRIMARY KEY 约束(主键约束);4、FOREIGN KEY 约束(外键约束)5、CHECK 约束\x0d\例如:1、create table s(Sno char(6) not null,\x0d\ Sname char(10))\x0d\ 2、create table s(Sno char(6) ,\x0d\ Sname char(10) unique)\x0d\ 3、create table s(Sno char(6) primary key,\x0d\ Sname char(10))\x0d\ 4、create table SC(Sno char(6) not null foreign key references S(Sno))\x0d\ 5、create table SC(Sno char(6),\x0d\ Cno char(6),\x0d\ Score double check(Score>=0 and Score回答于 2022-11-16

数据库约束是为了保证数据的完整性而实现的一套机制,它具体的根据各个不同的数据库的实现而有不同的工具。\x0d\一般来说有以下几种实现方式:\x0d\1、检查约束:\x0d\通过在定义数据库表里,在字段级或者是在表级加入的检查约束,使其满足特定的要求。\x0d\比如以下的表定义:\x0d\CRATE TABLE student(\x0d\id serial,\x0d\name varchar(10),\x0d\scrore integer CHECK (scrore > 0));\x0d\定义分数不能小于0。\x0d\也可以在表级定义:\x0d\CHECK (字段1 秘字段2之间的关系)\x0d\2、非空约束:\x0d\这个大家应该很熟悉了。直接在字段后面加上:NOT NULL。\x0d\3、唯一约束:\x0d\定义一个唯一约束但是它并不包括NULL值。直接在字段定义后加入UNIQUE即可定义一个唯一约束。\x0d\4、主键约束:\x0d\SQL 92建议在建立一个表时定义一个主键:它其实就是:唯一约束+非空约束。\x0d\5、外键:\x0d\所有约束里数这个约束最有意思了:比如说有这样一件事,你需要做一个学生查询的网页。那么为了方便,你将建立三个数据表:\x0d\一个是学生情况表:\x0d\CREATE TABLE student(\x0d\id serial primary ke,\x0d\name varchar(10),\x0d\\x0d\);\x0d\一个表是记录所开的课程\x0d\CREATE TABLE class(\x0d\class_id varchar(5) primary key,\x0d\describe varchar(20)\x0d\\x0d\);\x0d\一个表是记录学生成绩的表:\x0d\CREATE TABLE score(\x0d\id integer references student,\x0d\class_id varchar(5) references class,\x0d\score integer CHECK (score > 0)\x0d\);\x0d\\x0d\这个时候你会发现以下几件事:\x0d\如果你在成绩表里输入不存在的学生和课程,数据系统将拒绝。如果你要删除一个学生,但是他已经在成绩表里有记录,数据库将拒绝删除这个学生的记录。\x0d\那么我们现在来看,前面一个对我们是有利的,因为谁都不想一个学生无缘无故的有了一个成绩的记录,但是在删除的时候就会比较麻烦了,有时候我的确是想删除这个学生。那么我总不能在应用程序里照顾得那么周到吧。不要紧我们在定义数据表的时候只在外键那一样加入以下控制就OK了,我们来重新定义数据表 score\x0d\CREATE TABLE score(\x0d\id integer references student ON UPDATE CASCADE ON DELETE CASCADE, //我们希望在学生记录改变时自动改变分数记录,在删除学生级联删除分数记录\x0d\class_id varchar(5) references class ON UPDATE CASCADE ON DELETE\x0d\RESTRICT, //我们希望在改变课程时自动改变分数记录表里关于课程的引用,但是不希望删除课程时级联删除分数。\x0d\\x0d\);\x0d\\x0d\这样我们就可以很好做到数据完整了。

用sql命令语句写CHECK约束的格式为CHECK (约束条件)。

如:

CREATE TABLE 成绩信息(

成绩编号 int NOT NULL PRIMARY KEY,

学生编号 nchar(50) NOT NULL,

考试编号 nchar(10) NOT NULL,

课程编号nchar(10) NOT NULL,

分数 nchar(10) NOT NULL CHECK (分数in(between '0' and '100'))

在数据库中,CHECK 约束是指约束表中某一个或者某些列中可接受的数据值或者数据格式。CHECK约束可以应用于一个或者多个列,也可以将多个CHECK 约束应用于一个列。当除去某个表时,对这个表的CHECK 约束也将同时被去除。

扩展资料:

CHECK 约束不接受计算结果为 FALSE 的值。因为空值的计算结果为 UNKNOWN,所以如果赋值表达式中存在这些值,则约束可能会被覆盖而不起作用。如果 CHECK 约束检查的条件对于表中的任何行都不是 FALSE,它将返回 TRUE。

如果刚创建的表没有任何行,则此表的任何 CHECK 约束都视为有效。执行 DELETE 语句时不验证 CHECK 约束。因此,使用特定类型的 CHECK 约束对表执行 DELETE 语句时可能会产生意外结果。

以上就是关于sql中完整性约束怎么实现全部的内容,包括:sql中完整性约束怎么实现、什么是SQL里面的约束条件、数据库设置约束条件有什么好处等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10077402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存