如果我在桌面电话中有两列电话ID,电话和地址,其中电话ID为id-column。现在我要求用当前时间更新电话列(取当前时间的4位数)+添加现有的电话值;如果电话列更改,则地址值也会更改,因为地址的4位数字是电话。这该怎么做 ??
Phoneid Phone Address
1 123 123newdelhi10091
更新后
Phoneid Phone Address
1 (123+4467)4590 4590newdelhi110091
答案 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。视图的声誉也比原始表慢。