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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

oracle Constraint(转)

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle Constraint(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

約束簡介
約束用于確保數據庫數據滿足特定的商業邏輯或者企業規則,如果定義了約束,并且數據不符

合約束,那么DML操作(INSERT、UPDATE、DELETE)將不能成功執行。約束包括NOT NULL、UNIQUE、PRIMARY KEY、FOREING KEY 以及CHECK等五種類型

定義約束
列級約束:
column [CONSTRAINT constraint_name] constraint_type
表級約束:
column ,...,
[CONSTRAINT constraint_name] constraint_type (column,...)

1.定義NOT NULL約束
NOT NULL 約束只能在列級定義,不能在表級定義
例:
CREATE TABLE emp01(
eno INT? NOT NULL,
name VARCHAR2(10) CONSTRAINT nn_name2 NOT NULL,
salary NUMBER(6,2)
);
上例中,eno列與name列上定義了NOT NULL約束,其中eno列的NOT NULL約束沒有指定約束名,而

name列則指定了約束名nn_name。
可以通過查詢user_constraints字典來查看所定義的約束,如:
SQL> select constraint_name,constraint_type from user_constraints
2? where table_name='EMP01';

CONSTRAINT_NAME????????????????????????????????????????????? CO
------------------------------------------------------------ --
SYS_C0010618???????????????????????????????????????????????? C
NN_NAME????????????????????????????????????????????????????? C
可見,沒有給約束名的,系統將會自動的定義一個約束名稱,其中約束類型中,P:表示主鍵,R:

表示外鍵,C表示NOT NULL或CHECK,U表示UNIQUE。且系統中同一方案下的的約束名不能重復

?

2.定義UNIQUE約束
定義了惟一約束之后,惟一約束列的列值不能重復,但可以為NULL。UNIQUE約束既可以在列級

定義,也可以在表級定義
例:
CREATE TABLE emp02(
eno INT UNIQUE,name VARCHAR2(10) CONSTRAINT u_name UNIQUE,
salary NUMBER(6,2)
);
同樣,如果沒有給出約束名,系統會自動定義一個名稱,可從查詢結果得出
SQL> select constraint_name,constraint_type from user_constraints
2? where table_name='EMP02';

CONSTRAINT_NAME????????????????????????????????????????????? CO
------------------------------------------------------------ --
SYS_C0010623???????????????????????????????????????????????? U
U_NAME
U

3.定義PRIMARY KEY 約束
當定義主鍵約束后,主鍵約束列的列值不僅不能重復,而且也不能為NULL。主鍵約束既可以在

列級定義,也可以在表級定義。一張表最多只能具有一個主鍵約束,當一個表中的多個列都要為

主鍵是,可以在表級定義。
例1:列級定義主鍵
CREATE TABLE depto04(
dno INT PRIMARY KEY,
dname VARCHAR2(10),loc VARCHAR2(20)
);
通過查詢user_constraints可得出
SQL>? select constraint_name ,constraint_type from user_constraints
2? where table_name='DEPT04';

CONSTRAINT_NAME????????????????????????????????????????????? CO
------------------------------------------------------------ --
SYS_C0010625???????????????????????????????????????????????? P
通過查詢user_cons_columns可得出
SQL> select constraint_name,column_name from user_cons_columns
2? where table_name='DEPT04';

CONSTRAINT_NAME????????????????????????????????????????????? COLUMN_NAME
------------------------------------------------------------ ------------

SYS_C0010625???????????????????????????????????????????????? DNO
例2:表級定義主鍵
CREATE TABLE dept05(
dno INT,
dname VARCHAR2(10),loc VARCHAR2(20),
PRIMARY KEY(dno,dname)
);
通過查詢user_constraints可以得出
SQL> select constraint_name,constraint_type from user_constraints
2? where table_name='DEPT05';

CONSTRAINT_NAME????????????????????????????????????????????? CO
------------------------------------------------------------ --
SYS_C0010626???????????????????????????????????????????????? P
通過查詢user_cons_columns可得出
SQL> select constraint_name,column_name from user_cons_columns
2? where table_name='DEPT05';

CONSTRAINT_NAME????????????????????????????????????????????? COLUMN_NAME
------------------------------------------------------------ -------------

SYS_C0010626???????????????????????????????????????????????? DNO
SYS_C0010626???????????????????????????????????????????????? DNAME
可見,當在表級定義時,約束名稱將會相同,而在user_cons_columns查詢是,每一列將對應約束

名稱相同的兩條記錄

?

4.定義FOREING KEY約束
當定義了外部鍵約束之后,要求外部鍵列的數據必須在主表的主鍵列(或惟一列)中存在,或

者為NULL,FOREING KEY約束既可以在列級定義,也可以在表級定義。
關鍵字說明:
FOREING KEY:該選項用于指定在表級定義外部鍵約束。當在表級定義外部鍵約束時必須指定該選

項,在列級定義外部鍵約束不需要指定該選項
REFERENCES:該選項用于指定主表名及其主鍵列。當定義外部鍵約束時,該選項必須指定。
ON DELETE CASCAED:該選項用于指定級聯刪除選項。如果在定義外部鍵約束時指定了該選項,那

么當刪除主表數據時會級聯刪除從表的相關數據。
ON DELECT SET NULL:該選項用于指定轉換相關的外部鍵值為NULL,如果在定義外部鍵約束時指定

了該選項,那么當刪除主表數據時會將從表外部鍵列的數據設置為NULL。
例1:列級定義外鍵約束
CREATE TABLE emp04(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT CONSTRAINT fk_dno REFERENCES dept04(dno)
);
SQL> select constraint_name,constraint_type from user_constraints
2? where table_name='EMP04';

CONSTRAINT_NAME????????????????????????????????????????????? CO
------------------------------------------------------------ --
FK_DNO?????????????????????????????????????????????????????? R
SQL> select constraint_name,column_name from user_cons_columns
2? where table_name='EMP04';

CONSTRAINT_NAME????????????????????????????????????????????? COLUMN_NAME
------------------------------------------------------------ -----------

FK_DNO?????????????????????????????????????????????????????? DNO
例2:表級定義外鍵約束
CREATE TABLE emp05(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT,
CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
);
SQL> select constraint_name,constraint_type from user_constraints
2? where table_name='EMP05'
3? ;

CONSTRAINT_NAME????????????????????????????????????????????? CO
------------------------------------------------------------ --
FK_DNO_NAME????????????????????????????????????????????????? R
SQL> select constraint_name,column_name from user_cons_columns
2? where table_name='EMP05';

CONSTRAINT_NAME????????????????????????????????????????????? COLUMN_NAME
------------------------------------------------------------ -----------

FK_DNO_NAME????????????????????????????????????????????????? DNO
FK_DNO_NAME????????????????????????????????????????????????? NAME

5.定義CHECK約束
CHECK約束既可以在列級定義,也可以在表級定義。CHECK約束允許列為NULL。
例:
CREATE TABLE emp06(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
CHECK (salary BETWEEN 1000 AND 5000)
);
SQL>? select constraint_name,constraint_type from user_constraints
2?? where table_name='EMP06';

CONSTRAINT_NAME????????????????????????????????????????????? CO
------------------------------------------------------------ --
SYS_C0010629???????????????????????????????????????????????? C
SQL> select constraint_name,column_name from user_cons_columns
2? where table_name='EMP06';

CONSTRAINT_NAME????????????????????????????????????????????? COLUMN_NAME
------------------------------------------------------------ -----------

SYS_C0010629???????????????????????????????????????????????? SALARY

6.定義復合約束
復合約束即在表級定義,基于多列的復合約束,如:
CREATE TABLE dept05(
dno INT,
dname VARCHAR2(10),loc VARCHAR2(20),
PRIMARY KEY(dno,dname)
);或
CREATE TABLE emp05(
eno INT,name VARCHAR2(10),salary NUMBER(6,2),
dno INT,
CONSTRAINT fk_dno_name FOREIGN KEY(dno,name) REFERENCES dept05(dno,dname)
);

?

9.3維護約束
9.3.1增加約束
如果增加UNIQUE、PRIMARY KEY、FOREIGN KEY 和CKECK 必須使用ALTER TABLE語句的ADD子句;

如果增加NOT NULL約束,那么必須使用ALTER TABLE語句的MODIFY子句,如:
ALTER TABLE table_name ADD [CONSTRAINT constraint_name]
constraint_type (column,...)
ALTER TABLE table_name MODIFY column
[CONSTRAINT constraint_name] NOT NULL;
9.3.2修改約束名
在同一個方案中,約束名必須惟一,并且約束名也不能與其他對象同名。當鱫IMPDP工具或者IMP

工具導入其他對象時,如發現有同名的對象,將會出錯
語法:
ALTER TABLE table_name RENAME CONSTRAINT old_constraint_name
TO new_constraint_name;
例:
ALTER TABLE emp01 RENAME CONSTRAINT SYS_C005028
TO ck_emp01_salary;
9.3.3 刪除約束
當刪除特定表的主鍵約束時,如果該表具有相關的從表,那么在刪除主鍵約束

時必須帶有CASCAED選項
語法:
ALTER TABLE table_name DROP
CONSTRAINT constraint_name |PRIMARY KEY
例1
ALTER TABLE emp01 DROP CONSTRAINT ck_emp01_salary;
例2
ALTER TABLE dept01 DROP PRIMARY KEY CASCAED
9.3.4禁止約束
禁止約束指使約束臨時失效。當禁止了約束之后,約束規則將不再生效。在使用SQL*LOADER或

INSERT裝載數據之前,為了加快數據裝載速度,應該首先禁止約束,然后裝載數據。
語法:
ALTER TABLE table_name
DISABLE CONSTRAINT constaint_name [CASCAED];--CASCAED用于指定級聯禁止從表的外部鍵

約束
例:
ALTER TABLE emp05 DISABLE CONSTAINT SYS_C00502;
9.3.5 激活約束
語法:
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
例:
ALTER TABLE emp05 ENABLE CONSTRAINT SYS_C005022;
9.4 顯示約束信息
1.USER_CONSTRAINTS
2.USER_CONS_COLUMNS

總結

以上是生活随笔為你收集整理的oracle Constraint(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 一级黄色性生活视频 | 色香蕉在线视频 | 毛片a片免费看 | 激情五月视频 | 国产com| 奇米四色在线观看 | 国产高清视频免费在线观看 | 成人精品在线观看视频 | 国产精品xxx在线观看 | 婷婷综合五月 | 波多野结衣视频免费 | 亚洲一区二区三区视频 | 国产黄色www | 天天做天天射 | 久久最新视频 | 欧美一级视频在线观看 | 黄色工厂这里只有精品 | 日韩国产中文字幕 | 日皮在线观看 | 国产99免费 | 欧美精品一区二 | 国产视频网站在线观看 | av动态| 兔费看少妇性l交大片免费 日韩高清不卡 | 自拍偷拍精品 | 国产15页| 污污网站在线 | 国产成人精品免费视频 | 日韩高清片 | jav中文字幕 | 日韩精品1区 | 伊人av综合 | 久久av无码精品人妻系列试探 | 成人av地址 | 久久精品无码一区二区三区 | 国产精品成人一区二区网站软件 | 中文字幕亚洲图片 | av资源免费看 | 天天综合亚洲 | 亚洲一区二区三区不卡视频 | 炕上如狼似虎的呻吟声 | 老司机深夜网站 | 欧美亚洲日本一区 | 国产精品成人av久久 | 天天拍天天色 | 天天摸日日干 | www.久久伊人 | 蜜桃色一区二区三区 | 国产精品自产拍高潮在线观看 | 九七久久| 永久免费在线观看av | 3d动漫精品啪啪一区二区免费 | 蜜桃臀aⅴ精品一区二区三区 | 亚洲永久免费观看 | 爱的天堂 | 99插插| 中文字幕在线观看av | 日韩欧美中文字幕精品 | 国产乱人对白 | 91精品国产高潮对白 | 国产乱人 | 深夜福利国产精品 | 欧美极品jizzhd欧美仙踪林 | 伊人狠狠干 | 134vcc影院免费观看 | 粗大挺进潘金莲身体在线播放 | www.偷拍.com | 中文字幕一区二区久久人妻网站 | 亚洲免费观看在线 | 韩国19主播内部福利vip | 美女av一区二区 | 亚洲视频在线免费 | 国产精品久久久一区 | 欧美国产日韩一区二区 | 毛片毛片毛片 | 久久人人精 | 国产精品入口麻豆九色 | 国产精品一区二区av白丝下载 | 免费的a级片 | 特黄老太婆aa毛毛片 | 麻豆激情视频 | 久操视频免费在线观看 | 欧美理论在线 | 韩国三色电费2024免费吗怎么看 | 亚洲综合色成人 | 国产人成精品 | 黄色网页免费观看 | 国产精品www在线观看 | 色爽爽爽爽爽爽爽爽 | 吸咬奶头狂揉60分钟视频 | 蜜桃av久久久亚洲精品 | 亚洲乱码中文字幕 | 久久高清| 性一交一乱一色一视频麻豆 | 亚洲精选一区二区三区 | 97国产精品 | 黑森林福利视频导航 | 国产精品一区二区三区四 | 日韩大片免费观看 |