Oracle中Constraint的状态参数initially与deferrable

在Oracle数据库中,关于约束的状态有下面两个参数:
            initially (initially immediate 或 initially deferred)
            deferrable(deferrable 或 not deferrable)
      第1个参数,指定默认情况下,约束的验证时刻(在事务每条子句结束时,还是在整个事务结束时)。
      第2个参数,指定了在事务中,是否可以改变上一条参数的设置。
      如果不指定上述参数,默认设置是 initially immediate not deferrable。
      注意:如果约束是not deferrable,那么它只能是initially immediate,而不能是initially deferred。

 

测试①,initially immediate:
SQL> create table nlist (
  2      nid number
  3  );
 
Table created
 
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially immediate;
 
Table altered
 
SQL> insert into nlist values (1);
 
1 row inserted
 
SQL> insert into nlist values (1);
 
insert into nlist values (1)
 
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
 

测试②,initially deferred:
SQL> create table nlist (
  2      nid number
  3  );
 
Table created
 
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred;
 
Table altered
 
SQL> insert into nlist values (1);
 
1 row inserted
 
SQL> insert into nlist values (1);
 
1 row inserted
 
SQL> commit;
 
commit
 
ORA-02091: 事务处理已回退
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
 
测试③,initially immediate deferrable:
SQL> create table nlist (
  2      nid number
  3  );
 
Table created
 
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially immediate deferrable;
 
Table altered
 
SQL> set constraint pk_nlist deferred;
 
Constraints set
 
SQL> insert into nlist values (1);
 
1 row inserted
 
SQL> insert into nlist values (1);
 
1 row inserted
 
SQL> commit;
 
commit
 
ORA-02091: 事务处理已回退
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)
 
测试④,initially deferred deferrable:
SQL> create table nlist (
  2      nid number
  3  );
 
Table created
 
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred deferrable;
 
Table altered
 
SQL> set constraint pk_nlist immediate;
 
Constraints set
 
SQL> insert into nlist values (1);
 
1 row inserted
 
SQL> insert into nlist values (1);
 
insert into nlist values (1)
 
ORA-00001: 违反唯一约束条件 (TEST.PK_NLIST)

测试⑤:
SQL> create table nlist (
  2      nid number
  3  );
 
Table created
 
SQL> alter table nlist add constraint pk_nlist primary key (nid) initially deferred no deferrable;
 
alter table nlist add constraint pk_nlist primary key (nid) initially deferred no deferrable
 
ORA-01735: 无效的 ALTER TABLE 选项
转载自http://hi.baidu.com/linkzq/item/be23df424c9312e3bdf4511c

转载于:https://www.cnblogs.com/iImax/archive/2012/09/11/2680511.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracleconstraint是用于定义表数据的限制条件,以确保数据的完整性和一致性。constraint可以应用于列级别或表级别,可以定义以下类型的限制条件: 1. Primary key:主键约束用于定义表的唯一标识符,确保每行数据都有唯一的标识符。 2. Foreign key:外键约束用于定义表之间的关系,确保在一个表的数据必须在另一个表存在。 3. Unique:唯一约束用于确保表的某列数据是唯一的。 4. Check:检查约束用于定义表数据的条件,确保数据满足特定的条件。 5. Not null:非空约束用于确保表的某列数据不为空。 6. Default:默认约束用于定义表某列的默认值。 通过使用constraint,可以确保表的数据满足特定的条件,从而提高数据的完整性和一致性。 ### 回答2: 在OracleConstraint(约束)是一种用于限制表数据的有效性和完整性的对象。它可以在创建表时定义,也可以在表创建之后添加。 在创建表时定义Constraint,可以在列定义使用“CONSTRAINT”关键字,后面紧跟着约束类型和名称。例如: CREATE TABLE student ( id NUMBER CONSTRAINT student_id_pk PRIMARY KEY, name VARCHAR2(20) CONSTRAINT student_name_nn NOT NULL, age NUMBER CONSTRAINT student_age_ck CHECK(age > 0), class_id NUMBER CONSTRAINT student_class_id_fk REFERENCES class(id) ); 上面的例子,“student_id_pk”是表的主键约束,“student_name_nn”是非空约束,“student_age_ck”是检查约束(要求年龄大于0),而“student_class_id_fk”是外键约束,引用了“class”表的“id”列。 除了在列定义定义约束,还可以使用ALTER TABLE命令来添加Constraint。例如,添加一个新的唯一约束: ALTER TABLE student ADD CONSTRAINT student_name_uk UNIQUE(name); 在删除表的数据时,如果违反了Constraint的限制,则会抛出异常并终止操作。例如,如果试图插入一个重复的“name”值: INSERT INTO student VALUES (1, 'Tom', 18, 1); INSERT INTO student VALUES (2, 'Tom', 20, 1); -- 插入失败,抛出异常 在修改表结构时,也可以使用ALTER TABLE命令修改Constraint。例如,将“student_name_uk”约束修改为非空约束: ALTER TABLE student MODIFY CONSTRAINT student_name_uk NOT NULL; 总之,在Oracle使用约束可以确保数据的完整性和有效性,避免了数据不一致和错误。在设计和使用表时,应该充分利用约束来保证数据的正确性。 ### 回答3: Oracle数据库constraint是用来保证数据完整性和一致性的非常重要的工具。constraint可以设定在表的一列或多列上,以限制数据的输入范围或特定的约束条件。下面我们具体介绍一下constraintOracle数据库的用法: 1. Primary Key Constraint Primary Key是指一个或多个列的唯一标识符,用于保证表每一行数据的唯一性。Primary Key Constraint可以由多个列组合而成,但是不允许出现空值。一个表只能拥有一个Primary Key Constraint。例如:在一个学生表,学生ID可以作为Primary Key,以确保学生ID的唯一性。 2. Unique Constraint Unique Constraint用于保证表每一个列的唯一性。与Primary Key Constraint不同的是,它允许出现空值。一个表可以拥有多个Unique Constraint。例如:在一个学生表,学生手机号码可以设置为Unique Constraint,以确保每个手机号码只被使用一次。 3. Foreign Key Constraint Foreign Key Constraint用来确保两个表之间的数据关联性。例如:在学生表和班级表之间,学生表的班级ID列与班级表的班级ID列应该是一致的,即学生表的班级ID必须存在于班级表。因此,我们需要使用Foreign Key Constraint来确保这样的一致性。 4. Check Constraint Check Constraint用来规定列数据的合法性和有效性。例如:在学生表,年龄列的取值范围应该是0到100岁之间,我们可以使用Check Constraint来限制年龄的取值范围。 5. Not Null Constraint Not Null Constraint用来规定列的数据不允许为空。例如:在学生表,学生姓名列不允许为空,我们可以使用Not Null Constraint来保证学生姓名列的数据完整性。 总之,constraintOracle数据库保证数据完整性和一致性的非常重要的工具,可以用来规定列数据的合法性、有效性、唯一性以及关联性等方面的约束条件。正确使用constraint可以让我们的数据库更加规范、安全和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值