› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
airycanon
V2EX  ›  MySQL

MySQL 初学者请教触发器问题

  •  
  •   airycanon · Jul 23, 2014 · 3810 views
    This topic created in 4458 days ago, the information mentioned may be changed or developed.
    为了实现某条数据的number字段为0时自动删除该条数据,为product_sell表创建如下的触发器:
    -------------------------------------------------------------------------------------------------------------------
    CREATE TRIGGER number_check AFTER UPDATE ON product_sell
    FOR EACH ROW
    BEGIN
    IF NEW.number=0 THEN DELETE FROM product_sell WHERE OLD.id=NEW.id;
    END IF
    END
    -------------------------------------------------------------------------------------------------------------------

    测试一下,执行下面的语句:
    -------------------------------------------------------------------------------------------------------------------
    UPDATE product_sell SET number=0 WHERE id='df31d0ed-1ecf-496e-996b-8840d834f170';
    -------------------------------------------------------------------------------------------------------------------

    结果该条数据number变为0,但并没有被删除,同时出现如下错误:
    -------------------------------------------------------------------------------------------------------------------
    Can't update table 'product_sell' in stored function/trigger because it is already used by statement
    which invoked this stored function/trigger.
    -------------------------------------------------------------------------------------------------------------------

    Google上述错误后得到的信息是在触发器中使用UPDATE语句导致,但是我触发器中并没有执行UPDATE,另有人说使触发器被触发的对象(上文中product_sell表中数据的更新)和触发器执行时的目标(删除product_sell中number为0的数据)不能为同一张表。


    小弟现在比较迷惑,求大神指条明路,先谢谢了。
    4 replies  •  2014-07-24 08:27:49 +08:00
    rainysia
        1
    rainysia  
       Jul 23, 2014   ❤️ 1
    不要用触发器. 换成程序逻辑来处理.
    airycanon
        2
    airycanon  
    OP
       Jul 23, 2014
    @rainysia 多谢解答,不过我仍然想知道错误的根源是什么。
    iyaozhen
        3
    iyaozhen  
       Jul 23, 2014
    好像触发器不是用来做这个事的。
    触发器只能用来插入数据的时候再另外一个表里面也插入数据,删除数据的时候另一个表也删除数据等事情。
    判断某个字段值等于什么的时候执行操作好像不行,这个需要程序来做。
    msg7086
        4
    msg7086  
       Jul 24, 2014
    因为你在更新记录的时候把他删了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2614 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:40 · PVG 21:40 · LAX 06:40 · JFK 09:40
    ♥ Do have faith in what you're doing.