最近做一份数据库的任务,发现MySQL中不支持在创建表定义字段时使用check约束,如果要在MySQL中使用类似字段约束取值,有两种方式:1.枚举enum,2.创建触发器

MySQL关于check约束无效的解决办法

下面正式记录一下,Oracle数据库各种各样的check约束的使用方法

引用: https://www.cnblogs.com/ChineseIntelligentLanguage/p/6513282.html

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.com');

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]'
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(字段名)

Oracle Check约束相关推荐

  1. oracle中check约束性别,关于Oracle Check类型约束的导入与启用

    今天有朋友问,Oracle的Check约束在indexfile中是否存在,导入后没有检查到. 我测试了一下,事实证明是可以的,Oracle的Check Constraints可以通过imp,使用ind ...

  2. Oracle之Check约束实例详解

    Oracle | PL/SQL Check约束用法详解 1. 目标 实例讲解在Oracle中如何使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表的列中增 ...

  3. oracle建表时check约束用法,Oracle之Check约束实例具体解释

    Oracle | PL/SQL Check约束使用方法具体解释 1. 目标 实例解说在Oracle中怎样使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表 ...

  4. oracle如何写check,Oracle之Check约束实例详解

    Oracle | PL/SQL Check约束用法详解 1. 目标 实例讲解在Oracle中如何使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表的列中增 ...

  5. oracle的check约束

    oracle的check约束 1.建表时: create table tbl_name( column_name1 char(5) primary key, column_name2 number(2 ...

  6. Oracle修改check约束的sql语句

    开始想修改这张表的其中一个字段的约束 check约束,百度各种说不能修改check约束??只能删掉了约束,再重新修改约束.经过各种测试得出,oracle是可以修改check约束,但是也是必须需要删掉原 ...

  7. Oracle表字段check语句,sql语句大全之SQL CHECK 约束

    SQL CHECK 约束 SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约 ...

  8. oracle check 日期大于,sql – 出生日期的CHECK约束?

    检查约束必须是确定性的.也就是说,特定行必须始终满足约束,否则它必须始终无法满足约束.但是,由于返回值不断变化,因此SYSDATE本质上是不确定的.因此,您无法定义调用SYSDATE或任何其他用户定义 ...

  9. oracle 怎么创建约束,Oracle创建约束

    约束的类型: oracle数据库支持的约束类型包括: 1.unique 2.not null 3.primary key 4.foreignkey 5.check 约束都有名称.如果没有显示地给它们命 ...

最新文章

  1. AI 识别抑郁症正确率高达八成,但AI+精神健康还有很长的路要走
  2. 介绍一款比Android原生模拟器还要快的模拟器Genymotion(转)
  3. 深度学习与计算机视觉系列(4)_最优化与随机梯度下降\数据预处理,正则化与损失函数
  4. 【数据平台】基于pyhs2库Python作为client driver连接HiveServer
  5. linux下拒绝用户登录,Linux系统用户管理之禁止用户登录
  6. java zip解压_Java语言入门第一课
  7. 怎么把页面按比例缩小_做PPT多图排版千万别套模板了,按这28种版式来,绝对靠谱!...
  8. java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)
  9. shell 当中的比较运算
  10. CentOS 6.5上安装Python 2.7.9
  11. python中update是啥意思_python中update的基本使用方法详解
  12. Hibernate中的HQL语言
  13. 使用valgrind检查内存越界
  14. 渗透测试专业人员使用的11种工具
  15. 联想Y7000P 安装黑苹果到外置移动机械硬盘
  16. 解决关键词这个问题,ASO优化效果事半功倍
  17. Java程序打包成jar文件
  18. 小白学习图像处理——分水岭算法
  19. matlab中pwelch函数计算功率谱密度
  20. 100°C TALK百度健康行业沙龙:大数据赋能大健康产业发展

热门文章

  1. Race condition
  2. python中的时间处理模块(二):datetime模块之timedelta类详解
  3. webpack简单打包PC网站前端资源
  4. 秀场精灵陈梓桐 受邀担任第六季完美童模全球总决赛首席体验官
  5. 现代IT项目中的需求管理如何做?
  6. matlab中自相关函数
  7. 学习笔记之-51单片机IO口详解
  8. LeetCode中等题之分数加减运算
  9. 一个阴历阳历互相转化的类(c#源码)
  10. Swi-Prolog的安装