序列:
序列也是数据库对象之一,作用是生成一系列数字。系列常用于为某张表的主键字段提供值使用。
创建序列
CREATE SEQUENCE seq_emp_id
START WITH 1
INCREMENT BY 1;
序列支持两个伪列:
NEXTVAL:获取序列下一个值。
若是新创建的序列,那么第一次调用返回的是START WITH指定的值,以后每次调用都会得到当前序列值加上步长后的数字。
NEXTVAL会导致序列发生步进,且序列不能回退。
CURRVAL:获取序列当前值,即:最后一次调用NEXTVAL后得到的值,CURRVAL不会导致步进。但是新创建的序列至少调用一次NEXTVAL后才可以使用CURRVAL;
删除序列:
DROP SEQUENCE seq_emp_id;
索引:
索引是数据库对象之一。索引是为了提高查询效率。
索引的统计与应用是数据库自动完成的,只要数据库认为可以使用某个已创建的索引时就会自动应用。
创建索引:
在EMP表的ENAME列上建立索引?
CREATE INDEX idx_emp_ename ON emp(ename);
----复合索引---
复合索引也叫多列索引,是基于多个列的索引
-如果经常在ORDER BY 子句中使用job和sal作为排序依据,可以建立复合索引:
CREATE INDEX idx_emp_jon_sal ON emp(job,sal);
-当做下面的查询时,会自动应用索引idx_emp_job_sal?
SELECT empno, ename, sal, job FROM emp ORDER BY job,sal;
创建基于函数的索引:
-如果需要在emp表的ename列上执行大小写无关搜索,可以在此列上建立一个基于UPPER函数的索引;
CREATE INDEX emp_ename_upper_idx ON emp(UPPER(ename));
-当做下面的查询时,会自动应用刚刚建立的索引:
SELECT *FROM emp WHERE UPPER(ename) = 'KING';
修改和删除索引:
--如果经常在索引列上执行DML操作,需要定期重建索引,提高索引的空间利用率:
ALTER INDEX index_name REBUILD;
--重建索引idx_emp_ename
ALTER INDEX idx_emp_ename REBUILD;
--当一个表上有不合理的索引,会导致操作性能下降,删除索引的语法:
DROP INDEX index_name;
--删除索引idx_emp_ename
DROP INDEX idx_emp_ename;
合理使用索引提升查询效率:
-为经常出现在WHERE子句中的列创建索引。
-为经常出现在ORDER BY、DESTINCT后面的字段建立索引。如果建立的是复合索引,索引的字段顺序要和这些关键字后面的字段顺序一致。
-为经常作为表的连接条件的列上创建索引。
-不要在经常做DML操作的表上建立索引。
-不要在小表上建立索引。
-限制表上的索引数目,索引并不是越多越好。
-删除很少被使用的、不合理的索引。
约束的类型:
--约束条件包括:
-非空约束 NOT NULL
-唯一性约束 UNIQUE
可以保证表中的该字段的值,任何一条记录都不可以重复,NULL除外。
添加唯一性约束??
-在建表之后增加唯一性约束条件:
ALTER TABLE employee ADD CONSTRAINT employee_name_uk UNIQUE(name);
-主键约束:
主键约束条件从功能上看相当于非空且唯一的组合。
主键字段可以是单字段或多字段组合,即:在主键约束下的单字段或者多字段组合上不允许有空值,也不允许有重复值。
主键可以用来在表中唯一的确定一行数据
一个表上只允许建立一个主键,而其他约束条件则没有明确的个数限制。
-主键选取的原则:
主键应是对系统无意义的数据。
永远不要更新主键,让主键除了唯一标识一行之外,再无其他用途。
主键不应包含动态变化的数据,如时间戳。
主键应自动生成,不要人为干预,以免使它带有除了唯一标识一行以外的意义。
主键尽量建立在单列上。
-外键约束:
外键约束条件定义在两个表的字段或一个表的两个字段上,用于保证相关两个字段的关系。
-检查约束: