【发布时间】:2014-02-20 19:22:10
【问题描述】:
DELIMITER $$
CREATE TRIGGER `classdost`.`tr_xyz_media`
BEFORE INSERT ON classdost.xyz_media
FOR EACH ROW
BEGIN
DECLARE t_id INT(20);
IF NEW.id < 5000000 THEN
INSERT INTO xyz_media_temp (insert_date) VALUES(CURDATE());
SELECT MAX(xyz_media_temp.id) INTO t_id FROM xyz_media_temp;
SET New.id = t_id;
END IF;
END$$
DELIMITER ;
我在 MySQL 中有这个触发器,当我在 PHPMyadmin 中触发任何插入查询时,它运行良好,但是当从 java 代码触发相同的插入时,它没有执行。我尝试使用 async: false 将所有请求更改为 Ajax 的代码,然后我发现早期的请求仍在后台运行,而我后来的请求给出了异常,因为尚未从数据库返回 ID。
可以做些什么来避免这个问题?
【问题讨论】:
-
我建议添加一个
date类型的新insert_date字段,并将id字段更改为classdost.xyz_media表中的自动递增主键。 -
以这种方式选择 max 有时会与正确的记录不匹配,因为其他人连续插入。
-
实际上 classdost.xyz_media 的 ID 列只是自动递增的,但要运行此触发器,我们必须更改它。