首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 資料庫新增 NOT NULL 約束完整指南

     編輯:Oracle 教學

Oracle 資料庫新增 NOT NULL 約束完整指南

在 Oracle 資料庫中,NOT NULL 約束用於確保欄位不接受空值,是資料完整性的重要保障。本文詳細說明建立資料表時與事後修改資料表兩種情境下的新增語法,並搭配實際操作範例幫助快速掌握。

一、建立資料表時直接指定 NOT NULL

在 CREATE TABLE 陳述式中,於欄位定義後加上 NOT NULL 即可。完整語法如下:

column_name data_type
[CONSTRAINT constraint_name] NOT NULL

CONSTRAINT constraint_name 為選擇性,用於自訂約束名稱,方便後續管理與除錯。

二、對既有資料表新增 NOT NULL 約束

若資料表已存在,需使用 ALTER TABLE ... MODIFY 語法:

ALTER TABLE table_name MODIFY column_name [CONSTRAINT constraint_name] NOT NULL;

注意:欄位中若已存在 NULL 值,執行時將報錯 ORA-01400,需先更新資料或設定預設值。

三、移除 NOT NULL 約束

同樣使用 ALTER TABLE ... MODIFY,將約束改為 NULL 即可:

ALTER TABLE table_name MODIFY column_name NULL;

四、實戰操作示範

以下透過 SQL*Plus 實際操作流程展示完整生命週期:

SQL> CREATE TABLE person(
  2  pid NUMBER(4) NOT NULL,
  3  pname VARCHAR2(20),
  4  psex CHAR(2)
  5  );
表已建立。

SQL> DESC person;
名稱       是否為空? 類型
----------------------------------------- -------- -------------------
PID        NOT NULL NUMBER(4)
PNAME      VARCHAR2(20)
PSEX       CHAR(2)

SQL> ALTER TABLE person MODIFY pname NOT NULL;
表已更改。

SQL> DESC person;
名稱       是否為空? 類型
----------------------------------------- -------- ------------------
PID        NOT NULL NUMBER(4)
PNAME      NOT NULL VARCHAR2(20)
PSEX       CHAR(2)

SQL> INSERT INTO person VALUES(1,'aaa','女');
已建立 1 筆。

SQL> INSERT INTO person VALUES(1,'aaa',NULL);
已建立 1 筆。

SQL> INSERT INTO person VALUES(1,NULL,NULL);
INSERT INTO person VALUES(1,NULL,NULL)
*
第 1 行出現錯誤:
ORA-01400: 無法將 NULL 插入 ("SYSTEM"."PERSON"."PNAME")

SQL> ALTER TABLE person MODIFY pname NULL;
表已更改。

SQL> DESC person;
名稱       是否為空? 類型
----------------------------------------- -------- ------------------
PID        NOT NULL NUMBER(4)
PNAME      VARCHAR2(20)
PSEX       CHAR(2)

SQL> INSERT INTO person VALUES(1,NULL,NULL);
已建立 1 筆。

五、關鍵提醒

  • 新增 NOT NULL 前務必確認欄位無 NULL 值,否則會拋出 ORA-01400。
  • 建議為重要約束显式命名(CONSTRAINT pk_person_pid),利於後續 DROP CONSTRAINT 或查詢 USER_CONSTRAINTS。
  • 移除約束後,資料字典 USER_CONSTRAINTS 中對應記錄會自動消失。

掌握以上語法與注意事項,即可靈活控管 Oracle 資料表的非空約束,確保資料品質。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved