Oracle数据库设计——定义约束 Not NULL约束 Default values

Not Null约束
not null约束常常被归于“强制”约束。

CREATE TABLE temp(id NUMBER(1) NOT NULL);

CREATE TABLE temp(id NUMBER(1) CONSTRAINT nn_temp_id NOT NULL);

为什么我们为Primary key, unique, foreign key, 和chech约束命名,有一个重要原因是:
    Oracle约束冲突错误信息包含了约束名,这是一个非常有用的的信息,让我们可以在没有查看数据字典和引起错误的研究代码前迅速的定位分离出问题.
而not null冲突错误信息中没有约束名,因为它包含了字段名
CREATE TABLE temp
 (N1 NUMBER constraint nn_1 NOT NULL,
  N2 NUMBER constraint nn_2 NOT NULL,
  N3 NUMBER constraint nn_3 NOT NULL);

INSERT INTO temp VALUES (1, null, 1);
将会产生:
ORA-01400: cannot insert NULL into ("SCOTT"."TEMP"."N2")

Default Values(默认值)

看一下下面一个例子:
CREATE TABLE TEMP (id NUMBER, value NUMBER);
INSERT INTO temp             VALUES (1, 100);
INSERT INTO temp (id, value) VALUES (1, 100);
INSERT INTO temp (id)        VALUES (2);

前两行Insert语句是一样的,第三条在Value字段中插入了一个NULL值
你希望这样吗?一个NULL?也许一个0会更好一点,下面我们用0来代替默认的Null值
CREATE TABLE TEMP (id NUMBER,
                   value VARCHAR2(10) DEFAULT 0);
Value字段的默认插入值不再是Null,
INSERT INTO temp (id) VALUES (2);将会是(2,0);

NULL和0的意义是不一样的,Null是一个对象,比如说学生表中有一个学位字段,如果某学生没有学位,那么这个字段可以默认设置为Null.
0是一个数据值,表示数据量为0,比如所某员工每月奖金,默认可以设置为0;当然也可以默认为空,但在显示计算的时候需要对Null对象字段进行处理,否则就会出现异常。

约束维护

(1)、ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;
    保留约束的数据字典定义,但不应用约束。在数据库开发中当你需要加载数据时不希望应用商业规则到这些数据上你可以这样做。一旦数据加载后你可以通过SQL*PLUS来浏览它。如果数据没问题,可以enable约束。
(2)、ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;
    如果数据有错,Enable操作将会失败。Oracle错误信息将会显示约束不能应用,因为数据不能满足约束规则。有三种选择当数据不正确,不能Enable约束时;
    1、删除插入的数据
    2、使用异常处理表方式Enable约束,(后面将会讲述)
    3、使用NOVALIDATE选项Enable约束.语法如下:
        ALTER TABLE table_name ENABLE CONSTRAINT constraint_name NOVALIDATE;
    NOVALIDATE选项Enable约束但未来事务处理中就会存在问题。表中的当前数据不满足约束,这会产生一些严重的后果。比如,许多应用的组件依赖于商业规则。html界面的一个文本框可能是查询中使用主键查询Where语句中一部分,这是编程中返回单行记录常见情形,如果返回多行记录,代码将崩溃。
    如果任务类型是学习和分析历史数据的,NOVALIDATE选项将不会有问题,你可以保留旧的,不合约束规则的数据在表中,Enable约束,处理加载一些新数据,并在这些新数据上应用商业规则。但NOVALIDATE在生产系统中将带来许多问题。
    当Disable一个主键或Unique约束时,主键或Unique字段上的索引被删除。因此,如果表比较大,你可能会在enable时看到一些时间延迟。这是来重建索引的时间。同样,如果删除约束,索引也删除。
    Disable或Drop主键或Unique(被一个外键参照)操作时可以是CASCADE选项.语法是:
     ALTER TABLE table_name DISABLE CONSTRAINT constraint_name CASCADE;
     ALTER TABLE table_name DROP CONSTRAINT constraint_name CASCADE;
    如果你不知道有一个外键而没有使用CASCADE选项,AlTER TABLE 操作就会失败。

你可能感兴趣的:(Oracle,null,oracle,数据库,table,insert,html)