gpt4 book ai didi

MySql 插入触发器输出 NULL

转载 作者:行者123 更新时间:2023-11-30 22:09:29 25 4
gpt4 key购买 nike

我想有一个插入触发器来实现增量插入。我有一列“row_hash”来记录每一行的 MD5(这里我使用 namecategory 列的 MD5)。如果新记录具有相同的哈希值,则触发器应跳过插入,否则允许插入。

DROP TRIGGER IF EXISTS test_trigger;
DELIMITER $$
CREATE TRIGGER test_trigger BEFORE INSERT ON test_table FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM test_table WHERE row_hash = MD5(CONCAT_WS('', new.name, new.category))) < 1 THEN
INSERT INTO test_table(_id, name, category, row_hash) VALUES (new._id, new.name, new.category, MD5(CONCAT_WS('', new.name, new.category)));
END IF;
END$$

这是测试表:

create table test_table(_id varchar(10) primary key, name varchar(10), category varchar(2), row_hash char(32));

当我插入一条记录时,它在 row_hash 列上输出 NULL。

insert into test_table(_id, name, category) values('12344', 'dafas', 'A');

'12344','dafas','A',NULL

你能告诉我我在触发器上哪里做错了吗?

最佳答案

如果要修改插入的行,则不需要对同一个表使用INSERT。只需 SET NEW.row_hash 值。

如果你想中止插入,你必须使用 SIGNAL .

但总的来说,您正在做的事情似乎根本不需要在触发器中有条件插入。只是对名称、类别的 UNIQUE 约束。在触发器中,只需确保 row_hash 设置正确,如果存在重复,约束将负责中止。

编辑:按照您的建议,将唯一键更改为仅使用 row_hash 列。

ALTER TABLE test_table ADD UNIQUE KEY (row_hash);

CREATE TRIGGER test_trigger BEFORE INSERT ON test_table
FOR EACH ROW SET NEW.row_hash = MD5(CONCAT_WS('', name, category));

关于MySql 插入触发器输出 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570990/

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