数据库的完整性 是指 数据的正确性(correctness) 和 相容性 (compat-ability)

5.1 实体完整性

定义

对单属性码的说明有两种方法,一种是定义为表约束条件,一种是定义为列级约束条件

多属性吗只能定义成表级约束条件

实体完整性检查和违约处理

检查主码是否唯1 , 检查主码的各个属性是否非为空。

一般的数据库都会在主码上建一个索引

5.2 参照完整性

5.2.1 参照完整性检查 和 违约处理

如果要修改 参照表违约了 直接拒绝
如果修改被参照表违约 那么根据用户的设置进行处理

5.3 用户定义的完整性

属性上的约束条件

非空
唯一
检查列值是否满足一个条件 check 语句

不满足就拒绝

元组上的约束条件

check 语句可以设置针对元组的约束条件

5.4 完整性约束命名字句

1完整性约束命名字句名

constraint < 完整性约束条件>

完整新约束条件包括 unique not null primary key foreign key check 等

方便进行完整性的修改 删除 添加等

修改:
alter table
drop constraint C4;

alter table Student drop contraint C4;
alter tabele student
add constraint C1 check(Son between 2313 and 23434 )
先删除再添加新的约束

5.5 域的完整性限制

建立一个域 并且声明取值范围

create domin GrenderDomin char(2) check(value in ( 'asas' ,'sdsd') ;

Ssex 的说明就可以简写为
Ssex GerndeDomin

create domin GenderDomin char(2)
constraint GD check(value in ("nan","nv"))

alter domin GenderDomin drop constraint GD ;

alter domin GenderDomin add constraint GDD check(value in (1,0))

5.6 断言

可以使用断言机制, 使得任何操作违反了断言都会被拒绝执行
create assertion

check 字句与 where 语句类似

create asssertion asse_sc_cnum2
check (60>all(select * from *** where **))

5.7 触发器

触发器又叫做
事件条件动作规则 event - conditon -action
当特定的事件发生的时候 , 对 规则的条件进行检查

触发器的格式是
create trigger
{before | after } on < 表名>
reference new|old row as
for each {row |statement }
[when ]

1 只有表的拥有着可以创建触发器,并且一个表上只有一定数量的触发器

2 触发器名必须是唯一的,在统一模式下

3 触发器必须定义在基本表上(视图是不被允许的

4触发事件可以是 insert update delete delete 也可以是这几个事件的组合 比如 insert or update 还可以是 update of (《触发列》,...) 指明修改那些列的时候触发

5触发器类型 : 可以分为 行级触发器fir each row 语句级触发器 for each statement
一个一次修改1000 行的操作 , 语句级触发器执行1 次, 行级触发器执行1000次
6 触发条件:触发条件为真的时候才会执行触发器的内容

7 触发动作体
可以是 匿名的PL/sql 过程快
也可以是调用存储过程

如果是行级触发器,那么可以使用 new old 引用update insert 事件之后的新址和 updaye delete 中的旧值
如果是语句级触发器就不行

crate trigger SC_U after update
reference
newrow as newtuple
oldrow as oldtuple
for each row
when(newtupel.grde>oldtuple.grade1.1)
insert into
**
values("sdasd,"'sda)

语句级触发器又 newtable 和 oldtable 可以引用

5.7.2 激活触发器

执行触发器的时候遵循以下顺序

执行before 触发器
执行激活触发器的sql 语句
执行after 触发器

多个before after 触发器 谁先创建谁执行。

5.7.3 删除触发器

drop trigger on

数据库完整性 ch.5的更多相关文章

  1. 数据库系统学习(八)-SQL语言与数据库完整性和安全性

    第八讲 SQL语言与数据库完整性 重难点 数据库完整性的概念 关系数据库 防止和避免数据库中不合理数据的出现 输入错误,操作失误,程序处理错误等 完整性约束条件的一般形式 对O操作集合,当出现A情况时 ...

  2. 检查sqlite数据库完整性

    最近遇到一个问题,用户数据丢失,拿到用户数据库文件以后,发现数据库损坏. database disk image is malformed 因此希望可以找到一种方法,可以检测出来数据库是否损坏,经过g ...

  3. 数据库设计 ch.7

    数据库建设的基本规律 三分技术 七分管理 十二分基础数据 阶段 需求分析阶段 概念设计阶段 逻辑设计阶段 物理设计阶段 数据库实施阶段 数据库维护阶段 1 需求分析 2 概念设计 形成概念模型 3 逻 ...

  4. 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF

    1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载  链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...

  5. 【SQLServer】【恢复挂起的解决方案】附加文件时候的提示“无法重新生成日志,原因是数据库关闭时存在打开的事务/用户,该数据库没有检查点或者该数据库是只读的。 ”【数据库恢复】

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 先贴错误: 吐槽一下: 进入正题: 新建一个同名数据库 停止MSSQL服务 替换数据库文 ...

  6. MySQL学习笔记02_数据库和表的基本操作

    02_1 操作数据库 (1)创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[, create_specifica ...

  7. 优化MySchool数据库设计之【巅峰对决】

    优化MySchool数据库设计 之独孤九剑 船舶停靠在港湾是很安全的,但这不是造船的目的 By:北大青鸟五道口原玉明老师 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识 ...

  8. Atiti 数据库系统原理 与数据库方面的书籍 attilax总结 v3 .docx

    Atiti 数据库系统原理 与数据库方面的书籍 attilax总结 v3 .docx 1.1. 数据库的类型,网状,层次,树形数据库,kv数据库.oodb2 1.2. Er模型2 1.3. Sql2 ...

  9. C#语言和数据库基础

    第一章 第一个C#程序 Vs2012密钥 RBCXF-CVBGR-382MK-DFHJ4-C69G8 01..net和C#的区别 大概在2000年,微软推出了一种革命性的产品--.NET(战略) 目标 ...

随机推荐

  1. php完整表单实例

    PHP - 在表单中确保输入值 在用户点击提交按钮后,为确保字段值是否输入正确,我们在HTML的input元素中插添加PHP脚本, 各字段名为: name, email, 和 website. 在评论 ...

  2. [POI2014]KAR-Cards

    题目链接: 传送门 题目分析: 线段树妙题,感觉思路奇奇怪怪的,虽然对我来说不是"线段树菜题"(\(ldx\)神仙\(blog\)原话)\(QAQ\) 考虑怎么样维护可合并的信息解 ...

  3. 深入浅出 Java Concurrency (34): 线程池 part 7 线程池的实现及原理 (2)[转]

    线程池任务执行流程 我们从一个API开始接触Executor是如何处理任务队列的. java.util.concurrent.Executor.execute(Runnable) Executes t ...

  4. 在熟练使用2B铅笔前,请不要打开Axure

    在互联网产品领域,Axure已成为产品经理.产品设计师以及交互设计师的必备工具,从某种程度讲,Axure帮助我们建立低保真模型,便于与用户的需求验证,也帮助我们构思交互细节,使前端和开发人员更容易理解 ...

  5. 2.Spring【DI】XML方式

    依赖: 在A类中引用了B类,说明A依赖于B. 注入: 使用Spring框架给A类中的B对象的属性赋值. 直接上代码: 1.只使用IOC public class Person { private St ...

  6. Ubuntu 14.04 Ruby 2.3.3 安装

    在Ubuntu 14.04通过下载Ruby源码包进行安装. 第一步,更新apt-get sudo apt-get update 通过apt-get安装ruby依赖 sudo apt-get insta ...

  7. 百度ueditor解决页面组件被覆盖问题

    本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:百度ueditor解决页面组件被覆盖问题: 在使用ueditor的过程中,会出现表单组件被ueditor覆盖的问题,解决的方式如下: ue ...

  8. 廖雪峰Java11多线程编程-1线程的概念-2创建新线程

    Java语言内置多线程支持: 一个Java程序实际上是一个JVM进程 JVM用一个主线程来执行main()方法 在main()方法中又可以启动多个线程 1.创建新线程 1.1 方法一:使用Thread ...

  9. 性能压测中的SLA,你知道吗?

    本文是<Performance Test Together>(简称PTT)系列专题分享的第6期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...

  10. csp-s模拟47 Emotional Flutter,Endless Fantasy题解

    题面:https://www.cnblogs.com/Juve/articles/11558523.html A:Emotional Flutter 如果起点确定,那么我们后面走的点都是固定的,及mo ...