Jul*_*ull 9 mysql sql triggers
我有两个表concept_access和concept_access_log.我想创建一个触发器,每次从concept_access中删除某些东西时都会工作,检查日志表中是否有类似的记录,如果没有,则在从concept_access中删除之前插入新的.
我修改了触发器,现在它看起来像这样:
DROP TRIGGER IF EXISTS before_delete_concept_access;
DELIMITER //
CREATE TRIGGER before_delete_concept_access
BEFORE DELETE ON `concept_access` FOR EACH ROW
BEGIN
IF (SELECT 1 FROM concept_access_log WHERE map=OLD.map
AND accesstype=OLD.accesstype AND startdate=OLD.startdate AND stopdate=OLD.stopdate) IS NULL THEN
INSERT INTO concept_access_log (map, accesstype, startdate, stopdate)
VALUES (OLD.map, OLD.accesstype, OLD.startdate, OLD.stopdate);
END IF;
END//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
删除前concept_access中的示例数据:
map accesstype startdate stopdate
1 public NULL NULL
1 loggedin 2011-05-11 NULL
1 friends NULL NULL
Run Code Online (Sandbox Code Playgroud)
日志表已经有前2行.它们与concept_access完全相同.当我从concept_access表中删除第一行时,我在日志表中得到这个:
map accesstype startdate stopdate
1 public NULL NULL
1 loggedin 2011-05-11 NULL
1 friends NULL NULL
1 public NULL NULL
Run Code Online (Sandbox Code Playgroud)
虽然它不应该插入任何东西,因为(1,public,null,null)已经存在.
该表没有主键.我没有创建结构,所以不要问我为什么.改变它将破坏许多已有的功能.我只需要记录从表中删除的内容concept_access并将其存储在日志中而不重复.
我真的很感激,如果有人能弄清楚出了什么问题.
neo*_*ble 14
DROP TRIGGER IF EXISTS before_delete_concept_access;
DELIMITER //
CREATE TRIGGER before_delete_concept_access
BEFORE DELETE ON `concept_access` FOR EACH ROW
BEGIN
IF (SELECT COUNT(*) FROM concept_access_log WHERE map=OLD.map
AND accesstype=OLD.accesstype AND startdate=OLD.startdate AND stopdate=OLD.stopdate) = 0 THEN
INSERT INTO concept_access_log (map, accesstype, startdate, stopdate)
VALUES (OLD.map, OLD.accesstype, OLD.startdate, OLD.stopdate);
END IF;
END//
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我没有使用不存在,只测试匹配计数是否大于0
你的代码在我的matchine上运行良好,你的mysql版本是什么?
mysql> select version();
+------------+
| version() |
+------------+
| 5.1.56-log |
+------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23419 次 |
| 最近记录: |