如果我有一个这样的表:
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;