2015-05-22 53 views
-2

有一種情況是我們創建了一個表。將數據填入數據後,我們更改了表格並創建了一個新列,名稱爲「CITY」。在創建該列使其成爲NOT NULL之後,我們沒有在其中填充任何數據。那麼在這種情況下,CITY列中的行的值是什麼?使用alter和NOT NULL約束創建的列

+0

MySQL或Oracle?當你嘗試時發生了什麼? – Mat

+0

MySQL或Oracle?如果列中有NULL,則不應將其設置爲NOT NULL。 (或者同時指定一個默認值。) – jarlh

+0

還是MSSQL?如果MSSQL - 您無法在現有表上添加NOT NULL列而沒有定義DEFAULT()值。如果定義了DEFAULT,那麼對於所有舊行,它將具有默認值。 – MadOX

回答

1

There is a scenario where we have created a table. After populating data into it, we altered the table and created a new column say, 'CITY'. After creating this column making it as NOT NULL, we did not populated any data in it. So what will be the values of row in this case in CITY column?

不,你不能。

如果直接嘗試與NOT NULL約束現有的具有錶行添加新列,你只會看到以下錯誤:

ORA-01758: table must be empty to add mandatory (NOT NULL) column 

例如,

SQL> CREATE TABLE t AS SELECT LEVEL a FROM dual CONNECT BY LEVEL <=10; 

Table created. 

SQL> 
SQL> ALTER TABLE t ADD (b NUMBER NOT NULL); 
ALTER TABLE t ADD (b NUMBER NOT NULL) 
      * 
ERROR at line 1: 
ORA-01758: table must be empty to add mandatory (NOT NULL) column 


SQL> 

如果您嘗試ALTER表和MODIFY添加NOT NULL約束,那麼您將收到以下錯誤:

例如,

SQL> DROP TABLE t PURGE; 

Table dropped. 

SQL> 
SQL> CREATE TABLE t AS SELECT LEVEL a FROM dual CONNECT BY LEVEL <=10; 

Table created. 

SQL> 
SQL> ALTER TABLE t ADD (b NUMBER); 

Table altered. 

SQL> 
SQL> ALTER TABLE t 
    2 MODIFY (b NUMBER CONSTRAINT b_c NOT NULL); 
MODIFY (b NUMBER CONSTRAINT b_c NOT NULL) 
          * 
ERROR at line 2: 
ORA-02296: cannot enable (LALIT.B_C) - null values found 

那麼,有沒有辦法可以,你可以在現有的具有錶行創建NOT NULL約束的新列。表格必須是空的。

+0

很好的答案! (如果使用MySQL而不是Oracle,太糟糕了......) – jarlh

+0

@jarlh我也沒有看到OP標記的mysql。讓我們等待OP確認。 –

+0

謝謝你們的幫助。現在我明白了:) –