31. SQL -- 完整性及约束(2)

唯一性束:

所谓唯一性约束(unique constraint)不过是数据表内替代键的另一个名称而已。替代键(alternate key)可以是数据表内不作为主键的其他任何列,只要该键对该数据表唯一即可。换句话说,在唯一列内不允许出现数据重复的现象唯一性约束指定一个或多个列的组合的值具有唯一性,以防止在列中输入重复的值。唯一性约束指定的列可以有NULL 属性。

语法:

CONSTRAINT constraint_name

UNIQUE [CLUSTERED | NONCLUSTERED]

(column_name1[, column_name2,…,column_name16])

DEMO1

创建国家(Country)表,指定国家不能重复,ID号为主键。

CREATE TABLE Country

(

cCountryId CHAR(3) PRIMARY KEY, /*省略部分关键字,行级约束,没有指定约束名*/

cCountry CHAR(25) NOT NULL UNIQUE ) /*行级约束,没有指定约束名*/

插入3条数据:

insert into Country

values

(‘A01‘,‘china‘),

(‘A02‘,‘<?xml:namespace prefix="st1">yemen‘?xml:namespace>),

(‘A03‘,‘IR‘)

查看结果:

select * from Country

新插入一条数据,在列cCountry中指一条记录与之前插入记录值相同的数值:

insert into Country

values (‘A04‘,‘china‘)

出下如下错误:

消息2627,级别14,状态1,第2 行

违反了UNIQUE KEY 约束‘UQ__Country__62A4127E20C1E124‘。不能在对象‘dbo.Country‘ 中插入重复键。

语句已终止。

DEMO2:若表已创建,通过ALTER TABLE来进行创建UNIQUE约束

alter table country

add constraint UQ_Country_cCountry unique (cCountry)

/*表级约束*/

图形化界面创建:

数据库 → 表 → 设计 → 选择创建约束的列 → 右键 → 索引/键

创建约束

 

CHECK约束:

