我想向一个已存在且填有值的表中添加一个新列。新列将会是NOT NULL
,因此对于每一行已存在的行,它都需要一个值。
我希望在列创建时基于表中其他值来计算初始值,而且仅限于列创建时。
我有一个非常具体的用例,因此我不寻求解决方案。以下是我所需的简化示例:
假设我有以下数据:
CREATE TABLE numbers (
value1 INTEGER NOT NULL,
value2 INTEGER NOT NULL
);
INSERT INTO numbers(value1, value2) VALUES (10, 20), (2, 5);
我希望在“numbers”表上创建一个新的列
value3
,该列在创建时始终等于其对应的value1
和value2
列之和。
E.g.:
ALTER TABLE numbers ADD COLUMN value3 INTEGER;
/* ... some more logic which calculates the initial values ... */
ALTER TABLE numbers
ALTER COLUMN value3 SET NOT NULL;
完成后,我想要以下数据:
-- The 3rd value will be the sum of the first 2 values
SELECT * FROM numbers;
value1 | value2 | value3
-------+--------+-------
10 | 20 | 30
2 | 5 | 7
我之后需要更新数据,可能会破坏关系 value3 === (value1 + value2)
:
UPDATE numbers SET value3=9823 WHERE value1=10;
我该如何实现将计算出的初始值插入到
value3
列的步骤?
value3
列只在创建列时进行初始计算。我认为这将在插入或更新时继续计算value3
? - Gershom MaesBEFORE
插入或更新,而不是AFTER
。 - stempler