`
kb5706
  • 浏览: 41153 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

check约束能加if条件的吗???

 
阅读更多
请教大侠下,对一张表添加约束,能带有if条件的吗?比如:表AA,有其中字段type,外键schdeule_id,如果type有添加约束只能是'aa','bb','cc',然后如果type='aa'时,那么外键schdeule_id不能为空,如果是'bb','cc'那就可以为空,这样现在添加约束,谢谢大家了,我查了很多都没有这样的,希望有写过的能帮写下,谢谢了,在线等

用触发器来实现吧........

可以变通一下

create table abcd(id number,type varchar2(2),schdeule_id char(20),
  2    constraint abcd_1 foreign key(schdeule_id) references abc(a),
  3    constraint abcd_2 check(type in ('aa','bb','cc') and case type when 'aa' then schdeule_id else '1' end is not null));
 
Table created
 
SQL> insert into abcd values(1,'dd',null);
 
insert into abcd values(1,'dd',null)
 
ORA-02290: 违反检查约束条件 (W.ABCD_2)
 
SQL> insert into abcd values(1,'bb',null);
 
1 row inserted
 
SQL> insert into abcd values(2,'aa',null);
 
insert into abcd values(2,'aa',null)
 
ORA-02290: 违反检查约束条件 (W.ABCD_2)
 
SQL> insert into abcd values(3,'aa','2');
 
1 row inserted
 
SQL> insert into abcd values(4,'aa','123');
 
insert into abcd values(4,'aa','123')
 
ORA-02291: 违反完整约束条件 (W.ABCD_1) - 未找到父项关键字

else '1' end is not null的else '1' end是什么意思呢!

if是pl/sql里的语法,sql中要用case
若type不是'aa',则取'1',这个'1'也可以用其他的非空字符代替,类型要与else前取的schdeule_id一致,使非空判断恒成立
若type 为'aa',则用schdeule_id来判断是否非空


分享到:
评论

相关推荐

    T-SQL建库建表加约束(主键,外键,检查,唯一等约束,建文件夹)

    T-SQL建库建表的同时加约束,调用DOS cmdshell命令建文件夹, if exists(select * from sysobjects where name ='Result') drop table Result create table Result ( ExamDate datetime default getdatet() not null,...

    mysql数据库的基本操作语法

    MySQL不支持check约束,但可以使用check约束,而没有任何效果; 根据约束数据列限制,约束可分为: 单列约束:每个约束只约束一列 多列约束:每个约束约束多列数据 MySQL中约束保存在information_schema数据库的...

    数据库表ERP表参考。仅供参考

    --select 字段名 from 表名 [条件] --go --主外健约束语句没有执行 use T90ERP go --***********人力资源 --部门表:Depet if exists(select * from sysobjects where name='Depet') drop table Depet go ...

    SQL Server 2008编程入门经典(第3版)

    6.4 CHECK约束 6.5 DEFAuLT约束 6.5.1 在cREATETABLE语句中定义DEFAULT约束 6.5.2 在已存在的表中添加DEFAUIT约束 6.6 禁用约束 6.6.1 在创建约束时忽略无效的数据 6.6.2 临时禁用已存在的约束 6.7 规则和默认值 ...

    SQL sever 实训

    --使用ALTER TABLE 语句为已经创建的表添加主键约束、外键约束 --主键 ALTER TABLE Customer ADD CONSTRAINT PK_Customer PRIMARY KEY(CusNo) GO ALTER TABLE Product ADD CONSTRAINT PK_Product PRIMARY KEY...

    精通sql结构化查询语句

    11.3.6 使用TRUNCATE TABLE语句 11.4 小结第12章 完整性控制 12.1 完整性约束概述 12.1.1 数据的完整性简介 12.1.2 完整性约束的类型 12.1.3 数据完整性的意义 12.2 约束 12.2.1 DEFAULT约束 12.2.2 CHECK约束 ...

    sqlserver数据库中的表、字段sql语句

    1.系统表sysobjects ...C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 FS = 程序集 (CLR) 标量函数 FT = 程序集 (CLR) 表值函数 IF = 内联表函数 IT = 内部表 P = 存储

    java面试800题

    Q0034 给定了一些创建数据库试图的SQL语句问什么条件下才可以对试图执行修改,增加,删除操作 特别强调了WITH CHECK OPTION这个约束的含义,使用,产生的不同结果。参考Oracle 视图的基本知识,单个表上的视图,多...

    测试笔记(从零开始)

    5 检查约束 check 31 6 唯一约束 unique 32 SQL语句 32 创建数据库. 32 表、字段、类型 33 查询 35 批量处理? 40 视图/虚表 view 41 索引 42 存储过程 procedure 42 事务 transaction 43 触发器 trigger 46 练习 46...

    T-SQL电子书包含PPT及学习笔记、课后作业 非常好的sql学习资料

    检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束 默认约束(Default Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男” 外键约束(Foreign Key Constraint):...

    SQL.Server.2008编程入门经典(第3版).part1.rar

    6.4 CHECK约束 6.5 DEFAuLT约束 6.5.1 在cREATETABLE语句中定义DEFAULT约束 6.5.2 在已存在的表中添加DEFAUIT约束 6.6 禁用约束 6.6.1 在创建约束时忽略无效的数据 6.6.2 临时禁用已存在的约束 6.7 规则和默认值 ...

    SQL.Server.2008编程入门经典(第3版).part2.rar

    6.4 CHECK约束 6.5 DEFAuLT约束 6.5.1 在cREATETABLE语句中定义DEFAULT约束 6.5.2 在已存在的表中添加DEFAUIT约束 6.6 禁用约束 6.6.1 在创建约束时忽略无效的数据 6.6.2 临时禁用已存在的约束 6.7 规则和默认值 ...

    TSqlStrong:T-Sql类型检查器,用于检测不正确的联接,无效的空值操作,枚举检查约束违例,在呼叫站点上对临时表的错误使用等。 提供在线演示

    将检查约束作为枚举-确保仅分配有效的文字或将其与检查约束列进行比较。 插入到选择别名匹配中-防止在有许多列的情况下使用插入选择造成的位置错误。 验证不同存储过程之间临时表结构用法的正确性。 流打字。 ...

    精通SQL 结构化查询语言详解

    14.2.6 CHECK(校验)约束 14.3 深入探讨外键与完整性检查  14.3.1 引用完整性检查  14.3.2 MATCH子句  14.3.3 更新、删除操作规则 14.4 域约束与断言 14.4.1 域与域约束 14.4.2 利用断言创建多表约束 14.5...

    towr:轻量,基于特征的C ++库,用于腿式机器人的轨迹优化

    特征: :check_mark: 使用直观,有效地制定变量,成本和约束条件。 :check_mark: 启用使用高性能求解器和。 :check_mark: 使用的运动计划的精美可视化。 :check_mark: /柳絮集成(可选)。 :check_mark: 轻量级(约...

    精通SQL--结构化查询语言详解

    14.2.6 check(校验)约束 289 14.3 深入探讨外键与完整性检查 290 14.3.1 引用完整性检查 290 14.3.2 match子句 291 14.3.3 更新、删除操作规则 293 14.4 域约束与断言 295 14.4.1 域与域约束 295 14.4.2 ...

    sql总结.doc

    2.能过实现比check更严格的约束,与CHECK 约束不同,触发器可以引用其它表中的数据。通过其他表中的数据的变化来设置更加复杂的约束。 缺点:滥用触发器会造成数据库及应用程序的维护困难。 (5)触发器的两种形式...

    SQLite Expert 非常好用的SQLite管理软件(含注册)

    Any restructure operation is wrapped in a nested transaction which is rolled back if any errors occur when applying changes. Import and Export data Import data from ADO data source, CSV files, SQL...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    在创建表时,经常会创建该表的主键、外键、唯一约束、Check约束等  语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) ...

Global site tag (gtag.js) - Google Analytics