澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

2008从入门到精通,数据库的完整性约束

约束

澳门皇冠844网站 1 

一、数据库完整性概述

主关键字约束(Primary Key Constraint)

用来钦命表中的一列或几列组合的值在表中全部唯一性。建设构造主键的目标是让外键来援引。

from Database Design to Physical Form

 

Primary Key的创建情势

在创建表时创制Primary Key

CREATE TABLE table1(
    t_id VARCHAR(12) ,
    t_name VARCHAR(20),
    t_phone VARCHAR(20),
    CONSTRAINT t_idss PRIMARY KEY(t_id)
);

澳门皇冠844网站,对t_id列创办主键,约束名叫t_idss。

CREATE TABLE

1.数据库的完整性:

删除Primary Key
ALTER TABLE table1
DROP CONSTRAINT t_idss;

封锁名与列名不一致样,此处填写约束名

integrity constraints (完整性约束)

 

向已有表中加多Primary Key
ALTER TABLE table1
ADD CONSTRAINT t_idss
PRIMARY KEY(t_id);

CREATE VIEW

①数据库的完整性是指多少的正确和相容性

增加Primary Key的另一种示例
ALTER TABLE Products
ADD PRIMARY KEY(prod_id);

纵然上述代码运行没难题,查看表格设计也能够见见Primary Key设置成功,然而在剔除Primary Key操作时会提醒:
消息3728,级别16,状态1,第1 行
'prod_id' 不是束缚。
消息3727,级别16,状态0,第1 行
不能够删除约束。请参阅前面包车型客车错误消息。
原因是拉长Primary Key语句中从未用CONSTRAINT指明约束名,系统自动生成了主键名和平条款束名,要先查看主键名和平条目款项束名,删除时填写的也是约束名。
这种气象的正确删除方法

ALTER TABLE Products
DROP CONSTRAINT CK__Products__prod_p__1A14E395;
ALTER TABLE Products
DROP CONSTRAINT PK__Products__56958AB222AA2996;

Security

②数据库完整性是防范不合语义或不正确的数额步入数据库

多列组合增多主键约束
CREATE TABLE table1(
    t_id VARCHAR(12),
    s_id VARCHAR(20),
    score FLOAT,
    CONSTRAINT ts_id PRIMARY KEY(t_id,s_id)
);

The GRANT & REVOKE statements

③完整性突显了是或不是真正地呈现实际世界

外关键字约束(Foreign Key Constraint)

概念了表之间的涉嫌,用来保养几个表之间的一致性的涉及。
在创造表时创建Foreign Key Constraint

CREATE TABLE table2(
    s_id VARCHAR(20),
    s_name VARCHAR(12),
    s_tellphone VARCHAR(11),
    s_address VARCHAR(20),
    CONSTRAINT PK_s_id PRIMARY KEY(s_id),
);--首先新建table2,设置s_id为主键

CREATE TABLE table1(
    t_id VARCHAR(12),
    s_id VARCHAR(20),
    score FLOAT,
    CONSTRAINT pk_ts_id PRIMARY KEY(t_id,s_id),--新建table1,对t_id和s_id设置联合主键,键名pk_ts_id
    CONSTRAINT fk_s_id FOREIGN KEY(s_id)--对s_id设置外键fk_s_id
    REFERENCES table2(s_id)--外键fk_s_id外键关联table2的列s_id
    ON DELETE CASCADE--设置在table1的s_id删除时table2的s_id同时删除
    ON UPDATE CASCADE--设置在table1的s_id更新时table2的s_id同时更新
);

注:对table1设置外键关联table2,在插入数据时须求先插入table2的数量,工夫成功插入table1的数量。更换table2.s_id数据,table1.s_id数据也会自动改换。然而改换table1.s_id数据,试行时报外键龃龉。综上可得对table1设置外键关联table2后,table1的数目跟着table2走,不能够反着来。

丰盛和删除此之外键约束同主键。

