有一種情況是我們創建了一個表。將數據填入數據後,我們更改了表格並創建了一個新列,名稱爲「CITY」。在創建該列使其成爲NOT NULL之後,我們沒有在其中填充任何數據。那麼在這種情況下,CITY列中的行的值是什麼?使用alter和NOT NULL約束創建的列
回答
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約束的新列。表格必須是空的。
很好的答案! (如果使用MySQL而不是Oracle,太糟糕了......) – jarlh
@jarlh我也沒有看到OP標記的mysql。讓我們等待OP確認。 –
謝謝你們的幫助。現在我明白了:) –
- 1. MySQL 5.7.18:外鍵約束和ALTER TABLE CHANGE COLUMN從NULL到NOT NULL
- 2. 在MySQL的創建多列約束,而不是ALTER
- 3. ALTER TABLE CHECK約束
- 4. 將NOT NULL約束添加到列
- 5. Oracle_CX ALTER TABLE刪除約束
- 6. Cassandra:創建表時不能使用'NOT NULL'約束
- 7. Oracle null約束
- 8. Django Rest框架嵌套序列化器創建NOT NULL約束
- 9. 根據另一列的值在多列上創建約束
- 10. 如何創建即使列爲NULL也可以工作的UNIQUE約束條件
- 11. 唯一約束在NON-NULL列上的唯一約束
- 12. SQL使用約束創建表
- 13. 創建表時重新使用約束
- 14. 使用@EmbeddedId和@MapsId原因NULL插入(違反NOT NULL約束)
- 15. 創建約束更改表無效
- 16. 在django中創建用戶(NOT NULL約束失敗:auth_user.last_login)
- 17. 爲2列創建唯一約束
- 18. (Oracle)在創建表後添加約束
- 19. 避免列約束NULL數據
- 20. Neo4JClient創建唯一約束
- 21. 創建唯一約束最初禁用
- 22. DynamoDB中的NOT NULL約束
- 23. SQL:創建多個外鍵和約束
- 24. MySQL - Hibernate不會創建外鍵約束
- 25. ALTER TABLE語句與CHECK約束衝突
- 26. ipage alter table添加外鍵約束
- 27. 爲alter table添加約束出錯
- 28. Sequelize外鍵約束/創建
- 29. 如何使用HBM映射創建雙列唯一鍵約束?
- 30. 無法在MySQL表中創建約束
MySQL或Oracle?當你嘗試時發生了什麼? – Mat
MySQL或Oracle?如果列中有NULL,則不應將其設置爲NOT NULL。 (或者同時指定一個默認值。) – jarlh
還是MSSQL?如果MSSQL - 您無法在現有表上添加NOT NULL列而沒有定義DEFAULT()值。如果定義了DEFAULT,那麼對於所有舊行,它將具有默認值。 – MadOX