Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So erstellen Sie eine Nicht-Null-Einschränkung in Oracle

Was ist eine Nicht-Null-Einschränkung in Oracle

Nicht-Null-Einschränkungen in Oracle werden verwendet, um Nicht-Null-Werte in der Spalte in der Tabelle zu erzwingen. Wenn Sie also versuchen, Null in diese Spalte einzufügen, wird ein Fehler ausgegeben.

So erstellen Sie eine Nicht-Null-Einschränkung

Nicht-Null-Einschränkungen werden bei der Tabellenerstellung definiert, oder Sie können die Tabelle später ändern, um eine Spalte in Nicht-Null zu ändern. Schauen wir uns die Beispiele an.

Tabellenerstellung
Nicht-Null-Einschränkung wird inline mit der Spalte angegeben.

SQL> CREATE TABLE "EMP"
    ("EMPNO" NUMBER(4,0) Not Null,
     "ENAME" VARCHAR2(10) Not null,
     "JOB" VARCHAR2(9),  
     "MGR" NUMBER(4,0),       
     "HIREDATE" DATE,
     "SAL" NUMBER(7,2) ,  
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0)
      );

 Table created. 

Hier haben wir zwei Nicht-Null-Einschränkungen für die Tabelle emp definiert. Wir können die Not-Null-Einschränkungen für die Tabelle mit der folgenden Abfrage überprüfen

SQL> column CONSTRAINT_NAME format a20
SQL> column SEARCH_CONDITION format a50
SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND    
     Constraint_type = 'C';

Nicht-Null-Constraints sind auch als Check-Constraints definiert und haben Suchbedingungen, da der Spaltenname nicht null ist

Not-Einschränkung nach Tabellenerstellung hinzufügen

Wir können die Tabelle ändern, um die Nicht-Null-Einschränkung

hinzuzufügen
SQL> alter table emp modify ("HIREDATE" not null);
 Table altered.

Wenn in der Spalte Nulldaten vorhanden sind, schlägt diese Anweisung fehl

SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C'

Wir können der Not Null-Beschränkung auch einen benutzerdefinierten Namen geben. Hier ist das Beispiel, um es zu demonstrieren

SQL> CREATE TABLE "EMP"
 ("EMPNO" NUMBER(4,0) Constraint EMP_NOTNULL Not Null,  
 "ENAME" VARCHAR2(10) Not null,
 "JOB" VARCHAR2(9),
 "MGR" NUMBER(4,0),
 "HIREDATE" DATE,
 "SAL" NUMBER(7,2) ,
 "COMM" NUMBER(7,2),
 "DEPTNO" NUMBER(2,0)
  );

 Table created.
 SQL> column CONSTRAINT_NAME format a20
 SQL> column SEARCH_CONDITION format a50
 SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C';
 SQL> alter table emp modify ("HIREDATE" Constraint H_NOTNULL  Not    Null);
 
Table altered.
 SQL> SELECT Constraint_name, Search_condition
      FROM User_constraints
      WHERE Table_name = 'EMP'  AND
      Constraint_type = 'C';

So löschen Sie die Not Null-Einschränkung

Wir müssen die Spalte ändern, um Nullwerte zu akzeptieren

SQL>alter table emp modify "HIREDATE" Null;

Table altered.

SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C';

Wir können die Not-Null-Einschränkung auch mit dem Befehl alter table drop constraint löschen

SQL> alter table emp drop constraint  EMP_NOTNULL ;
Table altered;

SQL> SELECT Constraint_name, Search_condition
     FROM User_constraints
     WHERE Table_name = 'EMP'  AND
     Constraint_type = 'C';

So fügen Sie eine Nicht-Null-Einschränkung für die Spalte hinzu, die Nullwerte enthält

Wenn Sie versuchen, eine Nicht-Null-Einschränkung für die Spalte hinzuzufügen, die Nullwerte enthält, schlägt dieser Befehl fehl, da alle Zeilen und alle vorhandenen Zeilen auf Nicht-Null-Einschränkung validiert werden. Manchmal möchten wir die vorhandenen Nullwerte beibehalten und für zukünftige Zeilen prüfen, ob sie einen Nicht-Nullwert für diese Spalte enthalten. In diesem Fall können wir die Einschränkung mit der novalidate-Klausel aktivieren. Mit dieser Klausel werden die vorhandenen Zeilen nicht überprüft, aber zukünftige Zeilen werden überprüft

alter table emp modify "HIREDATE" not Null novalidate;

Auch lesen
Oracle Primärschlüssel löschen
Fremdschlüssel in Oracle
Unique Key Constraint in Oracle
wie man alle Constraints für eine Tabelle in Oracle überprüft
Oracle Alter Table Modify Column Type
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554