使用默认值添加列,但不修改值



如果我有一个这样的表:

CREATE TABLE customers (
id INT PRIMARY KEY,
address VARCHAR(255)
);
INSERT INTO customers(id,address)
VALUES (1,'Here'),(2,NULL);

我知道我可以添加一个额外的列,默认值如下:

ALTER TABLE customers
ADD more VARCHAR(255) DEFAULT 'etc';

在PostgreSQL, MariaDB, SQLite和Oracle中,当我这样做时,默认值被修改为所有列。但是我不希望这种情况发生,因为并不是所有的客户都有地址。

在Microsoft SQL中,只有在添加WITH VALUES子句时才会修改默认值。

如何让其他而不是修改默认值?

对于PostgreSQL,您可以分两步完成,首先添加新列,然后为列设置新的默认值:

CREATE TABLE customers (
id INT PRIMARY KEY,
address VARCHAR(255)
);
INSERT INTO customers(id,address)
VALUES (1,'Here'),(2,NULL);
-- step one:
ALTER TABLE customers
ADD more VARCHAR(255) ;
-- step two:
ALTER TABLE customers ALTER COLUMN more SET DEFAULT 'etc';
-- test:
SELECT * FROM customers;

最新更新