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 · 3536 views
    This topic created in 3841 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   ·   Solana   ·   3097 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 14:42 · PVG 22:42 · LAX 07:42 · JFK 10:42
    ♥ Do have faith in what you're doing.