gpt4 book ai didi

MySQL 触发器自动更新(或插入)列字段

转载 作者:行者123 更新时间:2023-11-29 23:48:44 24 4
gpt4 key购买 nike

我有一个可以运行的 SQL 查询,如下所示:

SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 1), ' ', -1) AS first_name,
If( length(name) - length(replace(name, ' ', ''))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 2), ' ', -1) ,NULL)
as middle_name,
SUBSTRING_INDEX(SUBSTRING_INDEX(name, ' ', 3), ' ', -1) AS last_name
FROM people

虽然这对于将完整的name拆分为first_namemiddle_namelast_name非常有效,但我需要一种方法来自动完成此操作;无法进入并运行查询并在每次添加 person 时手动更新表。

我尝试以触发器的形式处理此查询,但不断收到错误,通常错误状态为“不允许从触发器返回结果集”

任何帮助让这项工作正常进行都会很棒

最佳答案

在 BEFORE INSERT 触发器中,使用限定符 NEW. 来引用分配给要插入的行的列的值。例如,NEW.col 将引用为 col 列提供的值。

NEW.col 分配一个值(或表达式)以替换为列 col 提供的值,并且分配的值将被插入。

完成类似于 SELECT 语句的触发器将如下所示:

DELIMITER $$

CREATE TRIGGER mytrigger
BEFORE INSERT ON mytable
FOR EACH ROW
BEGIN

SET NEW.first_name = SUBSTRING_INDEX(SUBSTRING_INDEX( NEW.name, ' ', 1), ' ', -1);

SET NEW.last_name = SUBSTRING_INDEX(SUBSTRING_INDEX( NEW.name, ' ', 3), ' ', -1);

SET NEW.middle_name = IF(LENGTH( NEW.name) - LENGTH(REPLACE( NEW.name, ' ', ''))>1
,SUBSTRING_INDEX(SUBSTRING_INDEX( NEW.name, ' ', 2), ' ', -1)
,NULL);

END$$

DELIMITER ;
<小时/>

您收到的错误:

Error: 1415 SQLSTATE: 0A000 (ER_SP_NO_RETSET)
Message: Not allowed to return a result set from a %s

这是由于适用于 FUNCTIONTRIGGER 的记录限制所致。 (此限制也适用于从 FUNCTION 或 TRIGGER 上下文中调用PROCEDURE。)

关于MySQL 触发器自动更新(或插入)列字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25776371/

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