SQL中的约束,索引,视图,序列

约束

强加在表中的字段上的 条件或者限制
作用:是让表更符合实际

按照 约束的效果
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

序列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值