约束(constraint):在建表时,为某些列添加一些特定的规则,这些规则称为约束。约束是在表上强制执行的数据校验规则保证数据库的数据知足某种用户的要求。添加约束以后,再往表中(插入、更新)数据时,若是数据不知足约束,则该条语句不能执行。数据库
非空约束确保字段值不容许为空
非空约束只能在字段级定义数据库设计
-- not null 非空约束 --添加了 not null的列的值不能为null,但能够是空格 create table test01( empno number(4) , ename varchar2(10) not null )
惟一性约束条件确保所在的字段或者字段组合不出现重复值
惟一性约束条件的字段容许出现空值性能
--unique 惟一键约束 --添加了unique 约束的列的值是惟一的,不能出现重复的值,但能够有多个null值 create table test02 ( empno number(4) unique, ename varchar2(10) );
--非空且惟一 --容许同时添加not null和unique表示不能重复而且不能为null create table test03 ( empno number(4) not null unique,e name varchar2(10) );
check约束用于对一个属性的值加以限制。
在check中定义检查的条件表达式,在对数据进行插入或修改须要符合设置的条件。spa
--check 自定义检查约束 --在插入或修改数据时,值要符合check中定义的条件 create table test04( empno number(4), ename varchar2(10), age number(3) check(age>0 and age<200), gender varchar2(3) check(gender='男' or gender='女') )
主键约束是数据库中最重要的一种约束。在关系中,主键值不可为空,也不容许出现重复,即关系要知足实体完整性规则。
– 主键从功能上看至关于非空且惟一
– 一个表中叧容许一个主键
– 主键是表中可以惟一肯定一个行数据的字段
– 主键字段能够是单字段戒者是多字段的组合(联合主键)
– Oracle为主键建立对应的惟一性索引设计
--主键约束从形式可当作类非空且惟一 create table test05( empno number(4) primary key, ename varchar2(10) )
--联合主键 --一张表只有一个主键,但能够选择多个列,做为联合主键 create table test06( empno number(4), ename varchar2(10), constraint pk_no_name primary key(empno,ename) --在列中添加约束能够不给约束命名,没有命名系统会自动命名 --在表中添加约束就须要手动命名 )
外键是表中的一个列,它的值依赖于另外一张表的主键或者惟一键被依赖的表称为主表,code
存在外键的表称为从表外键的值必须是主表(指定的)主键或者惟一键中列出blog
注:
对于主表的删除和修改主键值的操做,会对依赖关系产生影响,以删除为例:当要删除主表的某个主键值(依赖的,那么对依赖的影
响可采起下列3种作法:
1. RESTRICT方式(默认,没法删除):只有当从表中没有一个外键值与要删除的主表中主键值相对应时,才可执行删除操做。
2. CASCADE方式(联级删除):将从表中全部外键值与主表中要删除的主键值相对应的记录一块儿删除
3. SET NULL方式(设置为空):将从表中全部与主表中被删除的主键值相对应的外键值设为空值索引
添加外键约束语法:
外键列 REFERENCES 表名(主键列)
[ON DELETE [CASCADE|SET NULL]] 如省略on短语,默认按第一种处理方式。table
--主表 create table t_dept( deptno number(2) primary key, dname varchar2(12) ) --从表 create table t_emp( empno number(4), ename varchar2(10), --添加外键,指定主键删除处理方式 deptno number(2) references t_dept(deptno) on delete set null )
可增长或删除约束,但不能直接修改
语法:
增长
alter table 表名 add constraint 约束名 unique(列名)
删除
alter table 表名 drop constraint 约束名 [cascade] (加了cascade就为联级删除)class
索引是为了加快对数据的搜索速度而设立的。相似于一本书的目录,数据库对表数据进行查询时能够经过索引快速定位到数据。索引是非显示的,在建立以后不会再用到,但查询数据时索引会自动起做用。
1. 自动: 当在表上定义一个PRIMARY KEY 或者UNIQUE 约束条件时,Oracle数据库自动建立一个对应的惟一索引。
2. 手动: 手动在某个或多个列上建立索引以加速查询
语法:CREATE INDEX index 索引名 ON 表名 (列1[,列2]...);
在多个列上建立索引时,须要对多个列同时进行查询,索引才会起做用
1. 索引提升检索操做的性能,但下降数据插入、修改和删除的性能。在执行这些操做时,DBMS(数据库管理系统)必须动态地更新索引。
2.索引数据可能须要占用大量空间
3.常常出现重复的数据不适合使用索引
4.在多个列上建立索引时,须要对多个列同时进行查询,索引才会起做用
语法: drop index 索引名
数据库的设计主要包含了设计表结构和表之间的联系,在设计的过程当中,应该遵照三范式:第一范式:数据库表中的每个列都必须是不可分割的基础数据项。例如:“地址”应该拆分红省份、城市、详细地址等多个部分进行存储第二范式:确保表中每列都与主键相关第三范式:一个数据库表中不能包含已在其它表中已包含的非主关键字信息。