Oracle Not Null
在本教程中,您将学习如何使用Oracle NOT NULL约束强制列不接受NULL值。
Oracle NOT NULL约束指定列不能包含NULL值。 Oracle NOT NULL约束是通常在CREATE TABLE语句的列定义中使用的内联约束。
CREATE TABLE table_name ( ... column_name data_type NOT NULL ... );
可以通过使用语句将NOT NULL约束添加到现有表。
ALTER TABLE table_name MODIFY ( column_name NOT NULL);
在个语句中,在应用NOT NULL约束之后,column_name不能包含任何NULL值。
Oracle NOT NULL示例
以下声明创建surcharges表:
CREATE TABLE surcharges ( surcharge_id NUMBER GENERATED BY DEFAULT AS IDENTITY, surcharge_name VARCHAR2(255) NOT NULL, amount NUMBER(9,2), PRIMARY KEY (surcharge_id) );
surcharges表有三列:附加费用,附加费名称和金额。
surcharge_id列是由PRIMARY KEY约束指定的表的主键列,因此,Oracle向该列隐式添加NOT NULL约束。
surcharge_name列具有在列定义中显式指定的NOT NULL约束。amount列可以接受NULL值。
以下语句在surcharges表中插入一行:
INSERT INTO surcharges(surcharge_name, amount) VALUES('Late order placement',10);
它按预期工作。
但是,以下语句不起作用:
INSERT INTO surcharges(surcharge_name, amount) VALUES(null,20);
因为它试图将NULL值插入到具有NOT NULL约束的surcharge_name列中。
以下语句可以正常工作,因为amount列接受NULL值:
INSERT INTO surcharges(surcharge_name, amount) VALUES('Rush Order',NULL);
以下语句显示surcharges表的所有约束条件:
SELECT table_name, constraint_name, search_condition FROM user_constraints WHERE table_name = 'SURCHARGES';
如果要将NOT NULL约束添加到amount列,请使用以下ALTER TABLE语句:
ALTER TABLE surcharges MODIFY (amount NOT NULL);
发生类似以下错误:
SQL Error: ORA-02296: cannot enable (OT.) - null values found
因为surcharges表的数据记录中已经有一行包含NULL值。
因此,在添加NOT NULL约束之前,您需要确保附件表中的现有数据不违反NOT NULL约束:
UPDATE surcharges SET amount = 0 WHERE amount IS NULL;
现在,如果再次执行ALTER TABLE语句:
ALTER TABLE surcharges MODIFY (amount NOT NULL);
它应该按预期工作。
删除NOT NULL约束
有时,需要更改具有NOT NULL约束的列以接受NULL值。
为此,需要使用ALTER TABLE语句从列中删除NOT NULL约束,如下所示:
ALTER TABLE table_name MODIFY ( column_name NULL)
例如,要从surcharges表的金额列中删除NOT NULL约束,请使用以下语句:
ALTER TABLE surcharges MODIFY (amount NULL);