维护数据的完整性--约束

--约束

约束用于确保数据库数据满足特定的商业规则

在sql server中,约束包括:not null,unique,primary key,foreign key,和check五种

1.not null  如果在列上定义了not null,那么当插入数据时,必须为列提供数据

--创建一张表

create table test

testId int primary key identity(1,1),

teatname varchar(30) not null, --不为空

testpass varchar(30) not null,

testage  int

insert into test(testage) values(30)--会报错误,因为有两个字段是不允许为空的,如果将not null 去掉可以创建

insert into test(testname,testpass,testage)values('','',5)

--在没有加not null限制时,上面两条语句的效果是不一样的,注意体会

2.unique  当定义了唯一约束后,该列值是不能重复的,但是可以为null(主键是不能放空值的).

--创建一张表

create table test1

testId int primary key identity(1,1),

teatname varchar(30) unique, --唯一

testpass varchar(30) ,

testage  int

insert into test2 (testname,testpass,testage) values('aa','1234','45')

当在加入一条相同的数据时,是不允许的

insert into test2 (testpass,testage) values('1234','45')

testname给空值是可以的,但是同样不能够连续给值

3.primary key  用于唯一的标示表行的数据,当定义主键约束后,该列不但不能重复而且不能为null,

需要说明的是一张表只能有一个主键,但是可以有多个unique约束。

4.foreign key

用于定义主表和从表之间的关系,外键约束要定义在从表上,主表则必须有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或只是为null

5.check 用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000-2000之间,如果不在1000-2000之间,就会提示错误。

create table test2

testId int ,

teatname varchar(30),

testpass varchar(30),

sal int check (sal>=1000 and sal

insert into test2 values(4,'aa','aa',1000)--对的

--default使用

create table mes

(mesId int primary key identity(1,1),

mescon varchar(2000) not null,

mesDate datetime default getdate()

)

insert into mes (mescon,mesDate) values('你好么')--显示系统默认时间

insert into mes (mescon,mesDate) values('你好么','2000-11-11')--显示给定的时间,也就是default时,如果不给定则显示系统的,给定的话则显示给定的信息

--商店售货系统表设计案例

现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:

商品goods(商品号goodsId,商品名goodsName,单价unitprice,商品类category,供应商provider);

客户customer(客户号customerId,姓名customername,住址customeraddress,电邮email,性别sex,身份证cardId);

购买purchase(客户号customerId,商品号goodesId,购买数量nums);

请用sql 语言完成下列功能:

1.见表,在定义中要求声明:

(1)每个表的主外建

(2)客户的姓名不能为空值

(3)单价必须大于0,购买数量必须在1到30之间

(4)电邮不能重复

(5)客户的性别必须是 男或者女,默认是男

(6)商品类别是'食物'‘日用品’

--goods表

create table goods

goodsId nvarchar(50) primaty key,

goodsName nvarchar(80) not null,

unitprice numeric(10,2) check (unitprice>0),

category nvarchar(3) check (category in('食物'‘日用品’)),

provider nvarchar(50)

--customer

create table customer

customerId nvarchar(50) primaty key,

cusName nvarchar(50) not null,

address nvarchar(100),

email nvarchar(100), unique,

sex nchar(1) check(sex in('男','女')) default ‘男’

cardId nvarchar(18)

--purchase

create table purchase

customerId nvarchar(50) foreign key reherences customer(customerId),

goodsId nvarchar(50) foreign key reherences goods(goodsId),

nums int check (nums>0)

)

--约束

约束用于确保数据库数据满足特定的商业规则

在sql server中,约束包括:not null,unique,primary key,foreign key,和check五种

1.not null  如果在列上定义了not null,那么当插入数据时,必须为列提供数据

--创建一张表

create table test

testId int primary key identity(1,1),

teatname varchar(30) not null, --不为空

testpass varchar(30) not null,

testage  int

insert into test(testage) values(30)--会报错误,因为有两个字段是不允许为空的,如果将not null 去掉可以创建

insert into test(testname,testpass,testage)values('','',5)

--在没有加not null限制时,上面两条语句的效果是不一样的,注意体会

2.unique  当定义了唯一约束后,该列值是不能重复的,但是可以为null(主键是不能放空值的).

--创建一张表

create table test1

testId int primary key identity(1,1),

teatname varchar(30) unique, --唯一

testpass varchar(30) ,

testage  int

insert into test2 (testname,testpass,testage) values('aa','1234','45')

当在加入一条相同的数据时,是不允许的

insert into test2 (testpass,testage) values('1234','45')

testname给空值是可以的,但是同样不能够连续给值

3.primary key  用于唯一的标示表行的数据,当定义主键约束后,该列不但不能重复而且不能为null,

需要说明的是一张表只能有一个主键,但是可以有多个unique约束。

4.foreign key

用于定义主表和从表之间的关系,外键约束要定义在从表上,主表则必须有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或只是为null

5.check 用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000-2000之间,如果不在1000-2000之间,就会提示错误。

create table test2

testId int ,

teatname varchar(30),

testpass varchar(30),

