gpt4 book ai didi

mysql - 如何使用触发器更新表

转载 作者:行者123 更新时间:2023-11-29 23:21:35 27 4
gpt4 key购买 nike

我是新手,需要一些帮助。我有一个名为“abc”的表,其中包含以下条目

+------+--------+------+
| Id | Name | City |
+------+--------+------+
| 101 | john | abc |
| 102 | Miller | cbz |
+------+--------+------+

和另一个表“xyz”

+------+--------+------+
| Id | Name | City |
+------+--------+------+
| 102 | Miller | cbz |
+------+--------+------+

我在表“abc”上应用了触发器,它将使用最近插入的值更新表“xyz”,并将删除所有以前的条目...例如,当我在“abc”表上触发插入查询时,我得到“abc”,如下所示

  insert into abc Values(103,'Joseph','xyz');

我得到表“abc”的输出,

 +------+--------+------+
| Id | Name | City |
+------+--------+------+
| 101 | john | abc |
| 102 | Miller | cbz |
| 103 | Joseph | xyz |
+------+--------+------+

表“xyz”为,

  +------+--------+------+
| Id | Name | City |
+------+--------+------+
| 103 | Joseph | xyz |
+------+--------+------+

现在我的问题是如何仅使用一张表来实现这一目标(我不想使用两个表,因为这不是我的要求)。就像下面的..

    insert into xyz values(104,'Ridhit','pqr');

+------+--------+------+
| Id | Name | City |
+------+--------+------+
| 104 | Ridhit | pqr |
+------+--------+------+

请帮忙。我使用的触发器是

  DELIMITER !!
create trigger OnlyOne BEFORE INSERT on abc
for each row
BEGIN
DECLARE a1 INT;
Select count(1) INTO a1 from xyz;
IF a1>0 THEN
delete from xyz limit 1;
insert into xyz(Id,Name,City) values (new.Id,new.Name,new.City);
ELSE
insert into xyz(Id,Name,City) values (new.Id,new.Name,new.City);
END IF;
END;
!!
DELIMITER ;

最佳答案

在应用程序级别执行此操作,但您最好确保使用 transactions 。当操作在中间崩溃时,您可能不希望有一个空表。

您也可以考虑采用以下方法。

不要在插入时删除/更新,而是向表中添加一个使用当前时间戳默认值创建的列,使其看起来像这样:

CREATE TABLE abc(
id int auto_increment primary key,
name varchar(50),
city varchar(50),
created timestamp default current_timestamp
);

要获取最新条目,您只需这样做

SELECT * FROM abc ORDER BY created DESC LIMIT 1;

或者你把它放在 View 中

CREATE VIEW just_latest_entry_from_abc AS
SELECT * FROM abc ORDER BY created DESC LIMIT 1;

那你就这么做

SELECT * FROM just_latest_entry_from_abc;

当表大小很重要时,创建一个 cronjob 或 scheduled event定期删除旧条目。

关于mysql - 如何使用触发器更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27244560/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com