约束
强加在表中的字段上的 条件或者限制
作用:是让表更符合实际
按照 约束的效果
1.唯一约束 unique :该列不能出现重复的非空数据 ,可以为空(空值可以有多个)
2.主键约束 primary key :该列不能出现重复数据和不能出现空值
3.外键约束 foreign key : 参考的字段必须是主键列(primary key),或者是唯一列(unique),该列的数据取值来自另一张表的某字段
cascade 串联当父表数据删除时子表数据一起删除
set null 串联当父表数据删除时子表数据变为空
no action 子表有记录,父表数据没法删除
4.检查约束 check : 按照自己的需求添加条件
5.非空约束 not null
6.默认值 default : 不插入数据的时候填写默认值
按照是否跟随字段一起创建约束 行级约束 表级约束
创建约束
1.建立完表之后,单独的添加约束(不建议使用)
alter table 表名 add constraint 约束名 unique|primary key (列名1....)
alter table 表名 add constraint 约束名 foreign key (列名1....) references 父表(列名)
alter table 表名 add constraint 约束名 check (条件1....)
alter table 表名 modify 约束名 not null
alter table 表名 modify 列名 default 值
alter table 表名 drop constraint 约束名
alter table 表名 modify 列名 null
alter table 表名 modify 列名 default null
2.根据建表一起创建约束
行级约束写法--约束写在字段和字段属性之后
语法
create table 表名(列名1 字段属性 unique,--系统分配约束名
列名2 字段属性 constraint 约束名 unique,--自己约束名
列名3 字段属性....)
create table 表名(列名1 字段属性 primary key,--系统分配约束名
列名2 字段属性 constraint 约束名 primary key,--自己约束名
列名3 字段属性....)
create table 表名(列名1 字段属性 references 父表(列名),--外键约束系统分配约束名
列名2 字段属性 constraint 约束名 references 父表(列名),--自己约束名
列名3 字段属性....)
create table 表名(列名1 字段属性 check(条件),--系统分配约束名
列名2 字段属性 constraint 约束名 check(条件),--自己约束名
列名3 字段属性....)
create table 表名(列名1 字段属性 not null,--系统分配约束名
列名2 字段属性 ,
列名3 字段属性....)
create table 表名(列名1 字段属性 default,--系统分配约束名
列名2 字段属性 constraint 约束名 default,--自己约束名
列名3 字段属性....)
注意:检查约束check行级写法只作用于当前列 即不能写其他列的条件
表及约束写法--将约束写在所有字段和字段属性之后
语法
create table 表名(列名1 字段属性 ,
列名2 字段属性 ,
列名3 字段属性...
,constraint 约束名 unique (列名1...)--多列不能同时重复
,constraint 约束名 primary key (列名1...)
,constraint 约束名 foreign key (列名) references 父表(列名)
,constraint 约束名 check (条件1...)
,--非空,默认值没有表级写法
)
注意:检查约束check表级写法作用于所有列 即可以写所有列的条件
索引
指向表中的数据,通过建立索引,可以提高查询效率
索引依赖于表存在,但是也是数据库对象之一
索引会降低dml语句的速度(执行dml时在索引中备份)
oracle会自动的使用和维护索引
数据库检索方式(了解)
1.全盘扫描
按照条件,在对应的条件列,从第一条开始检索到最后一条数据,
将符合条件的数据的rowid取出,根据rowid取出整行数据。
2.索引扫描
按照条件,在对应的索引列,从第一条数据开始检索,检索到最
后一条符合条件的数据位置,将符合条件的数据的rowid取出,根据
rowid取出整行数据。
索引的分类
1.B-TREE索引:
create index 索引名 on 表名(列1,列2...)
2.位图索引:
create bitmap index 索引名 on 表名(列1,列2...)
3.反向键索引(B树):
create index 索引名 on 表名(列1...) reverse
4.基于函数的索引(B树):
create index 索引名 on 表名(函数(列))
禁用索引
alter index 索引名 unusable
解禁索引
alter index 索引名 rebuild
删除索引
drop index 索引名
索引失效的情况(重点)
1.对于一般的B-tree索引,通配符出现在搜索词的首位时不会引用索引
2.在索引列上使用'<' '>' '!='时,或对空值进行判断时,索引会失效
3.使用索引时不能用or连结,不然索引会失效
4.查询条件有多个列的时候务必要索引列开头
视图
定义:将sql语句的结果动态保存到数据库中,是一张虚拟表
1.视图可以基于一张表创建,也可以基于多张表创建,还可以基于视图创建视图。
2.基于的表叫基表,视图本身不包含数据,数据来源于基表。
3.视图可以完全的像表一样来使用。
4.视图可以创建只读视图。
创建视图
create [or replace] view 视图名 as sql语句
[with read only] --只读视图
类似于快捷建表
基于一张表创建的视图,基表发生变化,视图也会发生变化。视图发生变化,基表也会发生变化。因为视图的数据来源于基表。
视图创建后,不能增删改虚拟列(非基表字段的列)(例如:sal+comm等等)
删除视图
drop view 视图名
修改视图通过 or replace