数据库的完整性 是指 数据的正确性(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. VS2010-MFC(MFC应用程序框架分析)

    转自:http://www.jizhuomi.com/software/145.html 一.SDK应用程序与MFC应用程序运行过程的对比 程序运行都要有入口函数,在之前的C++教程中都是main函数 ...

  2. codeforces 1195D2-Submarine in the Rybinsk Sea

    传送门:QAQQAQ 题意:自己看 思路:就是一个类似于数位DP的东西... 统计a[i]数位分解的数在每一位出现的个数,即分两种讨论: 1.位数小于当前j,则j会出现在q+i,而且计算顺序互换会计算 ...

  3. SPRINGBOOT配置MYSQL,MYBATIS,DRUID

    配置 DRUID连接池 MYSQL数据库 MYBATIS持久层框架 添加依赖 <dependency> <groupId>mysql</groupId> <a ...

  4. 未A,或用水法,或不熟的题

    今天是2017.11.25 1. 用栈实现dfs JZOJ_senior 3467 2. 链表加堆或线段树乱搞 JZOJ_senior 3480 3. 求每个边所在的奇环.偶环 JZOJ_senior ...

  5. 廖雪峰Java10加密与安全-3摘要算法-4BouncyCastle

    1.BouncyCastle: 第三方提供的一组加密/哈希算法 提供JDK没有提供的算法 RipeMD160哈希算法 官方网站 2.如何使用第三方提供的算法 2.1 添加第三方jar至classpat ...

  6. Mysql8+mybatisGenerator (mysql 8的逆向工程)

    最近试了一下mysql8的逆向工程工具 1.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...

  7. Elasticsearch系列(一)--入门

    Elasticsearch基于Lucene构建的开源搜索引擎,Java编写,提供restful API,支持横向拓展,能够完成海量数据处理. 应用场景: 1.海量数据分析引擎 2.站内搜索引擎 3.数 ...

  8. Shell 语法之信号与作业

    Linux 使用信号与系统上运行的进程进行通信. Linux 编程中最常见的 Linux 系统信号 信号 值   描述 1  SIGHUP  挂起进程 2  SIGINT  中断进程 3  SIGQU ...

  9. linux命令行操作mysql数据库明细

    连接数据库==> mysql -uroot -p 输入root密码 进入mysql操作后 下面的命令不要忘了最后结尾的; 1.选择数据库命令: use <数据库名> 2.查看表的引擎 ...

  10. 【BZOJ4161】Shlw loves matrixI

    题目描述 给定数列 {hn}前k项,其后每一项满足 hn = a1h(n-1) + a2h(n-2) + ... + ak*h(n-k) 其中 a1,a2...ak 为给定数列.请计算 h(n),并将 ...