什么是sql检查约束束

Oracle之检查约束的使用(四)
1. 检查约束是什么
检查约束的作用就是让表中的数据更有意义。检查约束就是为了检测和过滤不符合实际意义的数据,比如说年龄1000,工资-500等这些数据。
2.在创建表时设置检查约束
1)列级检查约束
CREATE TABLE table_name ( column_name datatype CHECK(expressions)) ;
CHECK 是检查关键字
expressions 是约束的条件
设置检查约束,使其&0 。
create table userinfo_c(
id varchar2(10)
primary key ,
username varchar2(20) ,
salary number(5,0) check(salary&0)) ;
先执行实例,插入语句当
salary&0 的时候报错。
SQL& create
userinfo_c(
id varchar2(10)
primary key ,
username varchar2(20) ,
salary number(5,0) check(salary&0)) ;
表已创建。
SQL& insert into userinfo_c values(1,'shao'-500) ;
insert into userinfo_c values(1,'shao'-500)
第 1 行出现错误:
ORA-00947: 没有足够的值
2)表级级检查约束
CONSTRAINT constraint_name CHECK(expressions)
create table userinfo_c1(
id varchar2(10) primary key ,
username varchar2(20),
salary number(5,0),
constraint
ck_salary check(salary&0) );
3.修改表设置检查约束
ADD CONSTRAINT constraint_name CHECK(expressions)
首先创建一个表
create table userinfo_c2(
id varchar2(10)
primary key,
username varchar2(20),
salary number(5,0)
添加检查约束。
alter table userinfo_c2
add constraint ck_salary_new
check(salary&0) ;
4.删除检查约束
1)禁用(启用)检查约束
ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name
alter table userinfo_c1 disable constraint ck_
1. 要查看userinfo_1 的禁用状态, 首先 desc user_constraints
看看数据字典的字段, 我们要看CONSTRAINT_NAME
, CONSTRAINT_TYPE
STATUS 类型。
select constraint_name ,constraint_type, status from user_constraints where table_name=’USERINFO_C1’
;来查看。
3. 禁用检查约束
alter table userinfo_c1 disable constraint
constraint名字;
SQL& desc user_constraints
是否为空? 类型
----------------------------------------- -------- ----------------------------
VARCHAR2(30)
CONSTRAINT_NAME
NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE
VARCHAR2(1)
TABLE_NAME
NOT NULL VARCHAR2(30)
SEARCH_CONDITION
VARCHAR2(30)
R_CONSTRAINT_NAME
VARCHAR2(30)
DELETE_RULE
VARCHAR2(9)
VARCHAR2(8)
DEFERRABLE
VARCHAR2(14)
VARCHAR2(9)
VARCHAR2(13)
VARCHAR2(14)
VARCHAR2(3)
VARCHAR2(4)
LAST_CHANGE
INDEX_OWNER
VARCHAR2(30)
INDEX_NAME
VARCHAR2(30)
VARCHAR2(7)
VIEW_RELATED
VARCHAR2(14)
SQL& select constraint_name ,constraint_type,status from user_constraints where table_name=
CONSTRAINT_NAME
------------------------------ - --------
SYS_C0010837
SQL& alter table userinfo_c1 disable constraint ck_
表已更改。
select constraint_name ,constraint_type,status from user_constraints where table_name=
CONSTRAINT_NAME
------------------------------ - --------
C DISABLED
SYS_C0010837
2)删除检查约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name
如上一样。
没有更多推荐了,
不良信息举报
举报内容:
Oracle之检查约束的使用(四)
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!没有更多推荐了,
不良信息举报
举报内容:
主键约束、唯一性约束、检查约束
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!oracle 如何设置检查约束_百度知道
oracle 如何设置检查约束
电话号码十一位检查约束
我有更好的答案
create table test(phone int check(length(phone)=11));如果表已创建:首先要删除不符合check约束条件的记录,然后alter table testadd constraint check_p check(length(phone)=11);
采纳率:66%
这个用正则表达式就可以的
可以去网上搜下 有很多种
为您推荐:
其他类似问题
oracle的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Oracle之检查约束的使用(四)
1. 检查约束是什么
检查约束的作用就是让表中的数据更有意义。检查约束就是为了检测和过滤不符合实际意义的数据,比如说年龄1000,工资-500等这些数据。
2.在创建表时设置检查约束
1)列级检查约束
CREATE TABLE table_name ( column_name datatype CHECK(expressions)) ;
CHECK 是检查关键字
expressions 是约束的条件
将salary 设置检查约束,使其&0 。
create table userinfo_c(
id varchar2(10)
primary key ,
username varchar2(20) ,
salary number(5,0) check(salary&0)) ;
先执行实例,插入语句当 salary&0 的时候报错。
SQL& create table userinfo_c(
id varchar2(10)
primary key ,
username varchar2(20) ,
salary number(5,0) check(salary&0)) ;
表已创建。
SQL& insert into userinfo_c values(1,'shao'-500) ;
insert into userinfo_c values(1,'shao'-500)
第 1 行出现错误:
ORA-00947: 没有足够的值
2)表级级检查约束
CONSTRAINT constraint_name CHECK(expressions)
create table userinfo_c1(
id varchar2(10) primary key ,
username varchar2(20),
salary number(5,0),
constraint
ck_salary check(salary&0) );
3.修改表设置检查约束
ADD CONSTRAINT constraint_name CHECK(expressions)
首先创建一个表
create table userinfo_c2(
id varchar2(10)
primary key,
username varchar2(20),
salary number(5,0)
添加检查约束。
alter table userinfo_c2
add constraint ck_salary_new
check(salary&0) ;
4.删除检查约束
1)禁用(启用)检查约束
ALTER TABLE table_name
DISABLE|ENABLE CONSTRAINT constraint_name
alter table userinfo_c1 disable constraint ck_
1. 要查看userinfo_1 的禁用状态, 首先 desc user_constraints 看看数据字典的字段, 我们要看CONSTRAINT_NAME , CONSTRAINT_TYPE STATUS 类型。
2. 执行 select constraint_name ,constraint_type, status from user_constraints where table_name=&USERINFO_C1&
;来查看。
3. 禁用检查约束。 disable constraint 查找的constraint名字 ;
SQL& desc user_constraints
是否为空? 类型
----------------------------------------- -------- ----------------------------
VARCHAR2(30)
CONSTRAINT_NAME
NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE
VARCHAR2(1)
TABLE_NAME
NOT NULL VARCHAR2(30)
SEARCH_CONDITION
VARCHAR2(30)
R_CONSTRAINT_NAME
VARCHAR2(30)
DELETE_RULE
VARCHAR2(9)
VARCHAR2(8)
DEFERRABLE
VARCHAR2(14)
VARCHAR2(9)
VARCHAR2(13)
VARCHAR2(14)
VARCHAR2(3)
VARCHAR2(4)
LAST_CHANGE
INDEX_OWNER
VARCHAR2(30)
INDEX_NAME
VARCHAR2(30)
VARCHAR2(7)
VIEW_RELATED
VARCHAR2(14)
SQL& select constraint_name ,constraint_type,status from user_constraints where table_name='USERINFO_C1' ;
CONSTRAINT_NAME
------------------------------ - --------
SYS_C0010837
SQL& alter table userinfo_c1 disable constraint ck_
表已更改。
select constraint_name ,constraint_type,status from user_constraints where table_name='USERINFO_C1' ;
CONSTRAINT_NAME
------------------------------ - --------
C DISABLED
SYS_C0010837
2)删除检查约束
ALTER TABLE table_name
DROP CONSTRAINT constraint_name
如上一样。本文所属图书&>&
本书用简单易懂的实例和大量的图示,深入浅出地介绍了Oracle数据库的操作与编程方面的知识。作者以实际工作为切入点,详细介绍了Oracle数据库的基础知识及PL/SQL程序设计实战的知识。本书共分为17章,主要介绍了...&&
检查约束允许用户在表列中应用一系列的自定义的逻辑,比如工资数必须要大于500,通过指定表达式来检查新插入或更新的字段值,如果布尔表达式结果为False或者是NULL,执行操作的SQL语句将会被回滚,同时会产生一个异常。一般情况下使用检查约束检查单个字段,有的时候也会使用检查约束验证多个字段。
检查约束既可以在列级别进行定义,也可以在表级别进行定义。与其他对象的定义类似,当在列级别创建检查约束时,只能约束一个字段,而在表级别创建检查约束的话,则可以根据需要同时指定一个或多个字段。
在创建表时,可以直接在字段的后面使用CHECK子句添加检查约束,大多数情况下使用CONSTRAINT为检查约束指定一个友好的名称,CONSTRAINT创建检查约束的语法如下所示:
[CONSTRAINT constraint_name] CHECK (condition)
为了演示检查约束的作用,下面创建了invoice_check表,该表的字段定义级别直接使用CHECK子句定义发票总额和支付总额的检查约束,如下代码所示:
CREATE TABLE invoice_check
&& invoice_id NUMBER ,
&& invoice_total& NUMBER(9,2)& CHECK (invoice_total&0 AND invoice_total&=5000) ,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& payment_total NUMBER(9,2)& DEFAULT 0 CHECK(payment_total&0 AND payment_total&=10000)
可以看到,创建语句使用CHECK子句为invoice_total的值指定范围为大于0且小于等于5000,payment_total字段的值指定范围为大于0且小于等于10000。当向invoice_check表中插入不符合检查约束条件范围的值时,SQL语句将被回滚并抛出异常。例如当向invoice_check表中插入不超出检查约束指定范围的值时,会产生如下所示的异常:
INSERT INTO invoice_check VALUES(1,-100,20000);
当执行该语句时,Oracle会提示如下所示的异常:
SQL& INSERT INTO invoice_check VALUES(1,-100,20000);
INSERT INTO invoice_check VALUES(1,-100,20000)
第1行出现错误:
ORA-02290: 违反检查约束条件 (SCOTT.SYS_C0011726)
与其他的约束创建相似,在列级别只能对单个字段定义检查约束,为了可以同时对多个字段进行约束,可以在表级别进行创建。为了演示表级别的检查约束创建,下面的代码使用CONSTRAINT关键字同时对invoice_total和payment_total进行了约束,如下代码所示:
CREATE TABLE invoice_check
&& invoice_id NUMBER ,
&& invoice_total& NUMBER(9,2) DEFAULT 0 ,
&& payment_total NUMBER(9,2)& DEFAULT 0,
&& CONSTRAINT invoice_ck CHECK(invoice_total&=5000 AND payment_total&=10000)
可以看到在表级别为约束定义了一个友好的名称。在定义中同时指定了invoice_total和payment_total约束,也就是说只有这两个字段的值都满足条件时才能满足约束条件,才能存储列值,否则当执行类似如下的代码时,会触发异常:
SQL& INSERT INTO invoice_check VALUES(1,);
INSERT INTO invoice_check VALUES(1,)
第 1 行出现错误:
ORA-02290: 违反检查约束条件 (SCOTT.INVOICE_CK)
在检查约束中还可以使用各种逻辑运算符以及标准的SQL函数来计算布尔值结果,比如可以在检查约束中使用BETWEEN、IN、IS NULL等运算符来组合多种表达式。下面的代码创建了一个名为invoice_check_others的表,在这个表的创建中使用了几种组合的表达式来定义检查约束,如下代码所示:
CREATE TABLE invoice_check_others
&& invoice_id NUMBER ,
&& invoice_name VARCHAR2(20),
&& invoice_type INT,
&& invoice_clerk VARCHAR2(20),
&& invoice_total& NUMBER(9,2) DEFAULT 0 ,
&& payment_total NUMBER(9,2)& DEFAULT 0,
&& --发票总数必须在1~1000之间
&& CONSTRAINT invoice_ck CHECK(invoice_total BETWEEN 1 AND 1000) ,
&& --发票名称必须为大写字母
&& CONSTRAINT check_invoice_name CHECK (invoice_name = UPPER(invoice_name)),
&& --发票类别必须在1~7之间
&& CONSTRAINT check_invoice_type CHECK (invoice_type IN (1,2,3,4,5,6,7)),
&& --发票处理员工编号不能为NULL值
&& CONSTRAINT check_invoice_clerk CHECK (invoice_clerk IS NOT NULL)
通过代码可以看到,BETWEEN、IS NOT NULL、UPPER运算符的使用可以加强表达式的表示范围,invoice_check_others表被成功创建后,就可以向该表中使用如下的语句插入记录:
INSERT INTO invoice_check_others VALUES(1,'INVOICE_NAME1',1,'b02393', );
由于上面的INSERT语句的匹配表中创建的检查约束,因此可以看到成功地将记录插入到了中。如果故意违反检查约束,比如将invoice_name改为小写字母的话,SQL*Plus将立即跳出异常代码,如下代码所示:
INSERT INTO invoice_check_others VALUES(1,'invoice_name1',1,'b02393', );
上述代码将触发check_invoice_name的约束违反异常,如下所示:
INSERT INTO invoice_check_others VALUES(1,'invoice_name1',1,'b02393', )
ERROR 位于第 1 行:
ORA-02290: 违反检查约束条件 (APPS.CHECK_INVOICE_NAME)
检查约束可以在表中附带简单业务逻辑,这大大方便了应用人员的,但是必须要注意检查约束不是灵丹妙药,而且很多开发人员避免使用检查约束,使用检查约束具有如下的限制:
&不能在视图上定义检查约束,但是可以在视图上使用WITH CHECK OPTION子句,该子句与使用检查约束等同。
&检查约束的表达式中不能包含子查询和标量子查询表达式,不能包含CURRENT_DATE、CURRENT_TIMESTAMP、DBTIMEZONE、LOCALTIMESTAMP、SESSIONTIMEZONE、SYSDATE、SYSTIMESTAMP、UID、USER和USERENV等函数。
&检查约束指定的表达式中不能包含自定义的函数。
&在检查约束的表达式中不能包含伪列,如CURRVAL、NEXTVAL、LEVEL或ROWNUM等伪列。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。
文章下载读书}

我要回帖

更多关于 sql检查约束 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信