数据定义完整性约束的实现

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 在定义表时,需要先定义被参照表,然后 定义参照表。
仓储数据库
例5-1:定义仓库表
仓库表属于仓储架构,包含仓库号、城市 和面积等3个字段。其中仓库号是主关键字, 仓库的面积值是大于0的整数。
CREATE TABLE 仓储.仓库( 仓库号 CHAR(6) PRIMARY KEY, 城市 CHAR(10), 面积 INT CHECK (面积 > 0) )
[DEFAULT constant_expression ]
PRIMARY KEY和UNIQUE约束的区别?
如何实现候选关键字约束?
Biblioteka Baidu A
测试
部门号 部门名
B1
X
B
职工号 职工名 部门号
B2
Y
Z1 A
B1
B3
Z
禁止删除或更 新被参照记录
Z2
进行级联处理
C
B2
将参照记录的对
将参照记录的对应 字段设置为空值
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
| CHECK ( logical_expression ) ]
• 一个表由若干列构成,在SQL Server 2005/2008 中可以
– 定义实列(简称列,column_definition) – 定义虚列(即计算列,computed_column_definition)
• 理解:
– <column_definition> – <computed_column_definition> – <table_constraint>
第5章 数据定义与完整性约束的实现
SQL的表定义和完整性定义功能 SQL数据操作与完整性约束的作用
先建立数据库
• 回忆第2章建立数据库的命令
CREATE DATABASE 仓储订货 ON ( NAME = order_dat, FILENAME = 'c:\mssql\data\orderdat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = order_log, FILENAME = 'd:\mssql\log\orderlog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )
例5-2:定义职工表
职工表属于基础架构,包含仓库号、职工号、姓名、工资和班组长等5 个字段。其中职工号是主关键字,仓库号是外部关键字(参照仓库表的仓库 号字段值),职工的工资在1000到5000之间(默认是1200),班组长 字段值说明当前职工的班组长(直接领导)是谁(和职工号字段的值域相同, 参照本关系的职工号属性)。
应字段设置为默 认值
ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
上面这些短语说明,在被参照表的被参照记录上发生删除( DELETE ) 和更新( UPDATE )操作时的处理方式。
5.1 SQL的表定义和完整性定义功能
• 定义架构 • 定义表及其完整性约束 • 修改表结构的命令
3
什么是架构(Schema)?
定义架构
CREATE SCHEMA 仓储 CREATE SCHEMA 订货
CREATE SCHEMA 基础
5
定义表及其完整性约束
• CREATE TABLE命令的基本格式 • 列的定义 • 计算列的定义 • 表级约束
6
CREATE TABLE命令的基本格式
CREATE TABLE [schema_name].table_name ( { <column_definition> | <computed_column_definition> } [ <table_constraint> ] [ ,...n ] )
9
计算列的定义
CREATE TABLE [schema_name].table_name ( { <column_definition> | <computed_column_definition> } [ <table_constraint> ] [ ,...n ] )
column_name AS computed_column_expression [ PERSISTED [ NOT NULL ] ][ [ CONSTRAINT constraint_name ] { PRIMARY KEY | UNIQUE } | [ FOREIGN KEY ] REFERENCES referenced_table_name [ ( ref_column ) ] [ ON DELETE { NO ACTION | CASCADE } ]
[ ON UPDATE { NO ACTION } ] 为什么ON DELETE和ON | CHECK ( logical_expression ) ] UPDATE少了一些内容?
由于是虚列,所以不能作为插入操作和更新操作的目标。
表级约束
• 如果某个完整性约束与多个列相关,则这 样的完整性约束不能定义在单个列上,这 时候就需要表级完整性约束。
列名
列的定义(<column_defin数 是it据 否io类 允n型 许>空) 值
CREATE TABLE [schema_name].table_na主me关键字约束
( { <column_definition> | <computed_colu唯mn一_d性ef约ini束tion> }
[ <table_constraint> ] [ ,...n ] )
参照完整性约束
域完整性约束
column_name <data_type> [ NULL | NOT NULL ] [ [ CONSTRAINT constraint_name ]
定义默认值
PRIMARY KEY | UNIQUE | [ FOREIGN KEY ] REFERENCES
[ schema_name . ] referenced_table_name [ ( ref_column ) ]
相关文档
最新文档