Vad är Not Null-begränsning i Oracle
Not Null-begränsningar i Oracle används för att framtvinga inte null-värden i kolumnen i tabellen. Så om du försöker infoga null i den kolumnen kommer det att skapa ett fel.
Hur man skapar en non null-begränsning
Inte null-begränsningar definieras när tabellen skapas eller så kan du ändra tabellen senare så att en kolumn ändras till Inte null. Låt oss ta en titt på exemplen.
Skapa tabell
Inte noll-begränsning anges i linje med kolumnen.
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.
Här har vi definierat två icke-null-begränsningar på tabellen emp. Vi kan kontrollera Not null-begränsningarna i tabellen med hjälp av nedanstående fråga
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';
Not Null-begränsningar definieras också som kontrollbegränsningar och har sökvillkor som kolumnnamn inte null
Lägger till Not-begränsning efter att tabellen har skapats
Vi kan modifiera tabellen för att lägga till begränsningen inte null
SQL> alter table emp modify ("HIREDATE" not null); Table altered.
Om vi har nolldata i kolumnen kommer detta uttalande att misslyckas
SQL> SELECT Constraint_name, Search_condition FROM User_constraints WHERE Table_name = 'EMP' AND Constraint_type = 'C'
Vi kan också ge det anpassade namnet till Not Null-begränsningen. Här är exemplet för att visa det
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';
Hur man släpper begränsningen Not Null
Vi måste ändra kolumnen för att acceptera nollvärden
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';
Vi kan även släppa noll-begränsningen med kommandot alter table drop constraint
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';
Hur man lägger till non null-begränsning i kolumnen som innehåller nollvärden
Om du försöker lägga till en icke-null-begränsning i kolumnen som innehåller null-värden, kommer det kommandot att misslyckas eftersom det kommer att validera alla rader och alla befintliga rader för icke-null-begränsning. Ibland vill vi behålla de befintliga null-värdena och kontrollera för framtida rader att de innehåller ett icke-null-värde för denna kolumn, då kan vi i så fall aktivera restriktionen med novalidate-satsen. Med denna klausul kommer den inte att kontrollera de befintliga raderna, men framtida rader kommer att kontrolleras
alter table emp modify "HIREDATE" not Null novalidate;
Läs även
släpp primärnyckel oracle
Främmande nyckel i oracle
Unik nyckelbegränsning i Oracle
hur man kontrollerar alla begränsningar på en tabell i oracle
oracle ändra tabell ändra kolumntyp
https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554