在列上添加检查和在同一列上检查约束之间的区别

问题描述 投票:0回答:1

[通过使用XML比较表结构时,我们在检查约束相同的业务逻辑的表结构中得到了不同。请检查并向我们解释差异。

CREATE TABLE ESWAR(ID INT NOT NULL, NAME VARCHAR2(10));

ALTER TABLE ESWAR ADD CHECK("NAME" IS NOT NULL);

添加检查后的表定义:

create table ESWAR
(
  id   INTEGER not null,
  name VARCHAR2(10) not null
);

丢弃创建的系统约束

SELECT T.CONSTRAINT_NAME FROM ALL_Constraints t WHERE t.TABLE_NAME='ESWAR' AND T.SEARCH_CONDITION_VC='"NAME" IS NOT NULL';--SYS_C00179403

ALTER TABLE ESWAR DROP CONSTRAINT SYS_C00179403;

再次创建检查约束如下

ALTER TABLE ESWAR
  ADD CONSTRAINT CONST_ESWAR_CHECK
  CHECK ("NAME" IS NOT NULL);

创建约束后的表定义:

create table ESWAR
(
  id   INTEGER not null,
  name VARCHAR2(10)
);

-- Create/Recreate check constraints 
alter table ESWAR
  add constraint CONST_ESWAR_CHECK
  check ("NAME" IS NOT NULL);

SELECT * FROM ALL_Constraints t WHERE t.TABLE_NAME='ESWAR' AND T.SEARCH_CONDITION_VC='"NAME" IS NOT NULL';---CONST_ESWAR_CHECK
sql oracle plsql constraints
1个回答
0
投票

在您的情况下,约束是相同的。

当您手动创建约束时,Oracle提供了一些在直接列约束上不可用的选项。

  • 您可以为约束赋予用户定义的名称
  • 可以推迟约束
  • 可以启用/禁用约束
  • 检查约束可能更复杂,而不仅仅是NOT NULL
© www.soinside.com 2019 - 2024. All rights reserved.