【数据库基础】数据库完整性基本概念和基本操作
这是一篇MOOC哈工大数据库基础教程笔记 为了保证和MOOC一致,但例子中的#是不符合数据库的命名规范的。
数据库完整性的基本概念:
DBMS应保证DB的一种特性–在任何情况下的正确性、有效性、一致性。
怎样保证完整性
数据库完整性约束条件
integrity constraint ::=(O,P,A,R);
O表示 约束对象(可以是列,多列(元组),元组集合)
P表示 约束条件(什么样的约束?)
A表示 触发条件(什么时候触发?)
R表示 响应动作(不满足时怎么办?)
和js中的Dom事件有点类似。
数据库完整性的分类(不重要)
- 按约束对象分类
域完整性约束条件:施加在列上;
关系完整性约束条件:施加在table上;
按约束来源分类
按约束状态分类
利用SQL语言实现数据库的静态完整性
静态完整性约束实现:
列完整性<=>域完整性约束
表完整性<=>table完整性约束
(动态完整性实现:触发器)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));
上一篇: 《JSP程序设计》第三章作业