Catalogs

 

UNIQUE约束

除主键外另一种能够定义独一约束的品种,允许空值。加多UNIQUE的措施同上,这里只简轻松单举例。

USE test
GO
ALTER TABLE table2
ADD CONSTRAINT uk_s_tellphone
UNIQUE(s_tellphone);

Schemas

例: 

CHECK约束

分成表约束和列约束,用于限制字段值在有个别范围。

Introduction

学员的年纪必须是整数,取值范围为14-29;

添加CHECK约束
ALTER TABLE table2
ADD sex CHAR(2);--在table表中添加sex,数据类型为CHAR,用来存放性别
GO
ALTER TABLE table2
ADD CONSTRAINT ck_sex CHECK(sex in('男','女'));

注:此时sex列数据类型不能够是bit,若是填写bit,只好存款和储蓄0和1,用CHECK约束限制结果为男和女就能够报错。

  ->The DBA(数据库管理员) must begin by creating the tables and constraints(约束) and loading the data. Impose(强加上) integrity constraints on the columns 。

学生的性别只可以是男或女;

在创设表的时候加多CHECK 约束
CREATE TABLE table3(
    t3_id VARCHAR(12),
    t3_name VARCHAR(20),
    t3_class VARCHAR(12),
    t3_type VARCHAR(12),
    CONSTRAINT ck_t3_type CHECK(t3_type in('类型1','类型2','类型3')) 
)

增多了束缚后假设插入不相符约束的多少

INSERT INTO table3(
    t3_id,
    t3_name,
    t3_class,
    t3_type
)VALUES(
'2018038219',
'李建',
'社会与科学',
'任何数据'
);

消息547,级别16,状态0,第1 行
INSERT 语句与CHECK 约束"ck_t3_type"争辩。该争辨时有爆发于数据库"test",表"dbo.table3", column 't3_type'。
话语已告一段落。

  ->Then provide views(视图) of the data, virtually restructuring the physical tables into variant(不同的) table forms, to simplify access to data.

学员的学号一定是独一的;

删除CHECK约束
ALTER TABLE table3
DROP CONSTRAINT ck_t3_type;

  ->Provide security(安全性), so that only authorized users are able to read or update certain confidential(机密的) data.

学生所在的系必须是这个学校设置的系;

DEFAULT约束

由此定义列的私下认可值或应用数据库的私下认可值对象绑定表列,来钦命列的暗中同意值。

  ->The structure of the various tables, views, and other objects of a database are made available to the DBA through a set of system-defined tables, called system catalogs(系统目录).

 

在建表时增多DEFAULT约束
CREATE TABLE table3(
    t3_id VARCHAR(12),
    t3_name VARCHAR(20),
    t3_class VARCHAR(12),
    t3_type VARCHAR(12) DEFAULT '类型1' 
)

 

 

删除DEFAULT约束
ALTER TABLE table3
DROP CONSTRAINT DF__table3__t3_type__3D5E1FD2;
--DF__table3__t3_type__3D5E1FD2是DEFAULT约束的约束名

Integrity(完整性)

2.DBMS保险数据库完整性的体制:

累加封锁不点名约束名
ALTER TABLE table3
ADD DEFAULT '类型2' FOR t3_type;
GO

  ->保险数据完整性(主要指数据的不易与一致性)是数据库管理员的最关键任务之一。

 

增加封锁钦点约束名
ALTER TABLE table3
ADD CONSTRAINT df_t3_type
DEFAULT '类型2' FOR t3_type;
GO

  ->能够通过自律(Constraint)、法规(Rule)只怕缺省值保障数据的完整性,也能够在动用程序层保险数据完整性(那是应用程序设计的标题),或透过触发器有限援助。

①提供定义完整性约束标准的机制

NOT NULL约束

封锁字段值不为空。

  ->数据完整性类型满含:实体完整性、参照完整性和用户定义完整性  

   DBMS应提供定义数据库完整性约束规范,并把它们存入数据库中。

