如何使用插入触发器后更新表字段?

Posted

技术标签:

【中文标题】如何使用插入触发器后更新表字段?【英文标题】:How to update a table field using after insert trigger? 【发布时间】:2021-07-27 15:19:05 【问题描述】:

我想用 MD5() 更新插入的行字段名称为“hash_code”。

DELIMITER
    //
CREATE TRIGGER `make_hash2` AFTER  INSERT ON
    `newtable` FOR EACH ROW
BEGIN
    DECLARE
        _id INTEGER ;
    SELECT
        id
    INTO _id
FROM
    `newtable`
ORDER BY `id`
DESC
LIMIT 1;

 

UPDATE
    `newtable`
SET
    `hash_code` = MD5(_id)
WHERE
    id = _id ;
END

我尝试使用以下代码,但在插入时抛出以下错误。

#1442 - 无法更新存储函数/触发器中的表“newtable”,因为它已被调用此存储函数/触发器的语句使用

【问题讨论】:

我不认为你可以用触发器做所有事情。也许尝试使用存储过程。看看here 【参考方案1】:

如果您希望 hash_code 成为 id 的 md5() 哈希,您可以使用生成的列:

alter table newtable add column hash_code varchar(32) as
     (md5(id))

Here 是一个 dbfiddle。

【讨论】:

以上是关于如何使用插入触发器后更新表字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用触发器的 SQL 插入后更新另一个表

触发器导致在视图中使用的表上插入后,如何进行 MYSQL 视图更新

sql数据库中如何做到表与表之间字段的同步更新删除?

如何在 MS SQL 2008 中使用触发器更新单个表

完成表中的数据插入后如何触发触发器

如何使用触发器(MySQL)在插入时更改同一表的字段值