日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle关联字段和序列,oracle(9) 序列和约束

發(fā)布時間:2025/3/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle关联字段和序列,oracle(9) 序列和约束 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

序列 SEQUENCE

也是數(shù)據(jù)庫對象之一,作用:根據(jù)指定的規(guī)則生成一些列數(shù)字。

序列通常是為某張表的主鍵提供值使用。

主鍵:通常每張表都會有主鍵字段,該字段的值要求非空且唯一,

使用該字段來確定表中的每一條記錄。

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] --達到最大值后或者最小值后是否繼續(xù)生產(chǎn)序列號

[CACHE] --用來指定先預(yù)取P個數(shù)據(jù)到緩存中,以提高效率,默認值是20;

序列提供了兩個偽列:

NEXTVAL:獲取序列的下一個數(shù)字,第一次獲取時返回的是 STAR WITH 指定的數(shù)字。

以后都是最后獲取的數(shù)字加上步進得到的。

NEXTVAL:會導致序列發(fā)生步進,且不可回退。

CURRVAL:獲取序列當前的數(shù)字,即:最后一次生成的數(shù)字,且不會發(fā)生步進。

新創(chuàng)建的序列,必須使用一次 NEXTVAL 后才能使用 CURRVAL;

SELECT SEQ_EMP_ID_JIE.NEXTVAL FROM DUAL;--運行一次記一次

SELECT SEQ_EMP_ID_JIE.CURRVAL FROM DUAL;--最后一次的數(shù)字

刪除序列:

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

創(chuàng)建索引的語法:

CREATE [UNIQUE] INDEX 索引名

ON 表名(列名...);

CREATE INDEX INDEX_ENAME

ON EMP_XIAOJIE(ENAME);

復(fù)合所用也叫多列索引,是基于多個列的索引。

如果經(jīng)常在 ORDER BY 子句中使用JOB和SAL排序:

CREATE INDEX EMP_JOB_SAL_JIE

ON EMP_XIAOJIE(JOB,SAL);

SELECT * FROM EMP_XIAOJIE

ORDER BY JOB,SAL;--自動應(yīng)用 EMP_JOB_SAL_JIE 索引

基于函數(shù)的索引

CREATE INDEX EMP_ENAME_UPPER_J

ON EMP_XIAOJIE(UPPER(ENAME));

SELECT * FROM EMP_XIAOJIE

WHERE UPPER(ENAME)=‘KING‘;

修改和刪除索引

如果經(jīng)常在索引上執(zhí)行DML操作,需要定義重建索引,來提高索引的空間

利用率,語法如下:

重建 EMP_ENAME_UPPER_J 索引:

ALTER INDEX EMP_ENAME_UPPER_J REBUILD;

當一個表中有不合理的所用會導致操作性能下降,刪除索引:

DROP INDEX INDEX_ENAME;

合理使用索引提升查詢效率:

為了提升查詢的效率,創(chuàng)建和使用索引的原則:

*為經(jīng)常出現(xiàn)在 WHERE 子句中的列創(chuàng)建索引

*為經(jīng)常垂涎在 GROUP BY、DISTINCT 后面的字段建立索引,

如果建立的是復(fù)合索引,索引的字段順序必須要和這些關(guān)鍵字

后面的順序一致。

*為經(jīng)常作為表的連接條件的列上創(chuàng)建索引。

*不要在小表上建立索引。

*限制表上的索引數(shù)目,索引不是越多越好。

*刪除很少被使用的、不合理的索引。

****** 約束:

定義:

約束全稱 約束條件,也叫完整性約束 在DDL 語句中

約束是在數(shù)據(jù)表上強制執(zhí)行的一些數(shù)據(jù)檢驗規(guī)則,當我們執(zhí)行

dml 操作時,數(shù)據(jù)必須滿足這些規(guī)則,如果不符合則無法執(zhí)行。

作用:

約束條件 可以保證表中數(shù)據(jù)的完整性,保證數(shù)據(jù)間的商業(yè)邏輯。

類型:

* 非空約束 not null ,簡寫 NN

* 唯一性約束 unique , 約束字段中的數(shù)據(jù)不能唯一,簡寫 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

主鍵約束條件從功能上看相當于 非空約束且唯一的組合。

主鍵字段可以是單字段或多字段的組合。

作用:

在表中唯一的確定一行的數(shù)據(jù)。一個表只運行建立一個主鍵約束,

其他約束條件無個數(shù)限制

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) -----添加約束的第二種寫法,能夠給約束加一個名字

);

* 主鍵應(yīng)是對系統(tǒng)無意義的數(shù)據(jù)

* 永遠也不要更新主鍵,讓主鍵除了唯一標識之外,再無其他的用途

* 主鍵不應(yīng)該是動態(tài)數(shù)據(jù),比如說時間戳

* 主鍵應(yīng)該是自動生成,不要人為的干預(yù)。 可用序列

* 主鍵盡量建立在單列上

insert into DAY9_ZHANG2

values(seq_zhang.nextval,...)

外鍵約束

外鍵約束條件定義在兩個表的字段或者一個表的兩個字段上,用于

保證兩個字段的關(guān)系

比如 EMP_ZHANG 表的DEPTNO 列參照 DEPT 表的DEPTNO 列。 則DEPT 表是主表或者說是父表

EMP 作從表或者子表。被參照字段必須是主鍵

外鍵約束對一致性的維護,從兩個方面進行數(shù)據(jù)約束:

*從表上定義外鍵的列植,必須從主表被參照的列值中選取,或者為 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 操作,都會將導致數(shù)據(jù)庫自動對

外鍵所關(guān)聯(lián)的對應(yīng)的表作檢查,產(chǎn)生資源開銷。另外外鍵確定了主從表的先后生成關(guān)系,

有時候會影響業(yè)務(wù)邏輯。

為了簡化開發(fā),維護數(shù)據(jù)時不用考慮外鍵約束,以及大量數(shù)據(jù)DML 操作時

不需要考慮外鍵 耗費時間,我們關(guān)聯(lián)時不一定需要外鍵約束。

檢查約束:

員工薪水必須大于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???外鍵約束???提高???商業(yè)???更新???build

本條技術(shù)文章來源于互聯(lián)網(wǎng),如果無意侵犯您的權(quán)益請點擊此處反饋版權(quán)投訴

本文系統(tǒng)來源:https://www.cnblogs.com/zhangzonghua/p/oracle_seqence_constraint.html

總結(jié)

以上是生活随笔為你收集整理的oracle关联字段和序列,oracle(9) 序列和约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。