建表时设置NOT NULL约束
CREATE TABLE table3(
    t3_id VARCHAR(12) NOT NULL,
    t3_name VARCHAR(20) NOT NULL,
    t3_class VARCHAR(12) NOT NULL,
    t3_type VARCHAR(12) NOT NULL 
)

    ->实体完整性(Entity Integrity) :现实世界的实体是可分别的,即它们有着某种独一性标志。相应地,关系模型中主键应作为唯一性标记。因此实体完整性准则规定基本关系的富有主键(Primary Key)都不能取空值(NULL) 。

②提供完整性检查的章程

为已存在的列增多NOT NULL约束
ALTER TABLE table3
ALTER COLUMN t3_type VARCHAR(12) NOT NULL;

     ->参照完整性(Referential Integrity) :参照完整性维护表与表之间的相关性,寻常用“主键(Primary Key)/外键(Foreign Key)”保障,当中Foreign Key能够取NULL值,或取其参照表中Primary Key或然候选键的取值。

   检查数据是还是不是知足完整性约束标准的机制称为完整性检查。一般在INSERT、UPDATE、DELETE语句施行后早先检查。

删除NOT NULL约束
ALTER TABLE table3
ALTER COLUMN t3_type VARCHAR(12) NULL;
GO

    ->用户定义的完整性(User_defined Integrity ):针对某一现实数据的羁绊标准,由应用景况决定。举例:有个别属性具备缺省值、有些属性必须取惟一值(UNIQUE)、某些非主属性不能够取NULL值、某些属性的取值范围在0~100里边(CHECK)等等。

 

自定义暗许值对象保障数据完整性

CREATE DEFAULT date_today AS GETDATE();
--新建默认值对象名date_today,默认值为getdate()函数,获取当前日期
GO
EXEC sp_addtype date_time,'date','NULL';
--利用存储过程新建自定义数据类型date_time,参照系统数据类型date
GO
EXEC sp_bindefault 'date_today','date_time';
--将默认值对象date_today绑定到自定义数据类型date_time上
GO
CREATE TABLE table3(--新建table3,设置字段t3_date的数据类型为date_time
    t3_id VARCHAR(12),
    t3_name VARCHAR(20),
    t3_class VARCHAR(12),
    t3_type VARCHAR(12),
    t3_date date_time
);
GO
INSERT INTO table3(--为新建表table3插入一条数据,不指定t3_date的值,看默认值是否有效
    t3_id,
    t3_name,
    t3_class,
    t3_type
)VALUES(
'2018038220',
'李建',
'社会与科学',
'类型1'
);
GO
SELECT * FROM table3;--查询table3数据,看t3_date是否有默认值为当前日期

查询结果如下
澳门皇冠844网站 2

ALTER TABLE table3
ADD t3_date1 DATE;--在table3表中新增一列t3_date1,数据类型为DATE
GO
EXEC sp_bindefault 'date_today','table3.t3_date1';
--直接将默认值对象date_today绑定到table3的t3_date1列
GO
INSERT INTO table3(--为新建表table3插入一条数据,不指定t3_date和t3_date1的值,看默认值是否有效
    t3_id,
    t3_name,
    t3_class,
    t3_type
)VALUES(
'2018038221',
'李建',
'社会与科学',
'类型'
);
GO
SELECT * FROM table3;
GO

查询结果如下
澳门皇冠844网站 3

  ->数据完整性具体落到实处包涵两类

3.违反条目款项管理

积存进程查询暗中认可值对象的全体者
USE test
EXEC sp_help date_today;
GO

结果如图所示
澳门皇冠844网站 4

    ->注明性数据总体性 :表明性数据总体性用约束(Constraint)、准绳(Rule) 在数据库中提供担保,那是有限援助完整性的较好点子。它驻留在数据库内,编制程序轻松,开销小,能更聚集管理和保险数据的一致性

