免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3347 | 回复: 6
打印 上一主题 下一主题

加入触发器以后,INSERT就开始报错 [复制链接]

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-11 12:29 |只看该作者 |倒序浏览
  1. DELIMITER //
  2. CREATE TRIGGER log_Student_Basic_Insert AFTER INSERT ON student_basic FOR EACH ROW
  3.         BEGIN
  4.                 UPDATE student_basic SET student_basic.Insert_Date=CURRENT_TIMESTAMP(),student_basic.Insert_HOST=SYSTEM_USER();               
  5.                 UPDATE class SET class.sum=class.sum+1 WHERE class.id=student_basic.class_id;
  6.                 UPDATE collage SET collage.sum_student=collage.sum_student+1 WHERE collage.id=(SELECT class.collage_id FROM class WHERE class.id=student_basic.class_id);
  7.         END;//
  8. DELIMITER ;
复制代码
请教一下,这段代码错在什么地方了,运行后,那个表里无法插入数据

下面这段儿时报错
  1. PS C:\Windows\system32> mysql -u fangzhaoguo -p
  2. Enter password: **********
  3. Welcome to the MySQL monitor.  Commands end with ; or \g.
  4. Your MySQL connection id is 2
  5. Server version: 5.5.19 MySQL Community Server (GPL)

  6. Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.

  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  11. mysql> use school;
  12. Database changed
  13. mysql> INSERT INTO teacher (id,name,sex,phone,collage_id) VALUES(00000000,'待定',0,0,0);
  14. ERROR 1442 (HY000): Can't update table 'teacher' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
  15. mysql>
  16. mysql> INSERT INTO collage (id,name,main_teacher_id,sum_student,sum_teacher) VALUES(00,'未分类',00000000,0,0);
  17. ERROR 1442 (HY000): Can't update table 'collage' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
  18. mysql>
复制代码
总是告诉我这个
ERROR 1442 (HY000): Can't update table 'collage' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
  1. DELIMITER //
  2. CREATE TRIGGER log_Student_Basic_Update AFTER UPDATE ON student_basic FOR EACH ROW
  3.         BEGIN
  4.                 UPDATE student_basic SET student_basic.Update_Date=CURRENT_TIMESTAMP(),student_basic.Update_Date=SYSTEM_USER();
  5.         END;//
  6. DELIMITER ;
复制代码
我总是感觉这段儿代码会出现死循环,因为触发条件是UPDATE,触发后的操作也是UPDATE,怎么修改呢?

论坛徽章:
2
摩羯座
日期:2014-05-29 17:38:40数据库技术版块每日发帖之星
日期:2016-08-05 06:20:00
2 [报告]
发表于 2012-04-12 15:39 |只看该作者
UPDATE student_basic SET student_basic.Insert_Date=CURRENT_TIMESTAMP(),student_basic.Insert_HOST=SYSTEM_USER();
改全表?

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
3 [报告]
发表于 2012-04-12 18:19 |只看该作者
回复 2# devilkin0312


    忘了WHERE语句,加上WHERE语句还是错的.目前唯一的解决方案就是把修改时间放在单独的表中

论坛徽章:
2
摩羯座
日期:2014-05-29 17:38:40数据库技术版块每日发帖之星
日期:2016-08-05 06:20:00
4 [报告]
发表于 2012-04-12 18:23 |只看该作者
为何不在insert的时候插入时间?回复 3# 方兆国


   

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
5 [报告]
发表于 2012-04-12 18:29 |只看该作者
回复 4# devilkin0312


    为了防止插入时,客户端系统时间错误(假设客户机和服务器时间存在不一致),导致插入的时间错误

论坛徽章:
2
摩羯座
日期:2014-05-29 17:38:40数据库技术版块每日发帖之星
日期:2016-08-05 06:20:00
6 [报告]
发表于 2012-04-12 18:41 |只看该作者
插入取server时间不就ok了
回复 5# 方兆国


   

论坛徽章:
19
CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-04-17 11:19:51CU大牛徽章
日期:2013-04-17 11:19:42CU大牛徽章
日期:2013-04-17 11:19:37CU大牛徽章
日期:2013-04-17 11:19:32CU大牛徽章
日期:2013-04-17 11:19:28
7 [报告]
发表于 2012-04-12 18:47 |只看该作者
回复 6# devilkin0312


    插入时取服务器时间?我在想插入时程序已经把编译好的SQL语句传上去了,除了用触发器,我想不到其他办法啦,我刚开始学数据库的,没什么经验
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP