将列更改为可为空

时间:2010-08-24 13:26:41

标签: sql

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

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL

这会在Modify处出错。什么是正确的语法?

11 个答案:

答案 0 :(得分:425)

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

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL

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

答案 1 :(得分:41)

对于Oracle数据库10g用户:

alter table mytable modify(mycolumn null);

当你尝试使用

时,你会得到“ORA-01735:无效的ALTER TABLE选项”
ALTER TABLE mytable ALTER COLUMN mycolumn DROP NOT NULL;

答案 2 :(得分:37)

如果这是MySQL语法,那么类型就会丢失,正如其他一些响应所指出的那样。 正确的MySQL语法应该是:

ALTER TABLE Merchant_Pending_Functions MODIFY NumberOfLocations INT NULL

在此处发布以明确MySQL用户。

答案 3 :(得分:20)

在PostgresQL中它是:

ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;

答案 4 :(得分:5)

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

答案 5 :(得分: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>

答案 6 :(得分:0)

对于HSQLDB:

ALTER TABLE tableName ALTER COLUMN columnName SET NULL;

答案 7 :(得分:0)

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT null;

这将为您工作。

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

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT;

答案 8 :(得分:0)

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

ALTER TABLE Merchant_Pending_Functions 
Modify NumberOfLocations NULL;

答案 9 :(得分:0)

SQLite

ALTER TABLE 命令有点特殊。无法修改列。您必须创建一个新列,迁移数据,然后删除该列:

-- 1. First rename
ALTER TABLE
    Merchant_Pending_Functions
RENAME COLUMN
    NumberOfLocations
TO
   NumberOfLocations_old

-- 2. Create new column
ALTER TABLE
    Merchant_Pending_Functions
ADD COLUMN
    NumberOfLocations INT NULL

-- 3. Migrate data - you need to write code for that
-- 4. Drop the old column
ALTER TABLE
    Merchant_Pending_Functions
DROP COLUMN
    NumberOfLocations_old

答案 10 :(得分:-1)

在Oracle中

  

ALTER TABLE Merchant_Pending_Functions MODIFY(SQL_SCRIPT NOT NULL);