oracle关联字段和序列,oracle(9) 序列和约束
序列 SEQUENCE
也是數據庫對象之一,作用:根據指定的規則生成一些列數字。
序列通常是為某張表的主鍵提供值使用。
主鍵:通常每張表都會有主鍵字段,該字段的值要求非空且唯一,
使用該字段來確定表中的每一條記錄。
CREATE SEQUENCE SEQ_EMP_ID_JIE
START WITH 1
INCREMENT BY 1;
CREATE SEQUENCE 序列名
[START WITH i] --第一個序列值是I --默認值1
[INCREMENT BY J]--步進是J,下一個值每次加J --默認值1
[MAXVALUE N] --最大值是N
[MINVALUE N] --最下值是N
[CYCLE | NOCYCLE] --達到最大值后或者最小值后是否繼續生產序列號
[CACHE] --用來指定先預取P個數據到緩存中,以提高效率,默認值是20;
序列提供了兩個偽列:
NEXTVAL:獲取序列的下一個數字,第一次獲取時返回的是 STAR WITH 指定的數字。
以后都是最后獲取的數字加上步進得到的。
NEXTVAL:會導致序列發生步進,且不可回退。
CURRVAL:獲取序列當前的數字,即:最后一次生成的數字,且不會發生步進。
新創建的序列,必須使用一次 NEXTVAL 后才能使用 CURRVAL;
SELECT SEQ_EMP_ID_JIE.NEXTVAL FROM DUAL;--運行一次記一次
SELECT SEQ_EMP_ID_JIE.CURRVAL FROM DUAL;--最后一次的數字
刪除序列:
DROP SEQUENCE SEQ_EMP_ID_JIE;
測試序列:
CREATE TABLE BIAO(
ID NUMBER(4),
NAME VARCHAR2(20)
);
INSERT INTO BIAO(ID,NAME)
VALUES(SEQ_EMP_ID_JIE.NEXTVAL,‘JACK‘);
SELECT * FROM BIAO;
DROP TABLE BIAO;
索引 INDEX
創建索引的語法:
CREATE [UNIQUE] INDEX 索引名
ON 表名(列名...);
CREATE INDEX INDEX_ENAME
ON EMP_XIAOJIE(ENAME);
復合所用也叫多列索引,是基于多個列的索引。
如果經常在 ORDER BY 子句中使用JOB和SAL排序:
CREATE INDEX EMP_JOB_SAL_JIE
ON EMP_XIAOJIE(JOB,SAL);
SELECT * FROM EMP_XIAOJIE
ORDER BY JOB,SAL;--自動應用 EMP_JOB_SAL_JIE 索引
基于函數的索引
CREATE INDEX EMP_ENAME_UPPER_J
ON EMP_XIAOJIE(UPPER(ENAME));
SELECT * FROM EMP_XIAOJIE
WHERE UPPER(ENAME)=‘KING‘;
修改和刪除索引
如果經常在索引上執行DML操作,需要定義重建索引,來提高索引的空間
利用率,語法如下:
重建 EMP_ENAME_UPPER_J 索引:
ALTER INDEX EMP_ENAME_UPPER_J REBUILD;
當一個表中有不合理的所用會導致操作性能下降,刪除索引:
DROP INDEX INDEX_ENAME;
合理使用索引提升查詢效率:
為了提升查詢的效率,創建和使用索引的原則:
*為經常出現在 WHERE 子句中的列創建索引
*為經常垂涎在 GROUP BY、DISTINCT 后面的字段建立索引,
如果建立的是復合索引,索引的字段順序必須要和這些關鍵字
后面的順序一致。
*為經常作為表的連接條件的列上創建索引。
*不要在小表上建立索引。
*限制表上的索引數目,索引不是越多越好。
*刪除很少被使用的、不合理的索引。
****** 約束:
定義:
約束全稱 約束條件,也叫完整性約束 在DDL 語句中
約束是在數據表上強制執行的一些數據檢驗規則,當我們執行
dml 操作時,數據必須滿足這些規則,如果不符合則無法執行。
作用:
約束條件 可以保證表中數據的完整性,保證數據間的商業邏輯。
類型:
* 非空約束 not null ,簡寫 NN
* 唯一性約束 unique , 約束字段中的數據不能唯一,簡寫 UK
* 主鍵約束 primary key PK
* 外鍵約束 foreign key FK
* 檢查約束 check CK
唯一性約束:UNIQUE UK
drop table day9_zhang;
create table DAY9_ZHANG(
id number (4),
name varchar2(20) unique, -----添加約束的第一種寫法
INFO varchar2(30),
OWNER varchar2(10),
CONSTRAINT OWNER_zhang UNIQUE (owner) -----添加約束的第二種寫法,能夠給約束加一個名字
);
建表后取消約束:
alter table DAY9_ZHANG
modify (NAME varchar2(30));----有問題
alter table DAY9_ZHANG drop constraint OWNER_ZHANG;---刪除約束
alter table DAY9_ZHANG drop constraint system.SYS_C0011567;
ALTER TABLE DAY9_ZHANG DROP UNIQUE (NAME);
建表后添加:
alter table DAY9_ZHANG
add constraint INFO_ZHANG unique(INFO);
alter table DAY9_ZHANG
add constraint zhang_idzhang unique(id);
insert into DAY9_ZHANG
values (1,‘QQ‘,‘INFO‘,‘55‘);
insert into DAY9_ZHANG
values (1,‘QQ‘,‘IN‘,‘55‘);
***** 主鍵約束 PRIMARY KEY
主鍵約束條件從功能上看相當于 非空約束且唯一的組合。
主鍵字段可以是單字段或多字段的組合。
作用:
在表中唯一的確定一行的數據。一個表只運行建立一個主鍵約束,
其他約束條件無個數限制
drop table day9_zhang2;
create table DAY9_ZHANG2(
id number (4),
name varchar2(20), -----添加約束的第一種寫法
INFO varchar2(30),
OWNER varchar2(10),
CONSTRAINT ID_zhang PRIMARY KEY (ID) -----添加約束的第二種寫法,能夠給約束加一個名字
);
* 主鍵應是對系統無意義的數據
* 永遠也不要更新主鍵,讓主鍵除了唯一標識之外,再無其他的用途
* 主鍵不應該是動態數據,比如說時間戳
* 主鍵應該是自動生成,不要人為的干預。 可用序列
* 主鍵盡量建立在單列上
insert into DAY9_ZHANG2
values(seq_zhang.nextval,...)
外鍵約束
外鍵約束條件定義在兩個表的字段或者一個表的兩個字段上,用于
保證兩個字段的關系
比如 EMP_ZHANG 表的DEPTNO 列參照 DEPT 表的DEPTNO 列。 則DEPT 表是主表或者說是父表
EMP 作從表或者子表。被參照字段必須是主鍵
外鍵約束對一致性的維護,從兩個方面進行數據約束:
*從表上定義外鍵的列植,必須從主表被參照的列值中選取,或者為 null
*當主表參照列的值被從表參照時主表的改行記錄不允許刪除。
drop table emp_hua;
create table EMP_HUA(
id number (6),
name varchar2(20),
SAL number(6,2),
DEPTNO number(4)
);
alter table dept_zhang add constraint dept_zhang_pk primary key (deptno);
alter table EMP_HUA
add constraint EMP_HUA_DEPTNO_FK foreign key(DEPTNO)
REFERENces dept_zhang(deptno) ;
reference --參照的意思
insert into EMP_HUA
values(seq.nextval,‘傻逼‘,1000,10);
insert into EMP_HUA
values(seq.nextval,‘垃圾‘,1000,null);
select * from emp_hua;
delete from dept_zhang where deptno=10;
rollback;----回滾操作
外鍵約束對性能的降低:
如果在一個頻繁 dml 操作的表上建立外鍵,每次DML 操作,都會將導致數據庫自動對
外鍵所關聯的對應的表作檢查,產生資源開銷。另外外鍵確定了主從表的先后生成關系,
有時候會影響業務邏輯。
為了簡化開發,維護數據時不用考慮外鍵約束,以及大量數據DML 操作時
不需要考慮外鍵 耗費時間,我們關聯時不一定需要外鍵約束。
檢查約束:
員工薪水必須大于2000,增加約束:
select * from emp_hua;
alter table EMP_HUA
add constraint EMP_HUA_CK check (SAL>999);
insert into EMP_HUA
values(seq.nextval,‘電飯鍋‘,5555,20);
insert into EMP_HUA
values(SEQ.NEXTVAL,‘肥嘟嘟‘,5555,20);
oracle(9) 序列和約束
標簽:唯一性???運行???默認值???select???外鍵約束???提高???商業???更新???build
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:https://www.cnblogs.com/zhangzonghua/p/oracle_seqence_constraint.html
總結
以上是生活随笔為你收集整理的oracle关联字段和序列,oracle(9) 序列和约束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 农信计算机资料录入试题,农村信用社考试计
- 下一篇: 计算机办公自动化考题,办公自动化试题(附