Oracle | PL/SQL Check約束使用方法具體解釋
1. 目標
實例解說在Oracle中怎樣使用CHECK約束(創建、啟用、禁用和刪除)
2. 什么是Check約束?
CHECK約束指在表的列中添加額外的限制條件。
- CHECK約束不能在VIEW中定義。
- CHECK約束僅僅能定義的列必須包括在所指定的表中。
- CHECK約束不能包括子查詢。
3. 創建表時定義CHECK約束
3.1 語法:
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE]
);
當中,DISABLE關鍵之是可選項。假設使用了DISABLEkeyword,當CHECK約束被創建后,CHECK約束的限制條件不會生效。
3.2 演示樣例1:數值范圍驗證
create table tb_supplier
(
supplier_id number,
supplier_name varchar2(50),
contact_name varchar2(60),
/*定義CHECK約束,該約束在字段supplier_id被插入或者更新時驗證,當條件不滿足時觸發。*/
CONSTRAINT check_tb_supplier_id CHECK (supplier_id BETWEEN 100 and 9999)
);
驗證:
在表中插入supplier_id滿足條件和不滿足條件兩種情況:
--supplier_id滿足check約束條件,此條記錄可以成功插入
insert into tb_supplier values(200, 'dlt','stk');
--supplier_id不滿足check約束條件,此條記錄可以插入失敗,并提示相關錯誤例如以下
insert into tb_supplier values(1, 'david louis tian','stk');
不滿足條件的錯誤提示:
Error report -
SQL Error: ORA-02290: check constraint (502351838.CHECK_TB_SUPPLIER_ID) violated
02290. 00000 - "check constraint (%s.%s) violated"
*Cause: The values being inserted do not satisfy the named check
3.3 演示樣例2:強制插入列的字母為大寫
create table tb_products
(
product_id number not null,
product_name varchar2(100) not null,
supplier_id number not null,
/*定義CHECK約束check_tb_products,用途是限制插入的產品名稱必須為大寫字母*/
CONSTRAINT check_tb_products
CHECK (product_name = UPPER(product_name))
);
驗證:
在表中插入product_name滿足條件和不滿足條件兩種情況:
--product_name滿足check約束條件,此條記錄可以成功插入
insert into tb_products values(2, 'LENOVO','2');
--product_name不滿足check約束條件,此條記錄可以插入失敗,并提示相關錯誤例如以下
insert into tb_products values(1, 'iPhone','1');
不滿足條件的錯誤提示:
SQL Error: ORA-02290: check constraint (502351838.CHECK_TB_PRODUCTS) violated
02290. 00000 - "check constraint (%s.%s) violated"
*Cause: The values being inserted do not satisfy the named check
4. ALTER TABLE定義CHECK約束
4.1 語法
ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE];
當中,DISABLE關鍵之是可選項。假設使用了DISABLEkeyword,當CHECK約束被創建后,CHECK約束的限制條件不會生效。
4.2 演示樣例準備
drop table tb_supplier;
--創建實例表
create table tb_supplier
(
supplier_id number,
supplier_name varchar2(50),
contact_name varchar2(60)
);
4.3 創建CHECK約束
--創建check約束
alter table tb_supplier
add constraint check_tb_supplier
check (supplier_name IN ('IBM','LENOVO','Microsoft'));
4.4 驗證
--supplier_name滿足check約束條件,此條記錄可以成功插入
insert into tb_supplier values(1, 'IBM','US');
--supplier_name不滿足check約束條件,此條記錄可以插入失敗,并提示相關錯誤例如以下
insert into tb_supplier values(1, 'DELL','HO');
不滿足條件的錯誤提示:
SQL Error: ORA-02290: check constraint (502351838.CHECK_TB_SUPPLIER) violated
02290. 00000 - "check constraint (%s.%s) violated"
*Cause: The values being inserted do not satisfy the named check
5. 啟用CHECK約束
5.1 語法
ALTER TABLE table_name
ENABLE CONSTRAINT constraint_name;
5.2 演示樣例
drop table tb_supplier;
--重建表和CHECK約束
create table tb_supplier
(
supplier_id number,
supplier_name varchar2(50),
contact_name varchar2(60),
/*定義CHECK約束,該約束盡在啟用后生效*/
CONSTRAINT check_tb_supplier_id CHECK (supplier_id BETWEEN 100 and 9999) DISABLE
);
--啟用約束
ALTER TABLE tb_supplier ENABLE CONSTRAINT check_tb_supplier_id;
6. 禁用CHECK約束
6.1 語法
ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;
6.2 演示樣例
--禁用約束
ALTER TABLE tb_supplier DISABLE CONSTRAINT check_tb_supplier_id;
7. 約束具體信息查看
語句:
--查看約束的具體信息
select
constraint_name,--約束名稱
constraint_type,--約束類型
table_name,--約束所在的表
search_condition,--約束表達式
status--是否啟用
from user_constraints--[all_constraints|dba_constraints]
where constraint_name='CHECK_TB_SUPPLIER_ID';
8. 刪除CHECK約束
8.1 語法
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
8.2 演示樣例
ALTER TABLE tb_supplier
DROP CONSTRAINT check_tb_supplier_id;
假設您們在嘗試的過程中遇到什么問題或者我的代碼有錯誤的地方,請給予指正,很感謝!
聯系方式:david.louis.tian@outlook.com
版權@:轉載請標明出處, 否則追究法律責任!----------------------------------------------------------------------------------------------------------
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

