日志

数据库概论 (四)完整性

 来源    2021-01-14    1  

完整性

完整性与安全性的异同点

完整性:防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。防范对象:不合语义的、不正确的数据。
安全性:保护数据库防止恶意的破坏和非法的存取。防范对象:非法用户和非法操作。

实体完整性规则

若属性(一个或者一组)A是基本关系的主属性,则A不能取空值。在关系型数据库里的体现就是将数据表的某一个候选码设定为主键,PRIMARY KEY.

单属性构成码有两种方式:

  • 成为列级约束条件
  • 成为表级约束条件

约束条件的范围由码的定义位置确定,如果在创建表的最后确定那么就是表级约束条件,如果在定义列的同时设定为码那么就是列级。

而对于多个属性一起构成码的,只能作为表级的约束条件。

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

插入或对主码列进行更新操作时,DBMS按照实体完整性规则自动进行检查。包括:

  1. 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改;
  2. 检查主码值是否唯一,如果不唯一则拒绝插入或修改

检查主码是否唯一的一种办法就是全表扫描,并一一比较是否相同。

或者为主码创建索引,提高扫描的效率。

参照完整性

指的是关系模型中参照其他的表的属性,构成了当前表的参照完整性。在关系数据库中的体现就是将某一个属性定义为外键 FOREIGN KEY ... REFERENCE...

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

  1. 拒绝(NO ACTION)执行
    默认策略
  2. 级联(CASCADE)操作
    如从Student表中删除Sno的值为201215121,则从sc表中级连删除 SC.Sno=201215121的所有元组
  3. 设置为空值(SET-NULL)
    对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值,如:学生 (学号, 姓名, 年龄,专业号 ) 专业(专业号, 专业名)
    如果专业表中某个元组被删除,则可以把学生中的外码设置为空值

用户自定义完整性

针对用户的特定应用而设定的完整性要求。例如性别只能为男,女,年龄必须为正数等。

用户定义的完整性分为

  • 属性上的完整性定义
    • 列值唯一
    • 列值不为NULL
    • 用CHECK短语指定列值应该满足的条件
  • 元组上的完整性定义
    • 在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
    • 同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件,即可以在同一个元组内进行不同属性的判断处理。

完整性约束命名子句

QL还在Creat table语句中提供了完整性约束命名子句,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件

CONSTRAINT <完整性约束条件名>[ NOT NULL  | UNIQUE | PRIMARY KEY短语| FOREIGN KEY短语 | CHECK短语  ]

断言

断言创建语句

CREATE ASSERTION  <断言名> <CHECK 子句>

可以定义涉及到多个表的复杂条件判断语句,数据库中所有涉及到断言中定义的操作都会触发断言判断。如果断言判断结果不为真,就会拒绝执行。

触发器

在指定的操作之前,或之后执行的一段SQL语句。

  • Before insert, update...
  • After insert, update...

数据库的完整性是为了保证数据库中存储的数据是正确的DBMS完整性实现的机制。

  • 完整性约束定义机制
  • 完整性检查机制
  • 违背完整性约束条件时RDBMS应采取的动作
相关文章
数据库 – 规范化低完整性的表
问答我已经交了一张大约18000行的桌子.每条记录描述一个客户的位置.问题是,当人创建表时,他们没有为"公司名称"添加字段,只添加"位置名称",而一个公司可以有多个 ...
1
sql – 保持多个数据库的引用完整性
问答在多个数据库之间保持参照完整性的最佳做法是什么?因为没有内置的功能 还是更好地分割单个数据库? 更新 见下文凯文的例子. 那是我的情况.我的库存数据库具有引用employee数据库中employeeI ...
1
数据库---实验四 oracle的安全性和完整性控制
日志实验内容: (一) 授权 1. 以dba用户的身份登陆oracle,创建用户u1+学号后四位,u2+学号后四位. SQL> create user u1_3985 identified by & ...
1
MySQL数据库笔记四:MySQL的约束
日志<1>概念 是一种限制,它是对表的行和列的数据做出约束,确保表中的数据的完整性和唯一性. <2>使用场景 创建表的时候,添加约束 <3>分类 1. default: ...
1
Ibatis.Net 数据库操作(四)
日志一.查询select 还记得第一篇示例中的是如何读出数据库里的3条数据吗? 就是调用了一个QueryForList方法,从方法名就知道,查询返回列表. 1.QueryForList 返回List< ...
1
OpenJudge计算概论-四大湖
日志/*====================================================================== 四大湖 总时间限制: 1000ms 内存限制: 655 ...
1
log4net保存到数据库系列四、完整代码配置log4net
日志园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net  一.WebConfig中配置log4n ...
1
Entity Framework数据库初始化四种策略
日志策略一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testC ...
1
Entity Framework 数据库初始化四种策略
日志策略一:数据库不存在时重新创建数据库 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testC ...
1
学生成绩数据库设计 四 解答问题的存储过程
日志问题1解答 /*通过输入学生的学号或者姓名(两者方式均可),显示该生的所有成绩记录的结果集*/ CREATE PROCEDURE SelectScores ( @Args nvarchar(30) / ...
27
DB 数据库概论
日志数据库概论 数据库一直是我的一个痛..因为不是科班出生,很多知识都有待补充.而数据库这一块,一方面没做过什么必须要用到数据库的大项目,另一方面身边很多同事都和我说数据库这东西很好学(毕竟我们不是专业做 ...
1
MySQL数据库(四)—— 记录相关操作之插入、更新、删除、查询(单表、多表)
日志记录相关操作之插入.更新.删除.查询(单表.多表) 一.插入数据(insert) 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES ...
1
数据库(四)—— Redis数据库
日志redis 一.redis的安装部署 参考:https://www.cnblogs.com/linagcheng/p/10235094.html#redis%E6%BA%90%E7%A0%81%E5% ...
数据库的四种隔离级别和事务的四特性
日志数据库事务的四大特性: 事务(Transaction)是并发控制的基本单位.所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款 ...
1
QT 数据库编程四
日志//vmysql.cpp #include "vmysql.h" #include <QMessageBox> Vmysql::Vmysql() { mysql_ini ...
1
MySQL数据库学习四 存储引擎和数据类型
日志4.1存储引擎 1. 查看MySQL DBMS所支持的存储引擎 SHOW ENGINES; SHOW VARIABLES LIKE 'have%'; Yes表示支持,No表示不支持,DISABLED表 ...
1
ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询
日志聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...
2
oracle数据库基本操作四——视图、授权控制与事务处理
日志4. SQL视图的定义与操纵:   例4-1: (建立视图)  建立计算机系的学生的视图STUDENT_CS. create view student_cs as select sno,sname,s ...
1
Neo4j:图数据库GraphDB(四)Python中的操作
日志本文总结下Python中如何操作Neo4j数据库,用到py2neo包,Pip install 一下. 1 连接neo4j数据库:跟其它数据库一样,操作前必须输入用户名和密码及地址连接一下. from ...
1