CHIL-ORACLE-检查约束(check)
1.检查约束 ( check )
  某列取值范围限制、格式限制等
2.检查只能是男或者⼥
create table test29(
id number primary key,
sex varchar2(2) check(sex in ('男,⼥'))
);
create table test30(
id number primary key,
sex varchar2(2) check(sex ='男' or sex='⼥')
)
;
create table test31(
id number primary key,
sex varchar2(2)
);
alter table test31 add constraint chkk check (sex ='男' or sex='⼥');
alter table test31 add constraint chkk check (sex in('男','⼥'));
3.在⼀个范围中间
create table test32(
id number primary key,
age number check(age>0 and age<120)
)
;
create table test33(
id number primary key,
age number check(age between 12 and 30)
);
create table test34(
id number primary key ,
age number
);
alter table test34 add constraint ch_test34 check(age>0 and age<120);
alter table test34 add constraint ch_test34 check(age between 12 and 30);
4.长度⼤于某个值
create table test35(
id number primary key,
password varchar2(10) check(length(password)=6)
);
create table test36(
id number primary key ,
password varchar2(20)
);
alter table test36 add constraint check_test36 check(length(password)=6);
5.数⼤于某个值
create table test37(
id number(10)primary key ,
no number(10) check(no>1)
);
create table test38(
id number(10) primary key,
no number(10)
);
alter table test38 add constraint ch_test38 check(no>1);
---------------
6.只能是8位字符,前两位是 0 ,3~4位为数字,第 5 位为"_"下划线,6~8位为字母
create table test39(
id number(10) primary key,
password varchar2(20) check((password like '00[0-9][0-9]/_[a-z,A-Z][a-z,A-Z][a-z,A-Z]%' escape '/')and(length(password)=8) ) );
insert into test39 values (1,'0011_aaa');
create table test40(
id number(10) primary key ,
password varchar2(10)check((password like '00[0-9][0-9][_][a-z,A-Z][a-z,A-Z][a-z,A-Z]%')and(length(password)=8) ));
);
alter table test40 modify password varchar2(10)check((password like '00[0-9][0-9][_][a-z,A-Z][a-z,A-Z][a-z,A-Z]%')and(length(password)>1) insert into test40 values(1,'0012_abc');
-
--------------
7.电⼦邮箱要含有@符号check(字段 like '%@%')
create table test41(
id number(10) primary key,
email varchar2(10) check (email like '%@%')
);
insert into test41 values(1,'12@126');
8.SQL中⽤check约束⼀列的⾸字母为's'check(字段 like 's%')
create table test42(
id number(10) primary key ,
name varchar2(10) check(name like 's%')
)
;
insert into test42 values(1,'sname');
------------
9.检查约束前3位和后8位均为数字字符:check(字段 like '[0-9][0-9][0-9]%[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
create table test43(
id number(10) primary key,
no varchar2(10)check(no like '[0-9][0-9][0-9]%[0-9][0-9][0-9][0-9][0-9]')
);
insert into test43 values(1,'12345678');
------------
10.如何建⽴检查⾝份证的约束,⾝份证是18位,最后⼀位还有可能是X
create table test44(
id number(10) primary key,
no values(18) check( length(no)=18 and right(no,17)like '[0-9]' or right (no,17) like 'x' )
);
insert into test44 values (1,'12345678912345678x');
select ⾝份证号 from 表名where len(⾝份证号) = 18 and (right(⾝份证号,17) like '[0-9]'or right(⾝份证号,17) like 'x')
11.如何设置区号由0-9之间的数字组成CONSTRAINT
quhao CHECK (quhao LIKE '[0-9][0-9][0-9]'
oracle 字符串转数组
or quhao LIKE '[0-9][0-9][0-9][0-9]'
or quhao LIKE '[0-9][0-9][0-9][0-9][0-9]'));
解释:quhao LIKE '[0-9]...[0-9]'的号码由表⽰n位从0到9中的数组成。
quhao LIKE '[0-9][0-9][0-9]' 表⽰3位的区号,如北京010;
quhao LIKE '[0-9][0-9][0-9][0-9]'表⽰4位的区号,如三门峡0398;
quhao LIKE '[0-9][0-9][0-9][0-9][0-9]'表⽰5位的区号,如⾹港00852
12.最后回复时间 TLastClickT 发贴时间 TTime最后回复时间必须晚于发贴时间并且⼩于等于当前时间
使⽤GetDate()函数获取当前时间
设计表在TLastClickT上右击选择约束,新建,
填⼊([TLastClickT] > [TTime] and [TLastClickT] < GetDate())
或者TiastReply(回帖时间)⼤于Ttime(发帖时间)
在创表的同时创建表的时候应该还没有回帖吧,为什么要⽤默认值?
可以添加⼀个约束
alter table topic alter column add check(TlastReply is null or TlastReply > Ttime)
13.定义前⼋位为数字或者 -⼀共是15位,为CHAR型
alter table 表名add constraint chk check(字段 like'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%'),
constraint chklen check(len(字段)=15)
14.如何限制varchar字段不允许出现单引号的检查约束
设表为TALBENAME,不能有引号的字段为FIELDNAME 则:
ALTER TABLE tablename ADD CONSTRAINT CK_fieldname CHECK (not fieldname like '%''%')
15.在表中的某列中通过检查约束,让其有某些固定的值
check(sid like 'bd[0-9][0-9][0-9][0-9][0-9][0-9]')
add const ck_num check(num like '[1][2] [4][_] [0-9][0-9] [0-9][a-z]')
16.如何限制varchar字段不允许出现字符串的检查约束
设表名为TABLENAME,VARCHAR类型的字段为VAR_FIELD.则有:
ALTER TABLE [dbo].[TABLENAME]
ADD CONSTRAINT [CK_TABLENAME]
CHECK (isnumeric([VAR_FIELD]) = 1)
这样,在VAR_FIELD只要出现字段⼀旦出现⾮数字内容就会报告错误。
17.电话号码的格式必须为xxxx-xxxxxxxx或⼿机号11位
alter 表名 add constraint ck_字段名 check (字段 like '[0-9][0-9][0-9][0-9]_[0-9]......' or length(字段)=11)
18.⾝份证号是18位且唯⼀的
alter 表名 add constraint ck_字段名 check (len(字段名)=18 ),
constraint uk_字段名 unique(字段名)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。