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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2025/3/12 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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) 序列和约束的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。