2023-10-11 10:00:11

将列更改为空

我想改变一个表列为空。我用过:

ALTER TABLE Merchant_Pending_Functions Modify NumberOfLocations NULL

这将在修改处给出一个错误。正确的语法是什么?


当前回答

在PostgresQL中是:

ALTER TABLE tableName ALTER COLUMN columnName DROP NOT NULL;

其他回答

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT null;

这对你很有用。

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

ALTER TABLE Merchant_Pending_Functions MODIFY COLUMN `NumberOfLocations` INT;

正如其他人所观察到的,该命令的精确语法在不同类型的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>

对于HSQLDB:

ALTER TABLE tableName ALTER COLUMN columnName SET NULL;

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

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

ALTER TABLE Merchant_Pending_Functions ALTER COLUMN NumberOfLocations INT NULL

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