数据完整性和dml语句
数据完整性
数据完整性(data integrity)是指数据的精确性(accuracy) 和可靠性(reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。
数据完整性指存储在数据库中的所有数据值均正确的状态。如果数据库中存储有不正确的数据值,则该数据库称为已丧失数据完整性。
数据库采用多种方法来保证数据完整性,包括约束、规则和触发器。
什么是约束
约束是在表上强制执行的数据校验规则.
约束主要用于保证数据库的完整性。
当表中数据有相互依赖性时,可以保护相关的数据不被删除.
大部分数据库支持下面五类完整性约束:
not null非空
unique key唯一键
primary key主键
foreign key外键
check检查
default默认值
约束概述
约束作为数据库对象,存放在系统表中,也有自己的名字
创建约束的时机
在建表的同时创建
建表后创建(修改表)
按照创建方式可分为列级和表级约束
列集约束与表集约束
列级约束直接跟在列后定义,不再需要指定列名,与列定义之间用空格分开。
表级约束通常放在所有的列定义之后定义,要显式指定对哪些列建立列级约束。与列定义之间采用英语逗号,隔开。
如果是对多列建联合约束,只能使用表级约束语法。
非空约束(not null)
列级约束,只能使用列级约束语法定义。
确保字段值不允许为空
只能在字段级定义
实例
create table tb_student(
id number primary key,
name varchar2(18) not null
)
唯一约束
唯一性约束条件确保所在的字段或者字段组合不出现重复值
同一张表内可建多个唯一约束
唯一性约束条件的字段允许出现多个null
唯一约束可由多列组合而成
建唯一约束时oracle会为之建立对应的索引。
create table tb_student(
id number primary key,
name varchar2(18) unique not null
)
主键约束
主键是表中唯一确定一行数据的字段。
一个表中只允许一个主键
主键从功能上看相当于非空且唯一
主键约束不允许为null
主键字段可以是单字段或者是多字段的组合
当建立主键约束时,oracle为主键创建对应的索引
create table tb_student(
id number primary key,
name varchar2(18)
)
定义复合主键
当定义约束的时候, 不仅可以基于单列定义约束,也可以基于多列定义复合约束.
注意, 复合约束只能在表级中定义.
create table emp01(
lastname varchar2(25),
firstname varchar2(25),
code varchar2(25),
constraint emp01_pf
primary key(lastname,firstname)
);
一般情况下,一个表都应该有一个主键,建立主键的原则“最少性,稳定性”。
外键约束
外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
外键确保了相关的两个字段的两个关系:
子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
当主表的记录被子表参照时,主表记录不允许被删除。
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录。
格式foreign key (外键列名)references 主表(参照列)
on delete cascade:当父表中的行被删除的时候,同时删除在子表中依靠的行
on delete set null:将依靠的外键值转换为空值