【问题标题】:MariaDB move data to another table with TRIGGERMariaDB 使用 TRIGGER 将数据移动到另一个表
【发布时间】:2021-04-13 04:37:05
【问题描述】:

当更新值为“jakarta”时,我想将当前数据移动到另一个表



IF NEW.alamat = "jakarta" THEN
    INSERT INTO detail_mhs_copy1
    SELECT * FROM detail_mhs WHERE id_mhs = NEW.id_mhs;
    
    DELETE FROM detail_mhs WHERE id_mhs = OLD.id_mhs;
END IF;

但是有了这个触发器,它的 make 错误就像这样
1442 - 无法更新存储函数/触发器中的表“detail_mhs”,因为它已被调用此存储函数/触发器的语句使用

有什么解决办法吗?

【问题讨论】:

  • 触发器格式无法解决。您可以将行复制到“另一个表”并将当前记录标记为必须删除的记录(通过在某些列中设置一些特殊值)。删除本身必须由事件过程执行。
  • 另外,您可以禁止直接数据访问并仅使用存储过程。这允许在 SP 中实现任何复杂的逻辑。
  • 另一个问题是我无权更改操作更新
  • 如果是这样,那么触发器+事件似乎是唯一的选择。
  • 您到底需要做什么?也许有两件事:(1)将旧行复制到另一个表和(2)允许更新当前表。或者您是否希望不更改当前行?或者也许删除当前行?

标签: mysql mariadb


【解决方案1】:

请尝试下面的触发器并使用您的列名更改 col1 和 col2,并使用具有主键且未更新的列名更改主键。

分隔符 $$

创建触发器 detail_mhs_trig 更新 detail_mhs 每行之后 开始 如果 NEW.alamat = "jakarta" 那么 插入到 detail_mhs_copy1(col1,col2,alamat) 值(old.col1,old.col2,new.alamat); 万一;结束$$

分隔符;

【讨论】:

  • 我认为它没有解决我在 detail_mhs 中删除当前行的问题
  • 您无法在单个触发器中实现这一点,这意味着触发器无法更改同一张表。请查看以下链接并找到解决方案stackoverflow.com/questions/22342853/…
猜你喜欢
  • 2012-04-07
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 2021-04-20
  • 2017-05-20
相关资源
最近更新 更多