gpt4 book ai didi

mysql - 插入后在mysql中触发

转载 作者:行者123 更新时间:2023-11-29 15:36:49 26 4
gpt4 key购买 nike

我是编程新手,在触发器方面需要一些帮助。我想在“Affiliate_Detail”表中输入数据时创建一个触发器,以更新同一表中的另一列,该列是字符“AF”和字段affiliateNumber 的串联。 affiliateNumber 是一个自动递增的主列。

CREATE TRIGGER updateAffiliateId 
AFTER INSERT
ON Affiliate_Detail
AS
BEGIN
UPDATE Affiliate_Detail
SET affiliateId = CONCAT("AF", new.affiliateNumber);
END

最佳答案

SolarFlare 指出,下面的插入前建议在自动 inc 主键的情况下不起作用,因为插入前的值未知,并且您无法在插入后更新同一个表。

因为您的要求相对简单,您只需连接一个字符串和一个数字,我建议您为此使用生成的列

ALTER TABLE x
ADD COLUMN affiliateID VARCHAR(100)
GENERATED ALWAYS AS (CONCAT('AF',new.affiliateNumber));

更多信息:

http://www.mysqltutorial.org/mysql-generated-columns/

<小时/>

或者甚至,不要将其烘焙到数据库中 - 通过启动事务、插入记录然后使用last_insert_id更新来在前端执行此操作

<小时/>

对于非自动列的情况:

报价the fine manual :

In a BEFORE trigger, you can also change its value with SET NEW. col_name = value if you have the UPDATE privilege for it. This means you can use a trigger to modify the values to be inserted into a new row or used to update a row.

将触发器更改为 BEFORE INSERT(并且您可能还必须将其设置为 FOR EACH ROW)并直接写入新值:

CREATE TRIGGER ... BEFORE INSERT ...
FOR EACH ROW
BEGIN
SET NEW.affiliateId=CONCAT('AF',new.affiliateNumber);
END

这不是更新语句中的集合。这与在典型编程语言中设置变量一样进行设置,例如 JavaScript var x = "AF"+ y;

我在顶部链接的文档有大量示例

旁注,标准 SQL 使用撇号/单引号来表示字符串,使用语音标记/双引号来表示标识符。虽然 MySQL 允许双引号来表示字符串,但对于数据库工作,保持标准通常是件好事,这样当您开始使用另一个数据库时,就会有更少的麻烦

关于mysql - 插入后在mysql中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58161804/

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