DBMS若开掘用户的操作违背了完整性约束原则,就动用一定的动作以保证数据的完整性,如拒绝试行该操作,或级联试行别的操作。

剔除默许值对象
DROP DEFAULT date_today;

去除不成功,提醒以下消息:
消息3716,级别16,状态3,第1 行
不能删除默许值'date_today',因为它已绑定到三个或八个列。
那么我们精晓,当二个暗中同意值对象绑定了列其后,就不能够删除它,借使想要删除,就不能够不先解绑。在上面的操作中,大家的默许值对象date_today绑定了test数据库table3表的t3_date1字段。

    ->进程性数据全部性 :进度性数据完整性用触发器和应用程序代码保障,平时比较复杂、开支不小,但足以举办越多的政工法规。 平常,进度性数据完整性是申明性数据完整性的互补

 

对列解绑暗许值对象
USE test
GO
EXEC sp_unbindefault 'table3.t3_date1';

那儿我们重新尝试删除私下认可值对象,开采依旧万分,此时要专注,在上边的操作中,暗中同意值对象date_today不止绑定了t3_date1列,还绑定了自定义数据类型date_time,并将该数据类型定义给了t3_date列,大家还必要对date_time解绑暗中同意值对象。

EXEC sp_unbindefault 'date_time';

此时重新删除暗中认可值对象,就能够成功删除。删除暗中认可值对象后,原先绑定的字段不会再有暗中同意值。

           澳门皇冠844网站 5

澳门皇冠844网站 6

自定义法规维护数据完整性

平整是对列或自定义数据类型的值的规定和范围。自定义法规的表明式应当要回去布尔类型的值,何况表明式中无法满含几个变量。

CREATE RULE score_rule AS @math_score>=0;
GO--新建规则score_rule,参数@math_score
EXEC sp_addtype 'score_type','float','NULL';
GO--新建自定义数据类型score_type
CREATE TABLE table_score(--新建表table_score,预设mt_score和at_score字段用于绑定规则
s_id VARCHAR(4),
s_name VARCHAR(10),
mt_score float,--该字段将用于规则score_rule绑定到列
at_score score_type--该字段将用于规则score_rule绑定到自定义数据类型
);
GO
EXEC sp_bindrule 'score_rule','score_type';
GO--将score_rule规则绑定到自定义数据类型score_type
EXEC sp_bindrule 'score_rule','table_score.mt_score';
GO--将score_rule规则绑定到table_score表的mt_score列

----以下进行规则测试
INSERT INTO table_score(
s_id,
s_name,
mt_score,
at_score
)VALUES(
'0001',
'张华',
'-1',
'-1'
);
GO

进展违反法规的插入后,数据库报错
消息513,级别16,状态0,第1 行
列的插入或更新与原先的CREATE RULE 语句所钦点的平整产生争执。该语句已甘休。争辩产生于数据库'test',表'dbo.table_score',列'mt_score'。
话语已告一段落。
很明显,mt_score的插入值为-1,违反了亟须大于等于0的条条框框,数据库报错。将mt_score的插入值改成适合法规的数量,再度运转插入语句,数据库照旧会报错,因为at_score字段的插入值也是违反法规的。将五个数据改成适合准则的回到,推行成功。

注:新建法则时表达式必须倘诺回到布尔类型的值,不然会报错

消息4145,级别15,状态1,过程sum_score,第1 行
在应运用规范的上下文(在';' 相近)中钦赐了非布尔类型的表明式。

                 澳门皇冠844网站 7

 

剔除自定义法则

和自定义暗中认可值对象一样,删除自定义法则供给该准绳先与字段和自定义数据类型解绑。在地点的操作中,score_rule准绳与自定义数据类型score_type以及列mt_score已绑定。因而施行以下语句:

