序列-索引-约束
1.序列
序列:也是数据库对象之一,作用是生成一系列的数字,序列常与某张表的主键字段提供值使用。
序列的创建:
--序列的创建 CREATE SEQUENCE SEQ_NUM_2 START WITH 1 INCREMENT BY 2
START WITH:开始的值。
INCREMENT BY :步长。
序列中的函数:
A:NEXTVAL(获取序列的下一个值 第一个值获取的是START WITH 后面的值是START WITH+INCREMENT 每次加步长一次 )
例:
SELECT SEQ_NUM_1.NEXTVAL FROM DUAL;
B:CURRVAL(获取调用NEXTVAL后得到的最后一个值 注意新创建的序列至少调用一次NEXTVAL才可以调用CURRVAL)
例:
SELECT SEQ_NUM_1.CURRVAL FROM DUAL;
案例:使用序列为主键插入值。
INSERT INTO EMP (EMPNO,ENAME,JOB,SAL) VALUES (SEQ_NUM_2.NEXTVAL,'LUKK','DRIVER',9999)
结果如下:
重要操作:删除序列(DROP SEQUENCE 序列名)
2.索引
索引:索引是数据库对象之一,索引是为了提高查询效率。
索引的统计与应用都是数据库自动完成的,只要数据库认为可以使某个已创建的索引时就会自动应用。
索引的操作:
A:创建索引
--创建索引 CREATE INDEX IND_EMP_1 ON EMP(EMPNO);
SELECT EMPTNO,ENAME,SAL FROM EMP WHERE EMPNO=10
--复合索引 CREATE INDEX IND_EMP_2 ON EMP(EMPNO,sal); --给类似这种操作时系统就会自动应用索引 SELECT EMPTNO,ENAME,SAL FROM EMP ORDER BY EMPNO,SAL;
--给函数添加索引 CREATE INDEX IND_EMP_1 ON EMP(UPPER(ENAME)); --给类似这种操作时系统就会自动应用索引 WHERE UPPER(ENAME)='KING';
当你类似于这种操作时,数据库会自动应用索引。
B: 修改索引(经常操作索引就会不准确,所以定期需要重建索引)
--修改索引 ALTER INDEX IND_EMP_1 REBUILD;
C:删除索引(索引不合理时,不需要时)
--删除索引 DROP INDEX IND_EMP_1 ;
合理使用索引:
1.不要在小表中建立索引。
2.删除很少被使用,不合理的索引。
3.为经常为经常出现在WHERE子句中 列创建索引。
4.为经常作表的连接条件的列创建索引。
5.不要经常作DML操作的表上建立索引。
3.约束
约束:约束是在数据表上强制执行的一些数据校验规则,当执行DML操作时,数据必须符合这些规则 ,如果不符合,无法执行。
约束条件可以保证表中数据完整性,保证数据间的商业逻辑。
A.非空约束
创建非空约束
--创建非空约束 CREATE TABLE EMPLOYEES( EID NUMBER(6), NAME VARCHAR2(30) NOT NULL, SALARY NUMBER(7,2), HIREDATE DATE CONSTRAINT EMPLOYEES_HIRED NOT NULL
);
修改表时添加非空约束
--修改表时添加非空约束 ALTER TABLE EMPLOYEES MODIFY(EID NUMBER(6)NOT NULL); DESC EMPLOYEES;
取消非空约束(设置成null就好)
--取消非空约束 ALTER TABLE EMPLOYEES MODIFY(EID NUMBER(6) NULL);
B.唯一性约束(用于保证字段或字段组合不出现重复值)
当给表中某个字段定义类唯一性约束条件,该列的值不允许重复,但允许是NULL
--唯一性约束 CREATE TABLE EMPLOYEES1( EID NUMBER(6) UNIQUE, NAME VARCHAR2(30), EMAIL VARCHAR2(50), SALARY NUMBER(7,2), HIREDATE DATE, CONSTRAINT EMPLOYEES_EMAIL_UK UNIQUE(EMAIL) );
测试:
--测试唯一性 INSERT INTO EMPLOYEES1 (EID,EMAIL) VALUES (null,null)
结果:
NULL值被允许。
在表被建立后 添加唯一性约束条件:
ALTER TABLE EMP ADD CONSTRAINT EMP UNIQUE(ENAME);
C.主键约束
一个表只有一个主键 非空且唯一。给需要的字段后面加PRIMARY KEY;
在创建表时添加主键约束:
--主键约束 CREATE TABLE EMPLOYEES2( EID NUMBER(6)PRIMARY KEY, NAME VARCHAR2(30), EMAIL VARCHAR2(50), SALARY NUMBER(7,2), HIREDATE DATE );
--测试主键约束 INSERT INTO EMPLOYEES1 (EID) VALUES (8)
本次测试故意输入了 不符合的测试主键约束。
建立表后添加主键约束 :
ALTER TABLE EMP ADD CONSTRAINT EMP PRIMARY KEY;
D.外键约束
外键约束定义在两个表的字段或一个表的两个字段上,用于保证相关的两个字段关系。
这个用起来太痛了。太痛了。所以不用。
E.检查约束
检查(CHECK)约束条件用来强制在字段上的每个值都要满足CHECK中定义的条件。
--添加检查约束 ALTER TABLE EMPLOYEES2 ADD CONSTRAINT EMP_SAL CHECK(SALARY>2000);
--违反约束条件 INSERT INTO EMPLOYEES2 (EID,SALARY) VALUES (10,1000)
-违反约束条件 UPDATE EMPLOYEES2 SET SALARY=1888 WHERE EID=10;
这些违反约束条件的都会报错。
数据库结束。