gpt4 book ai didi

mysql - 从非自动递增主键的触发器中的表中获取最后输入的值插入

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

我对 mysql 数据库很陌生,我的查询是我写了一个触发器如下所述

我想要的是,每当我使用 followersId 和 followingId 将一行插入到 followers 表中时,我希望将这些相同的 ID 分别插入到通知表 userId 和 NotifiersId 中,但是经过大量搜索后我能找到的只是 LAST_INSERT_ID,这是不适用的在我的例子中,因为我的主键是非增量的。

有什么方法可以获取 followersTable 中最后输入或最后更新的元组的 followersId 和 followingId 的值。

我的触发器定义

drop trigger if exists `followNotifyTrigger` ;

delimiter $$
CREATE trigger followNotifyTrigger


after insert on followers
for each row
Begin
declare newUserId int(11);
declare newNotifiersId int(11);

select new.followersId ,New.followingId
into newUserId , newNotifiersId
from followers
where followersId = LAST_INSERT_ID ;

insert into Notification(typeId,userId,notifiersId,time) values (1,newUserId,newNotifiersId,NOW());
END $$
DELIMITER ; //

关注者表说明

followersId int(11) NO  PRI     
followingId int(11) NO PRI
response bit(1) NO b'0'

通知表说明

notificationId  int(11) NO  PRI     auto_increment
typeId int(11) YES MUL
userId int(11) YES MUL
notifiersId int(11) YES
time datetime YES

最佳答案

我确实为我的查询找到了解决方案。最好不要使用触发器,因为在处理 2 个表时,一个条目可能进入一个表而其他条目可能不进入。所以最好的方法是使用带有存储过程的事务。

解决方案

USE `dbname`;
DROP PROCEDURE IF EXISTS `followNotifyUser`;



DELIMITER $$
USE `dbname` $$

CREATE PROCEDURE followNotifyUser(IN followersId int(11),
IN followingId int(11),
IN response bit,
OUT message varchar(255))
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN

DECLARE EXIT HANDLER FOR sqlexception
BEGIN
SET message = "mysql exception";
ROLLBACK ;

END;

DECLARE EXIT HANDLER FOR sqlwarning
BEGIN
SET message = "mysql warnnings";
ROLLBACK;
END;

START TRANSACTION;
INSERT INTO followers(followersId,followingId,response) VALUES (followersId,followingId,response);
INSERT INTO Notification(typeId,userId,notifiersId,time)VALUES(1,followersId,followingId,NOW());
COMMIT;
END $$

关于mysql - 从非自动递增主键的触发器中的表中获取最后输入的值插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25420239/

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