如何更新一个表的两列,其中第二列将使用第一列的值进行更新?

时间:2017-07-11 15:25:45

标签: mysql sql

如果我在桌面电话中有两列电话ID,电话和地址,其中电话ID为id-column。现在我要求用当前时间更新电话列(取当前时间的4位数)+添加现有的电话值;如果电话列更改,则地址值也会更改,因为地址的4位数字是电话。这该怎么做 ??

Phoneid  Phone  Address
1        123    123newdelhi10091

更新后

Phoneid  Phone              Address
1        (123+4467)4590    4590newdelhi110091

1 个答案:

答案 0 :(得分:0)

通常,这种类型的行为将被视为业务逻辑,因此可以在连接到DB的任何程序中完成。如果这不是一个选项,有几种方法可以解决。

首先,您可以创建一个触发器,当另一个值发生变化时,它基本上会自动更改一个值:

DELIMITER //
CREATE TRIGGER phone_update BEFORE UPDATE ON phone
FOR EACH ROW
   BEGIN
       SET NEW.Address = CONCAT(NEW.Phone, SUBSTRING(OLD.Address, LENGTH(Old.Phone);
   END;//

触发器通常是反直觉的,难以调试。此外,未来的开发人员可能不会期待触发器。如果我能帮忙,我通常不会成为粉丝。

你的另一个是使用视图:

CREATE VIEW phone_address_view AS (
    SELECT phoneid, phone, CONCAT(phone, address) as `address` FROM phone
);

视图的好处是您将始终拥有一致的数据。您可以在数据库中插入实际地址,然后在查询时收到修改后的信息。

另一方面,您现在从一个不同于INSERTing和UPDATEing的地方进行SELECTing。视图的声誉也比原始表慢。