å¨çº¿è§ç
å¨çº¿è§ç
å¨çº¿è§ç
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
第 六 章 SQL 中 的 数 据 约 束§1 SQL 数 据 约 束 概 述一 、 数 据 约 束 的 作 用1. 实 现 数 据 库 数 据 的 完 整 性2. 实 现 数 据 库 的 主 动 服 务二 、 数 据 完 整 性 分 类1. 实 体 完 整 性 : 键 码 约 束 、 单 值 约 束 。2. 参 照 完 整 性 : 外 码 约 束 。3. 用 户 定 义 完 整 性定 义 在 属 性 、 元 组 和 关 系 上 的 约 束 。1
§2 SQL 的 键 码 约 束 和 单 值 约 束一 、 主 码 和 单 值 约 束 的 说 明例 1 创 建 Student 表 , 并 说 明 主 码 约 束 和 单 值 约 束CREATE TABLE Student( Sno char(7),Sname char(10) UNIQUE,Ssexchar,Sage int DEFAULT 19,PRIMARY KEY(Sno))2
例 2 另 一 种 说 明 单 值 约 束 的 方 法 。CREATE TABLE Student( Sno char(7),Sname char(10),Ssexchar,Sage int DEFAULT 19,PRIMARY KEY(Sno),UNIQUE(Sname))3
例 3 建 立 表 SC, 并 说 明 主 码 约 束CREATE TABLE SC( Sno char(7),Cno char(2),Grade int,PRIMARY KEY(Sno, Cno)/* 由 属 性 组 构 成 的 主 码 约 束 ! */)4
二 、 主 码 约 束 和 单 值 约 束 的 维 护1. 当 对 表 进 行 插 入 、 修 改 操 作 时 ,DBMS 将 进 行 主码 约 束 或 单 值 约 束 的 检 查 。系 统 拒 绝 执 行 破 坏 约 束 的 操 作 !2. 主 码 属 性 任 何 时 候 不 得 为 空 (NULL)。5
§3 SQL 中 的 参 照 完 整 性 约 束 (Reference IntegrityConstraint)一 、 参 照 完 整 性 约 束 与 外 码 约 束 的 说 明R1R2主 码 ( PK1)主 码 (PK2)参 照 完 整 性 约 束 !(FK)外 码关 系 R2 中 , 任 一 元 组 在 外 码 FK 上 的 取 值 :1) 或 者 等 于 R1 中 某 一 元 组 主 码 (PK1) 的 值 。2) 或 者 为 “ 空 ”(NULL)。被 参 照 关 系参 照 关 系6
例 1 参 照 完 整 性 约 束 实 例Student ( Sno, Sname) Course( Cno Cname )S1 张 三C1 DSR1S2 李 四C2 DBC3 OSR1SC( Sno Cno Grade )S1 C1 80S1 C3 90S2 C2 85R2 S4 C3 86 违 背 参 照 完 整 性 约 束 !7
例 2 创 建 表 SC, 并 说 明 主 码 约 束 和 外 码 约 束CREATE TABLE SC( Sno char(7),Cno char(2),Grade int,PRIMARY KEY(Sno, Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Course(Cno))8
二 、 参 照 完 整 性 的 维 护SQL 提 供 三 种 可 供 选 择 的 维 护 策 略 :1. 缺 省 策 略 : 任 何 破 坏 参 照 完 整 性 的 更 新 ( 删 、插 、 改 ) 操 作 , 将 被 DBMS 拒 绝 。(NO ACTION)2. 级 联 策 略 : 当 删 、 改 被 参 照 关 系 元 组 时 , 系 统 必须 “ 连 带 ”(“CASCADE”) 地 删 、 改 参 照 关系 中 外 码 所 在 的 元 组 或 外 码 属 性 值 。3. 置 空 值 (NULL) 策 略 : 当 删 、 改 被 参 照 关 系 元 组时 , 系 统 把 参 照 关 系 中 对 应 外 码 属 性 的 值 置 为 “空 ”(NULL)。9
例 3 设 :“ 系 - 学 生 ” 关 系 数 据 库 模 式: DEPT(DNO,DNAME)S(SNO,SNAME,DNO)注 :DEPT 与 S 是 一 对 多 的 。CREATE TABLE S( SNO char(7),SNAME char(10),DNO char(2),PRIMARY KEY (SNO),FOREIGN KEY(DNO) REFERENCES DEPT(DNO)ON DELETE NO ACTIONON UPDATE CASCADE )10
§4 SQL 中 基 于 属 性 和 元 组 的 约 束一 、 基 于 属 性 的 非 空 约 束 和 CHECK 约 束例 1 创 建 表 Student_DOC, 并 说 明 非 空 约 束 和 CHECK约 束CREATE TABLE Student_DOC( Sno CHAR(5)Sname CHAR(20) NOT NULL,Ssex CHAR(1) CHECK( Ssex IN (‘F’, ‘M’) ),Sage INT CHECK( Sage > 15),Document_NO CHAR(15) UNIQUE,PRIMARY KEY (Sno))11
二 、SQL 中 基 于 元 组 的 约 束例 CREATE TABLE Persons( Name CHAR(30),Title CHAR(10) DEFAULT ‘Dr.’ ,Address VARCHAR(255),Gender CHAE(1),Birthdate DATETIME,PRIMARY KEY (name),CHECK( NOT(Title = ‘Dr.%’ )OR( Birthdate < ‘01/01/1981’ )))12
掌 握 :SQL 中 元 组 约 束 定 义 ; 参 照 完 整 性 的 维 护 。熟 练 掌 握 :SQL 键 码 约 束 的 定 义 ; 参 照 完 整 性 约 束定 义 ; 单 值 约 束 (UNIQUE) 的 定 义 ; 属 性 值(CHECK、DEFAULT) 约 束 定 义 。理 解 : 数 据 更 新 过 程 中 参 照 完 整 性 的 保 持 策 略 。13