Mysql 从非自动增量主键的触发器中的表中获取上次输入的插入值
我对mysql数据库非常陌生,我的疑问是我已经编写了一个触发器 如下所述 我想要的是,每当我用followerId和followerId向followers表中插入一行时,我希望这些相同的Id分别插入到通知表userId和notifierId中,但在搜索了很多之后,我能找到的只是最后一个插入Id,这在我的情况下不适用,因为我的主键是非增量的 是否有任何方法可以获取followersTable中上次输入或上次更新的元组的followersId和FollowerId的值 我的触发器定义 表说明 通知表说明Mysql 从非自动增量主键的触发器中的表中获取上次输入的插入值,mysql,Mysql,我对mysql数据库非常陌生,我的疑问是我已经编写了一个触发器 如下所述 我想要的是,每当我用followerId和followerId向followers表中插入一行时,我希望这些相同的Id分别插入到通知表userId和notifierId中,但在搜索了很多之后,我能找到的只是最后一个插入Id,这在我的情况下不适用,因为我的主键是非增量的 是否有任何方法可以获取followersTable中上次输入或上次更新的元组的followersId和FollowerId的值 我的触发器定义 表说明 通知
我确实找到了解决问题的办法。使用触发器并不更好,因为在处理两个表时,一个条目可能会进入一个表,而另一个条目可能不会进入。所以最好的方法是将事务与存储过程一起使用 解决方案
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
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 $$