将列更改为可为空


318

我想将表列更改为可为空。我用过了:

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL

这会导致错误Modify。正确的语法是什么?


7
请在以后发布错误消息
2010年

1
我已经删除了SQL Server标记,因为它看起来已成为所有人的免费通用标记。
马丁·史密斯

Answers:


514

假设SQL Server(基于您之前的问题):

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL

INT用您的实际数据类型替换。


43

对于Oracle数据库10g用户:

alter table mytable modify(mycolumn null);

否则,您会收到“ ORA-01735:无效的ALTER TABLE选项”

ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL;

太酷了,您不必指定数据类型,只需将其设置为“ null”即可将其设置为可为空。
·霍尔斯默

41

如果这是MySQL语法,则其他一些响应指出,该类型将丢失。正确的MySQL语法为:

ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL

在此处发布内容是为了使MySQL用户更加清晰。


29

在PostgresQL中,它是:

ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;

5

尽管我不知道您使用的是什么RDBMS,但您可能需要给出整个列的说明,而不仅仅是说您现在希望它可以为空。例如,如果当前为INT NOT NULL,则应发出ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations INT


这是一个正确的描述性答案,因此只需澄清一下Null| NOT NULL未指定,则该列将为空。
Hamid Heydarian '17

4

正如其他人所观察到的,该命令的精确语法在不同类型的DBMS中有所不同。您使用的语法在Oracle中有效:

SQL> desc MACAddresses
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COMPUTER                                           NUMBER
 MACADDRESS                                         VARCHAR2(12)
 CORRECTED_MACADDRESS                      NOT NULL VARCHAR2(17)

SQL> alter table MACAddresses
  2       modify corrected_MACAddress null
  3  /

Table altered.

SQL> desc MACAddresses
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COMPUTER                                           NUMBER
 MACADDRESS                                         VARCHAR2(12)
 CORRECTED_MACADDRESS                               VARCHAR2(17)

SQL>

0

对于HSQLDB:

ALTER TABLE tableName ALTER COLUMN columnName SET NULL;

0
ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT null;

这将为您工作。

如果要更改一个非空列以允许为空,则无需包含非空子句。因为默认列不为空。

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT;

0

这取决于您使用的是哪种SQL引擎,在Sybase中,您的命令可以正常工作:

ALTER TABLE Merchant_Pending_Functions 
Modify NumberOfLocations NULL;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.