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

时间:2014-08-21 07:08:14

标签: mysql

我是mysql数据库的新手,我的查询是我写了一个触发器 如下所述

我想要的是每当我使用followersId和followId将一行插入到关注者表中时,我希望将相同的ID分别插入到通知表userId和NotifiersId中,但是在搜索很多之后我能找到的只是LAST_INSERT_ID这在我的情况下不适用,因为我的主键是非增量的。

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

我的触发器定义

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 

1 个答案:

答案 0 :(得分:0)

我确实为我的查询找到了解决方案。使用触发器并不是更好,因为在处理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 $$