EXEC sp_unbindrule 'score_type';
GO--解除规则score_rule与score_type之间的绑定
EXEC sp_unbindrule 'table_score.mt_score';
GO--解除规则score_rule与表table_score的mt_score列的绑定
DROP RULE score_rule;--删除score_rule规则

注:经过试验,三个列只可以绑定1条法规,要是对二个列绑定2条准绳,前一条法则会被后一条准则顶替。

           

 

翻看自定义准则
EXEC sp_help 'score_rule';

结果如图所示
澳门皇冠844网站 8

-》》》完整性再阐述

二、缺省(默认值)和规则

查阅自定义准则的概念音讯
EXEC sp_helptext 'score_rule';
GO

结果如图所示
澳门皇冠844网站 9

     数据有所复杂的数据类型,用来满意区别的必要。实际行使中的数据也可能有所必然的取值范围,如年龄十分的大于0,性别独有男女等。而表之间的联系使相连的字段要保持一致和完好。然而,实操不可能担保插入和删除的数码都符合要求,不符合必要的操作极恐怕会破坏数据的完整性,对数据库的可信性和运作技术变成勒迫。

 

于是寄存数据集的数据库必供给对数据表和列有所限制和正规,为此SQLServer系统使用一多级的不二等秘书诀来维护数据完整性。

缺省和法规来源于由Sybase开垦的S默许值QL Server,在老版本的SQL Server大概升级版本中都有缺省和准绳的施用。

数据的完整性:数据的完整性是指数据库中多少的准确和一致性,表内的数目不相争论,表间的数目不相争执,关联性不被破坏。

缺省是为列提供数据的一种艺术,固然用户举办INSERT操作时不为列输入数据,则使用缺省值。

为此有了以下实行完整性的门径:

平整是当用户张开INSERT或uPDATE操作时,对输入列中的数据设定的取值范围,是兑现域完整性的方法之一。

1.        对列数据的操纵:数听别人注明约束、暗中认可值约束、准绳。

 

2.        对列的调控:主键约束、唯一性约束、标志列。

缺省与法则有以下特点:

3.        对表之间、列之间涉及的垄断(monopoly):外键约束、数据证实约束、触发器、存款和储蓄进程。

(1)缺省与准则是数据库对象,它们是单独于表和列而树立的。

那个路子得以根据种类分为:约束、法规、暗许值、触发器、存款和储蓄进程。

(2)缺省与准则创立后与列或数据类型产生关联,列和数据类型就具备了缺省与法则的属性。

封锁分为以下几点:

(3)缺省与法则定义后,能够重复使用,能够绑定到四个列或数据类型上。

l        主键约束

(4)缺省与准则不随表相同的时间调入内部存款和储蓄器,当用到时才被调入内部存款和储蓄器,那说不定会使程序实施出现延时。

主键:P库罗德IMAMuranoY KEY,主关键字,用来限制列的多少有所独一性且不为空,即这一字段的多寡尚未重新的数据值且无法有空值。每一种表只好有多少个主键,一般用来做标记。

 

l        外键约束

缺省和准绳对象平常只在它所创立的数据库中央银立竿见影,不是ANSI标准,一般不提倡使用。

外键:FOREIGN KEY,外键用来在七个表的数据里面确立连接,它能够是一列也许多列。三个表能够有二个依旧七个外键。外键对应的是参照完整性,二个表的外键可感觉空值,若不为空值则每二个外键值必须等于另叁个表中主键的有些值。

应竭尽使用约束,任何能够行使缺省与准则的地点都有可以动用约束。

l        标识列

 

能够自动编号的列称为标记列或IDENTITY约束。IDENTITY约束正是为那多少个数值顺序递增的列准备的羁绊,自动实现数值的增加。每一种表只可以有叁个标记列,标记数据不能够由用户输入,用户只必要填写标识种子(标记列的第三个数据)和标识增量(依次扩展的数),系统自动生成多少并填入表。标记种子和标记增量都以非零整数,位数紧跟于等于10。暗中同意两个均为1。