CHECK 约束(CHECK 约束:定义列中可接受的数据值,检查约束通过限制插入列中的值来实施域完整性。可以在一列上定义多个检查约束。它们按照定义的次序被实施。当约束被定义成表级时,单一的检查约束可以被应用到多列,也可以将多个 CHECK 约束应用于单个列。当除去某个表时,也将除去 CHECK 约束。

CHECK约束的限制:

○1 、CHECK 约束不接受计算结果为FALSE 的值。因为空值的计算结果为UNKNOWN,所以表达式中存在这些值可能会覆盖约束,例如,假设对int 列 MyColumn 应用一个约束,指定 MyColumn 只能包含值10(即 MyColumn = 10)。如果将值NULL 插入到 MyColumn,数据库引擎将插入 NULL 且不返回错误。

○2 、如果 CHECK 约束检查的条件对于表中的任何行都不是 FALSE,它将返回 TRUE。如果刚创建的表没有任何行,则此表的任何 CHECK 约束都视为有效

○3 、执行 DELETE 语句时不验证CHECK 约束。因此,使用特定类型的 CHECK 约束对表执行 DELETE 语句时可能会产生意外结果

DEMO:假设对表 CheckTbl 执行下列语句。

INSERT INTO CheckTbl VALUES (10, 10)

GO

DELETE CheckTbl WHERE col1 = 10;

即使 CHECK 约束指定表 CheckTbl 必须至少包含 1 行,DELETE 语句也会成功

语法:

CONSTRAINT constraint_name

CHECK [NOT FOR REPLICATION]

(logical_expression)

CHECK约束可以连同下列关键字或命令一起指定:

IN关键字

使用IN 关键字可以确保:键入的值被限制在一个常数表达式列表中。

例如:下列命令在表Shopper的列cCity上创建了CHECK约束chkCity,这样就能将输入限制在合法的城市中。

CREATE TABLE Shopper

(

cCity CHAR(15) NOT NULL CONSTRAINT chkCity CHECK(cCity IN (‘Boston‘, ‘Chicago‘,‘

Dallas‘,‘New York‘, ‘Paris‘,‘Washington‘))

)

LIKE关键字

使用LIKE关键字可以通过通配符来确保输入某一列的值符合一定的模式。

例如:

CHECK (cShopperId LIKE ‘[0-9][0-9][0-9][0-9] [0-9][0-9]‘)

上述CHECK约束指定[0-9]——[0-9],之间只能包含六位数值。

BETWEEN 关键字

可以通过BETWEEN关键字来指明常数表达式的范围。该范围中包括上限值和下限值。

例如:

CHECK (siToyQoh BETWEEN 0 AND 100)

上述CHECK约束指定了属性siToyQoh的值只能在0和100之间。

创建Check约束时应遵循的规则:

它可以在列级或表级创建。

它用来限制可以插入到该列的值。

它可以包含用户自定义的搜索条件。

它不能包含子查询。

如果创建时指定了WITH NOCHECK选项,就不检查已有数据。

它可以引用同一表中的其他列

DEMO:限制表tb2中列silowerage输入值需>=2,列siupperage输入值需<=100

alter table tb2

add constraint CK_tb2_silowerage

check (silowerage >=2)

alter table tb2

add constraint CK_tb2_siupperage

check (siupperage <=100)

当插入数值不满足check约束时,返回如下错误:

insert into tb2

values(‘p0001‘,‘bus‘,‘A-B1‘,‘BIG‘,‘150.00‘,‘P01‘,null,1,100,null,null)

消息547,级别16,状态0,第1 行

INSERT 语句与CHECK 约束"CK_tb2_silowerage"冲突。该冲突发生于数据库"demo_db",表"dbo.tb2", column ‘silowerage‘。

语句已终止。

insert into tb2

values(‘p0001‘,‘bus‘,‘A-B1‘,‘BIG‘,‘150.00‘,‘P01‘,null,4,101,null,null)

消息547,级别16,状态0,第1 行

INSERT 语句与CHECK 约束"CK_tb2_siupperage"冲突。该冲突发生于数据库"demo_db",表"dbo.tb2", column ‘siupperage‘。

语句已终止。

使用图形化界面创建CHECK约束:

数据库 → 表 → 设计 → 选择列 → 右键 → check 约束

缺省:

缺省约束可用于为某列指定一个常数值,这样用户就不需要为该列插入值。只能在一列上创建一个缺省约束,且该列不能是IDENTITY列。

缺省约束通过定义列的默认值或使用数据库的默认值对象绑定表的列,来指定列的默认值。SQL Server 推荐使用缺省约束,而不使用定义默认值的方式来指定列的默认值。

语法:

CONSTRAINT constraint_name

DEFAULT constant_expression [FOR column_name]

DEMO:在Shopper的cCity属性上创建DEFAULT约束。如果没有指定城市,则属性cCity将缺省地包含―Chicago‖。

CREATE TABLE Shopper

(

cCid int,cCity char(15) DEFAULT ‘Chicago‘

)

如果表已经创建,但没有指定缺省,则可以用ALTER TABLE命令来指定缺省:

alter table shopper

add constraint DF_Shopper_cCity default ‘gddg‘ for cCity

删除缺省约束:

alter table shopper

drop constraint DF_Shopper_cCity

时间: 2024-10-14 14:13:28

31. SQL -- 完整性及约束(2)的相关文章

30. SQL -- 完整性及约束(1)

完整性及约束 数据完整性: 数据完整性是指数据的精确性和可靠性.它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的.SQL Server 提供了一些工具来帮助用户实现数据完整性,其中最主要的是:约束(Constraint).和触发器(Trigger). 数据完整性约束主要包括四大类: 实体完整性  域完整性 引用完整性 用户自定义完整性 实体完整性: 实体完整性指的是关系数据库中所有的表都必须有主键,而且表中不允许存在如下的记录. u 无主键值的记

sql中表级约束和列级约束

sql中表级约束和列级约束,在SQL SERVER中, (1) 对于基本表的约束分为列约束和表约束约束是限制用户输入到表中的数据的值的范围,一般分为列级约束与表级约束.列级约束有六种:主键Primary key.外键foreign key .唯一 unique.检查 checck .默认default .非空/空值 not null/ null表级约束有四种:主键.外键.唯一.检查 列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名:表约束与列定义

SQL基础--&amp;gt; 约束(CONSTRAINT)

--============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完整性 实体完整性:表中记录不反复(不论什么两条记录不全等)而且每条记录都有一个非空主键 域完整性:表中字段值必须与字段数据类型.格式.有效范围相吻合 參照完整性:不能引用不存在的值 自己定义完整性:依据特定业务领域定义的需求完整性 保证数据完整性的几种经常用法 约束(最经常使用) 过程 函数 触发器 实体

SQL FOREIGN KEY 约束

SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. 让我们通过一个例子来解释外键.请看下面两个表: "Persons" 表: Id_P LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing &qu

SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主键. SQL PRIMARY KEY Constraint on CREATE TABLE 下面的 SQL 在 "Persons" 表创建时在 "Id_P" 列创建 PRIMARY KEY 约束: MySQL: CREATE TABLE Persons ( Id_P i

数据库完整性及约束

转载请注明出自朱朱家园http://blog.csdn.net/zhgl7688 1.  数据完整性:常用三种类型的约束保证数据完整性有域(列)完整性.实体完整性.引用完整性. 2.  实体完整性:能够唯一标识表中的第一个记录. 保证方法有主键约束.标识约束.唯一约束. 主键约束与唯一约束添加的基本语法 Alter  table  表名 addconstraint  约束名  约束类型  具体的约束说明 约束名的取名规则:约束类型_约束字段. 比如主键(Primary Key)约束:PK_Stu

SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... ) 数据类型(data_type)规定了列可容纳何种数据类型.下面的表格包含了SQL中最常用的数据类型: 数据类型 描述 integer(size) int(size) smallint(size) tinyint(size) 仅容纳整数.在括号内规定数字的最

sql语句添加约束

sql语句添加约束 --主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空. --唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值. --检查约束(Check Constraint):某列取值范围限制.格式限制等,如有关年龄的约束. --默认约束(Default Constraint):某列的默认值,如我们的男性同学较多,性别默认为男. --外键约束(Foreign Key):用于在两表之间建立关系需要制定引用

SQL高级应用--约束二--(PRIMARY KEY、FOREIGN KEY)

四.SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录 主键必须包含唯一的值 主键列不能包含 NULL 值 每个表都应该有一个主键,并且每个表只能有一个主键 下面的SQL 在 Persons 表创建时在 Id_P列创建PRIMARY KEY 约束 MySQL CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255),