Oracle | PL/SQL Check約束用法詳解
CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE] );
其中,DISABLE關鍵之是可選項。如果使用了DISABLE關鍵字,當CHECK約束被創建後,CHECK約束的限制條件不會生效。
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
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
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE];
其中,DISABLE關鍵之是可選項。如果使用了DISABLE關鍵字,當CHECK約束被創建後,CHECK約束的限制條件不會生效。
drop table tb_supplier; --創建實例表 create table tb_supplier ( supplier_id number, supplier_name varchar2(50), contact_name varchar2(60) );
--創建check約束 alter table tb_supplier add constraint check_tb_supplier check (supplier_name IN ('IBM','LENOVO','Microsoft'));
--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
ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
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.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約束
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
ALTER TABLE tb_supplier DROP CONSTRAINT check_tb_supplier_id;---------------------------------------------------------------------------------------------------------
如果您們在嘗試的過程中遇到什麼問題或者我的代碼有錯誤的地方,請給予指正,非常感謝!
聯系方式:[email protected]
版權@:轉載請標明出處, 否則追究法律責任!