2012-12-02 10 views
25
CREATE TABLE Person(
    PersonId NUM(20), 
    ... 
    ) 

ALTER TABLE Person 
ADD(CONSTRAINT personpk PRIMARY KEY(PersonId)) 

शीर्षक के रूप में, क्या मुझे PersonId के लिए "शून्य नहीं" निर्दिष्ट करने की आवश्यकता है? या अगर मैं इसे प्राथमिक कुंजी पर सेट करता हूं, तो यह डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से शून्य नहीं होता है?क्या हमें प्राथमिक कुंजी के लिए "शून्य नहीं" निर्दिष्ट करने की आवश्यकता है? ओरेकल/एसक्यूएल

e.g: 
CREATE TABLE Person(
PersonId NUM(20) NOT NULL, 
... 
+0

आप आसानी से इस परीक्षण कर सकते हैं स्वयं। आप दस्तावेज भी पढ़ सकते हैं! –

+0

प्राथमिक कुंजी को शून्य नहीं होने की आवश्यकता है। लगभग 10 वर्षों में इसका इस्तेमाल नहीं किया है, लेकिन मेरा मानना ​​है कि ओरेकल को स्पष्ट घोषणा की आवश्यकता है, क्योंकि अधिकांश अन्य आरडीबीएमएस –

उत्तर

26
create table mytable (
    col1 number primary key, 
    col2 number, 
    col3 number not null 
); 

table MYTABLE created. 

select table_name, column_name, nullable 
from user_tab_cols where table_name = 'MYTABLE'; 

TABLE_NAME      COLUMN_NAME     NULLABLE 
------------------------------ ------------------------------ -------- 
MYTABLE      COL1       N   
MYTABLE      COL2       Y   
MYTABLE      COL3       N   

तो, नहीं, आपको प्राथमिक कुंजी कॉलम को न्यूल के रूप में निर्दिष्ट करने की आवश्यकता नहीं है।

+0

अच्छा प्रदर्शन करते हैं - धन्यवाद। –

+0

यह सिर्फ दिखाता है कि इस विशेष आरडीबीएमएस को इसकी आवश्यकता नहीं है, यह पता चला है कि कुछ अन्य (डीबी 2 और ओरेकल) उपरोक्त 'col1' के लिए एक त्रुटि करते हैं और त्रुटि देते हैं। –

+0

ओरेकल को तालिका घोषणा में शून्य के रूप में निर्दिष्ट प्राथमिक कुंजी की आवश्यकता नहीं है, जैसा कि मैंने प्रदर्शित किया था। मैंने माना कि ओरेकल प्रश्न में आरडीबीएमएस था, क्योंकि ओपी ने प्रश्नों को टैग किया था। – eaolson

2

सबसे डीबीएमएस में, के बाद से अपने एक प्राथमिक कुंजी (और की परिभाषा है कि यह तालिका के भीतर अद्वितीय होना चाहिए) तो यह सबसे निश्चित रूप से खाली नहीं रह सकती।

2

परिभाषा द्वारा प्राथमिक कुंजी कभी शून्य नहीं हो सकती है। प्राथमिक कुंजी उद्देश्य विशिष्ट रूप से रिकॉर्ड की पहचान करना है। प्राथमिक कुंजी कॉलम का संयोजन है जो विशिष्ट रूप से एक पंक्ति निर्दिष्ट करती है।

एक शून्य मान मूल्य की कमी का प्रतिनिधित्व करता है। भले ही दो रिकॉर्ड एक ही कॉलम में न्यूल हैं, कॉलम मान बराबर नहीं माना जाता है।

6

हाँ, के रूप में @eaolson कहा, तुम प्राथमिक कुंजी कॉलम के लिए नहीं NULL निर्दिष्ट करने की आवश्यकता नहीं है, तो वे अपने आप नहीं NULL की तैयारी में हैं।

create table mytable (
    col1 number, 
    col2 number not null 
); 

select table_name, column_name, nullable 
    from user_tab_columns where table_name = 'MYTABLE'; 

TABLE_NAME COLUMN_NAME NULLABLE 
------------ ------------ --------- 
MYTABLE  COL1   Y 
MYTABLE  COL2   N 

जैसी उम्मीद थी, col1 नल और col2 नहीं NULL है:

हालांकि, ओरेकल ट्रैक है कि आप इस मामले में स्पष्ट रूप से नहीं NULL निर्दिष्ट नहीं किया है प्राथमिक कुंजी अक्षम है या बाद में गिरा दिया रहता है। एक प्राथमिक कुंजी दोनों स्तंभ में परिवर्तन के लिए नहीं NULL:

alter table mytable add primary key (col1, col2); 

select table_name, column_name, nullable 
    from user_tab_columns where table_name = 'MYTABLE'; 

TABLE_NAME COLUMN_NAME NULLABLE 
------------ ------------ --------- 
MYTABLE  COL1   N 
MYTABLE  COL2   N 

आप को अक्षम या प्राथमिक कुंजी ड्रॉप, दोनों स्तंभ मूल स्थिति में लौट जाते हैं, CO1 फिर से नल हो जाता है:

alter table mytable disable primary key; 

select table_name, column_name, nullable 
    from user_tab_columns where table_name = 'MYTABLE'; 

TABLE_NAME COLUMN_NAME NULLABLE 
------------ ------------ --------- 
MYTABLE  COL1   Y 
MYTABLE  COL2   N 
संबंधित मुद्दे

 संबंधित मुद्दे