【数据库基础】数据库完整性基本概念和基本操作

来源:互联网 发布:hadoop 知乎 编辑:程序博客网 时间:2024/06/06 01:55

这里写图片描述

这是一篇MOOC哈工大数据库基础教程笔记 为了保证和MOOC一致,但例子中的#是不符合数据库的命名规范的。

数据库完整性的基本概念:

DBMS应保证DB的一种特性–在任何情况下的正确性、有效性、一致性。

怎样保证完整性

这里写图片描述

数据库完整性约束条件

integrity constraint ::=(O,P,A,R);
O表示 约束对象(可以是列,多列(元组),元组集合)
P表示 约束条件(什么样的约束?)
A表示 触发条件(什么时候触发?)
R表示 响应动作(不满足时怎么办?)

和js中的Dom事件有点类似。

数据库完整性的分类(不重要)

  1. 按约束对象分类
    域完整性约束条件:施加在列上;
    关系完整性约束条件:施加在table上;

这里写图片描述

  1. 按约束来源分类
    这里写图片描述

  2. 按约束状态分类
    这里写图片描述

利用SQL语言实现数据库的静态完整性

  1. 静态完整性约束实现:
    列完整性<=>域完整性约束
    表完整性<=>table完整性约束
    (动态完整性实现:触发器)

  2. SQL语言实现静态完整性的方法.
    定义完整性:

create table tablename ({colname datatype [defualt|defualt_constant|NULL] [col_constr {col_constr……}][,[table_constr]……]}{,{colname datatype [defualt|defualt_constant|NULL] [col_constr {col_constr……}] [,[table_constr]……]}……});

col_cnstr(列约束语法)

{not null|[constraint constranitname] {unique |primary key|check (search_cond)|references tablename [colname] [on delete {cascade|set null}]}}

解法解释:
not null :该列对应的每个元组在该列上的值都为非空的;
constraint constraintname :为该列的约束条件起一个约束名,为了以后便于往该列上添加或者删除约束条件;
unique:该列对应的每个元组在该列上的值都是唯一的;
primary key:该列为此表的主键。相当于:not null+unique;
check (search_cond):当更新词表的该列是,所要检查的条件,满足条件即可更新,否则不可更新;
references tablename [colname] [on delete {cascade|set null}:相对这里的tablename中的colname,该列为此表的外键。当tablename中的colname与该列的列名不一样是,必须写明。如果一样,可以省略不写;on delete {cascade| set null}的含义为当该列对应的tablename中的主键colname 所在的元组被删除时,若为cascade,此列中的元组中有和colnanme删除的一样的值所在的记录也会被删除;若为set null,此列总元组中有和colname删除一样的值所在的记录的这列值会被置为NULL,记录还存在。

table_constr(列约束语法)

[constraint constraintname ]{unque(colname{,colname……})|primary key (colname{,colname})|check(search_condition)|foreign key(colname{,colname……}) references tablename [(colnam{,colname……})][on delete cascade]};

修改完整性:
这里写图片描述
这个语法感觉不太好,括号都不太对。
具体参照MYSQL文档

eg:

create table student(Sn char(8) not null unique,Sname char(10),Ssex char(2) constraint sctsex check(Ssex="男" or Ssex="女"),Sage integer check(Sage>=1 and Sage<=150),D# char(2) references Dept(D#) on delete cascade,Scalss char(6));
原创粉丝点击