1. 缺省

l        独一性约束

在SQL Server中,有二种选择暗许值的主意:

又叫UNIQUE约束,在主键约束中也利用了独一性,分裂的是三个表中能够有三个那样的当世无双性列,却只得有三个主键。这里的独一性列可以为空不过只好有一行数据为空。适用于不是主键但却依然供给具有独一性的字段。

 

l        非空约束

①在创造表时,钦定默许值。

贰个列是或不是允许有空值,正是此处的空和非空约束,即NULL与NOT NULL约束。NULL便是允许为空,NOT NULL正是不允许为空。NULL分歧于0和“”,0和“”都表示为该行有数据,而NULL是不曾数据。

  用SQL Server Management Studio创立表时在陈设表时钦赐暗中同意值,能够在输入字段名称后,设定该字段的暗许值。

l        数据印证约束

  或使用CREATE TABLE语句中的DEFAULT子句钦定暗中认可值。

又称做CHECK约束,它通过给定条件(逻辑表明式)来检查输入数据是或不是符合要求,以此来有限支撑数据完整性。

 

l        暗中认可值约束

②应用CREATE DEFAULT语句创设默许对象后,使用存款和储蓄进程sp_bindefault将该默许对象绑定到列上。

又称作DEFAULT约束。将常用的多少值性感到暗中认可值能够节省用户输入的时刻,在非空字段中定义暗中认可值能够收缩不当产生。在实际上利用中,暗中认可值仍是能够是结果能变的函数。

 

 

暗许值对象是单独存款和储蓄的,删除表的时候,DEFAULT约束会自行删除,但是暗许值对象不会被删去。

规则:

创造暗中同意值对象后,供给将其绑定到某列可能用户自定义的数据类型上。

准则是单独的SQL Server对象,跟表和视图一样是数据库的组成都部队分。准则的功用和CHECK约束类似,用于完结对数据值的检察。它可以提到到多少个表,在数据库中有邮局插入、修改时,验证新数据是不是顺应法规,是贯彻域完整性的办法之一。准绳在概念时并未概念它的检查实验对象,而是在开立后绑定到对象来检查评定数据。

 

制造准绳

根本操作:

CREATE RULE 规则名

 

AS

①创设暗中认可值对象

规范表明式

②绑定暗中同意值对象

在此地的口径表明式使用逻辑表明式,表达式中要有一个@开首的变量,代表用户的输入数据,能够视作是顶替WHERE后边的列名。

③解除默许值对象的绑定

法规在绑定之后技术够行使,准绳的绑定须求时用系统存款和储蓄进程sp_bindrule.

④查看暗许值对象

USE 数据库名

⑤删除私下认可值对象

Go

 

Sp_bindrule 规则名 表名.字段名

 

运用存款和储蓄进度sp_help来查阅法规。

①创办暗中同意对象

法规的特点(与CHECK的例外)

能够运用CREATE DEFAULT语句创设暗中认可对象。其语法格式如下:

1)       法则是SQL Server的对象而CHECK是一种约束,是表定义的一有个别。

CREATE DEFAULT default  AS constant_expression 

2)       CHECK的优先级要高于准绳。

例如: create default d_grade as 1 

3)       叁个列只好接纳一个条条框框却足以使用八个CHECK约束。

 

4)       法规能够接纳于多个列,CHECK约束只针对它定义的列。

②绑定暗中认可对象

5)       法规创建一遍能够应用频繁而CHECK约束必要频繁创立。

默许对象创造后不能够应用,必须首先将其绑定到某列可能用户自定义的数据类型上。其采纳语法格式如下:

默认值:

sp_bindefault [@defname = ] 'default', [@objname = ] 'object_name'   [, [@futureonly = ] 'futureonly_flag']

本文由澳门皇冠金沙网站发布于数据库研究,转载请注明出处:2008从入门到精通,数据库的完整性约束