- Oracle之Check约束实例详解
-
Oracle | PL/SQL Check约束用法详解
1. 目标
实例讲解在Oracle中如何使用CHECK约束(创建、启用、禁用和删除)
2. 什么是Check约束?
CHECK约束指在表的列中增加额外的限制条件。
注: CHECK约束不能在VIEW中定义。CHECK约束只能定义的列必须包含在所指定的表中。CHECK约束不能包含子查询。3. 创建表时定义CHECK约束
3.1 语法:
1234567CREATETABLEtable_name(column1 datatypenull/notnull,column2 datatypenull/notnull,...CONSTRAINTconstraint_nameCHECK(column_name condition) [DISABLE]);其中,DISABLE关键之是可选项。如果使用了DISABLE关键字,当CHECK约束被创建后,CHECK约束的限制条件不会生效。
3.2 示例1:数值范围验证12345678createtabletb_supplier(supplier_id number,supplier_name varchar2(50),contact_name varchar2(60),/*定义CHECK约束,该约束在字段supplier_id被插入或者更新时验证,当条件不满足时触发。*/CONSTRAINTcheck_tb_supplier_idCHECK(supplier_idBETWEEN100and9999));验证:
在表中插入supplier_id满足条件和不满足条件两种情况:12345--supplier_id满足check约束条件,此条记录能够成功插入insertintotb_suppliervalues(200,'dlt','stk');--supplier_id不满足check约束条件,此条记录能够插入失败,并提示相关错误如下insertintotb_suppliervalues(1,'david louis tian','stk');不满足条件的错误提示:
1234Error report -SQL Error: ORA-02290:checkconstraint(502351838.CHECK_TB_SUPPLIER_ID) violated02290. 00000 -"check constraint (%s.%s) violated"*Cause: Thevaluesbeing inserted donotsatisfy the namedcheck
3.3 示例2:强制插入列的字母为大写
123456789createtabletb_products(product_id numbernotnull,product_name varchar2(100)notnull,supplier_id numbernotnull,/*定义CHECK约束check_tb_products,用途是限制插入的产品名称必须为大写字母*/CONSTRAINTcheck_tb_productsCHECK(product_name =UPPER(product_name)));验证:
在表中插入product_name满足条件和不满足条件两种情况:1234--product_name满足check约束条件,此条记录能够成功插入insertintotb_productsvalues(2,'LENOVO','2');--product_name不满足check约束条件,此条记录能够插入失败,并提示相关错误如下insertintotb_productsvalues(1,'iPhone','1');不满足条件的错误提示:
123SQL Error: ORA-02290:checkconstraint(502351838.CHECK_TB_PRODUCTS) violated02290. 00000 -"check constraint (%s.%s) violated"*Cause: Thevaluesbeing inserted donotsatisfy the namedcheck4. ALTER TABLE定义CHECK约束
4.1 语法
12ALTERTABLEtable_nameADDCONSTRAINTconstraint_nameCHECK(column_name condition) [DISABLE];其中,DISABLE关键之是可选项。如果使用了DISABLE关键字,当CHECK约束被创建后,CHECK约束的限制条件不会生效。
4.2 示例准备
12345678droptabletb_supplier;--创建实例表createtabletb_supplier(supplier_id number,supplier_name varchar2(50),contact_name varchar2(60));4.3 创建CHECK约束
1234--创建check约束altertabletb_supplieraddconstraintcheck_tb_suppliercheck(supplier_nameIN('IBM','LENOVO','Microsoft'));4.4 验证
不满足条件的错误提示:12345--supplier_name满足check约束条件,此条记录能够成功插入insertintotb_suppliervalues(1,'IBM','US');--supplier_name不满足check约束条件,此条记录能够插入失败,并提示相关错误如下insertintotb_suppliervalues(1,'DELL','HO');123SQL Error: ORA-02290:checkconstraint(502351838.CHECK_TB_SUPPLIER) violated02290. 00000 -"check constraint (%s.%s) violated"*Cause: Thevaluesbeing inserted donotsatisfy the namedcheck
5. 启用CHECK约束
5.1 语法
12ALTERTABLEtable_nameENABLECONSTRAINTconstraint_name;5.2 示例
12345678910111213droptabletb_supplier;--重建表和CHECK约束createtabletb_supplier(supplier_id number,supplier_name varchar2(50),contact_name varchar2(60),/*定义CHECK约束,该约束尽在启用后生效*/CONSTRAINTcheck_tb_supplier_idCHECK(supplier_idBETWEEN100and9999) DISABLE);--启用约束ALTERTABLEtb_supplier ENABLECONSTRAINTcheck_tb_supplier_id;6. 禁用CHECK约束
6.1 语法
12ALTERTABLEtable_nameDISABLECONSTRAINTconstraint_name;
6.2 示例
12--禁用约束ALTERTABLEtb_supplier DISABLECONSTRAINTcheck_tb_supplier_id;7. 约束详细信息查看
语句:123456789--查看约束的详细信息selectconstraint_name,--约束名称constraint_type,--约束类型table_name,--约束所在的表search_condition,--约束表达式status--是否启用fromuser_constraints--[all_constraints|dba_constraints]whereconstraint_name='CHECK_TB_SUPPLIER_ID';
8. 删除CHECK约束8.1 语法
12ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name;8.2 示例
---------------------------------------------------------------------------------------------------------12ALTERTABLEtb_supplierDROPCONSTRAINTcheck_tb_supplier_id;转自红黑联盟
-
Oracle之Check约束实例详解
本文详细介绍了在Oracle中如何使用CHECK约束,包括创建、启用、禁用和删除CHECK约束的实例,涉及范围验证和强制插入列的字母为大写等应用场景。
我要投稿
2684

被折叠的 条评论
为什么被折叠?



