欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-09 08:05:48
...

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

这是一篇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));