Oracle之Check約束執行個體詳解,oraclecheck執行個體

來源:互聯網
上載者:User

Oracle之Check約束執行個體詳解,oraclecheck執行個體

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關鍵之是可選項。如果使用了DISABLE關鍵字,當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) violated02290. 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) violated02290. 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_nameADD CONSTRAINT constraint_name CHECK (column_name condition) [DISABLE];

其中,DISABLE關鍵之是可選項。如果使用了DISABLE關鍵字,當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_supplieradd constraint check_tb_suppliercheck (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) violated02290. 00000 -  "check constraint (%s.%s) violated"*Cause:    The values being inserted do not satisfy the named check

5. 啟用CHECK約束5.1 文法

ALTER TABLE table_nameENABLE 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_nameDISABLE 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_nameDROP CONSTRAINT constraint_name;
8.2 樣本
ALTER TABLE tb_supplierDROP CONSTRAINT check_tb_supplier_id;
---------------------------------------------------------------------------------------------------------

如果您們在嘗試的過程中遇到什麼問題或者My Code有錯誤的地方,請給予指正,非常感謝!

連絡方式:david.louis.tian@outlook.com

著作權@:轉載請標明出處, 否則追究法律責任!
----------------------------------------------------------------------------------------------------------

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.