› 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
Ashitaka4
V2EX  ›  MySQL

怎么写这一个 mysql 的触发器,需求见正文,挺急得,谢谢!

  •  1
     
  •   Ashitaka4 · Dec 4, 2015 · 3807 views
    This topic created in 3955 days ago, the information mentioned may be changed or developed.

    这个表的表名字是: HostGroups
    需求是:当向 HostGroups 表中插入一条数据的时候,根据插入数据的 HostGroupFlag 的值找到和他相等的 HostGroupID 值,然后给找到的这条记录的 total 字段+1 ;

    Supplement 1  ·  Dec 7, 2015
    一张有 4 个字段的表 HostGroups , NAME Varchar(10), HostGroupFlag INT , HostGroupID INT , Total INT 。

    执行: insert into HostGroups values(shandong,11,12,13); commit ;

    当插入执行后,将此条语句的 HostGroupFlag 字段也就是 12 这个值 和表中其他数据行的 HostGroupID 字段里值进行对比查找,如果一致, update 所找到的那条数据的 Total 字段值+1 。

    不知道我这么表达您能不能明白,请教怎么实现这种需求。先谢谢了。
    12 replies  •  2015-12-10 21:25:26 +08:00
    Ashitaka4
        1
    Ashitaka4  
    OP
       Dec 4, 2015
    逻辑有没有问题。
    Ashitaka4
        2
    Ashitaka4  
    OP
       Dec 4, 2015
    然而 18 分钟过去了。。。
    chinajik
        3
    chinajik  
       Dec 4, 2015
    INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
    Ashitaka4
        4
    Ashitaka4  
    OP
       Dec 4, 2015
    @chinajik 谢谢回复,如果放在触发器中应该怎么写,况且插入的 values 会变的。
    KIDJourney
        5
    KIDJourney  
       Dec 4, 2015
    KIDJourney
        6
    KIDJourney  
       Dec 4, 2015
    Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.
    msg7086
        7
    msg7086  
       Dec 4, 2015   ❤️ 1
    其实我觉得你问题没说清楚。
    如果没有读过《提问的智慧》,请读一下。
    本质上来说,你需要提供一个简单的表结构,一个插入语句,和你预期的行为方式。
    Ashitaka4
        8
    Ashitaka4  
    OP
       Dec 7, 2015
    @msg7086 多谢提醒,上次比较着急,而且对其需求也不甚清楚,特来补充。

    一张有 4 个字段的表 HostGroups , NAME Varchar(10), HostGroupFlag INT , HostGroupID INT , Total INT 。

    执行: insert into HostGroups values(shandong,11,12,13); commit ;

    当插入执行后,将此条语句的 HostGroupFlag 字段也就是 12 这个值 和表中其他数据行的 HostGroupID 字段里值进行对比查找,如果一致, update 所找到的那条数据的 Total 字段值+1 。

    不知道我这么表达您能不能明白,请教怎么实现这种需求。先谢谢了。
    msg7086
        9
    msg7086  
       Dec 7, 2015
    @Ashitaka4 似乎是看明白了。
    你的期望是跟着 insert 以后再做一次
    update hostgroups set total = total + 1 where hostgroupid = 12 是吗?
    Ashitaka4
        10
    Ashitaka4  
    OP
       Dec 9, 2015
    @msg7086 对的 但还没有找到更好的方法,
    KIDJourney
        11
    KIDJourney  
       Dec 10, 2015
    我回答你看不懂吗。。。
    在 mysql 里面你不能这样做。。。
    触发器不能修改正在被使用的表。。。

    我还把文档发给你了,你都不看的吗。。。
    KIDJourney
        12
    KIDJourney  
       Dec 10, 2015
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2086 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:36 · PVG 08:36 · LAX 17:36 · JFK 20:36
    ♥ Do have faith in what you're doing.