sal int check (sal>=1000 and sal

insert into test2 values(4,'aa','aa',1000)--对的

--default使用

create table mes

(mesId int primary key identity(1,1),

mescon varchar(2000) not null,

mesDate datetime default getdate()

)

insert into mes (mescon,mesDate) values('你好么')--显示系统默认时间

insert into mes (mescon,mesDate) values('你好么','2000-11-11')--显示给定的时间,也就是default时,如果不给定则显示系统的,给定的话则显示给定的信息

--商店售货系统表设计案例

现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:

商品goods(商品号goodsId,商品名goodsName,单价unitprice,商品类category,供应商provider);

客户customer(客户号customerId,姓名customername,住址customeraddress,电邮email,性别sex,身份证cardId);

购买purchase(客户号customerId,商品号goodesId,购买数量nums);

请用sql 语言完成下列功能:

1.见表,在定义中要求声明:

(1)每个表的主外建

(2)客户的姓名不能为空值

(3)单价必须大于0,购买数量必须在1到30之间

(4)电邮不能重复

(5)客户的性别必须是 男或者女,默认是男

(6)商品类别是'食物'‘日用品’

--goods表

create table goods

goodsId nvarchar(50) primaty key,

goodsName nvarchar(80) not null,

unitprice numeric(10,2) check (unitprice>0),

category nvarchar(3) check (category in('食物'‘日用品’)),

provider nvarchar(50)

--customer

create table customer

customerId nvarchar(50) primaty key,

cusName nvarchar(50) not null,

address nvarchar(100),

email nvarchar(100), unique,

sex nchar(1) check(sex in('男','女')) default ‘男’

cardId nvarchar(18)

--purchase

create table purchase

customerId nvarchar(50) foreign key reherences customer(customerId),

goodsId nvarchar(50) foreign key reherences goods(goodsId),

nums int check (nums>0)

)


相关内容

  • 软件概要设计报告模板
  • 概要设计报告 1. 引言 1.1 编写目的 ............................................................... 3 1.2 项目风险 ..................................................... ...

  • 实验5 数据完整性约束实验
  • 实验D05: 数据完整性约束实验 一.实验名称和性质 二.实验目的 1.掌握数据完整性约束的类型: 2.掌握SQL SERVER中的相关完整性约束: 三.实验的软硬件环境要求 硬件环境要求: PC 机(单机) 使用的软件名称.版本号以及模块: Windows XP下的SQL Server 2000( ...

  • 计算机三级数据库考点串讲资料
  • 数据库 一.基础知识 1.计算机系统的组成和应用领域. 计算机系统由(硬件) 系统.(软件) 系统两部份组成. 计算机的硬件基本上由五大部分组成:运算器.控制器.存储器.输入设备.输出设备. 软件系统分为(系统) 软件.(应用) 软件两部分. 计算机的应用领域包括什么? 1.科学计算 2.数据通信与 ...

  • 课表编排系统中数据库的设计与实现
  • 2003年第7期 文章编号:100622475(2003) 0720066203 计 算 机 与 现 代 化 J IS UAN J I Y U XI ANDAIH UA 总第95期 课表编排系统中数据库的设计与实现 李明杰, 赵彩云 (常熟高等专科学校计算机系, 江苏常熟 215500) 摘要:论述 ...

  • 数据库1~9
  • -----第一章数据库概述------ 1.以数据为中心的应用系统有哪些特点? 答:涉及的数据量大,数据不随程序的结束而消失,数据可以被多个应用程序共享. 2.用文件系统管理数据的缺点是什么? 答:编写应用程序不方便,数据冗余不可避免,应用程序有依赖性,不支持对文件的并发访问,数据间联系弱,难以按不 ...

  • 索引的作用及其使用
  • 摘要:在设计我们系统的数据库时,通常需要考虑数据库的索引形式.本文作者详细介绍了数据库索引的作用和它的使用. [1] 索引的作用及其使用 [2] 索引的作用及其使用 为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能. 第一, 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第 ...

  • 教学管理系统需求分析
  • 教学管理系统需求分析 教学管理系统(TMS)是大学内部学院使用的教学辅助管理系统,系统主要功能包括学生作业.教学课件的管理. 1. 教学管理系统的功能要求 教学管理系统的总目标是:在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的.易扩充的.易维护的. ...

  • 基于Client/Server数据完整性约束的实现技术
  •  摘 要:本论文主要讨论基于client/server数据完整性约束及其如何实施企业业务规则,并以sqlserver和powerbuilder为例,介绍了数据完整性约束的实现技术。  关键词:client/server,数据完整性约束, 企业业务规则  dbms已从早期的分散的一个个计算模型、网络/ ...

  • 第6章 实现数据完整性约束复习题
  • 第6章 实现数据完整性约束 一.填空题 1.SQL Server使用声明完整性和 答案:过程完整性 2完整性,它要求表中所有的元组都应该有一个惟一标识,即主关键字.可以使用 约束实现实体完整性,也可以将 约束和 约束一起使用来实现实体完整性. 答案:实体 PRIMARY KEY UNQIUE NOT ...