V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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 · 2015-12-04 17:00:32 +08:00 · 2881 次点击
    这是一个创建于 3278 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2015-12-07 11:18:39 +08:00
    一张有 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 条回复    2015-12-10 21:25:26 +08:00
    Ashitaka4
        1
    Ashitaka4  
    OP
       2015-12-04 17:29:25 +08:00
    逻辑有没有问题。
    Ashitaka4
        2
    Ashitaka4  
    OP
       2015-12-04 17:48:31 +08:00
    然而 18 分钟过去了。。。
    chinajik
        3
    chinajik  
       2015-12-04 17:56:23 +08:00
    INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
    Ashitaka4
        4
    Ashitaka4  
    OP
       2015-12-04 18:08:35 +08:00
    @chinajik 谢谢回复,如果放在触发器中应该怎么写,况且插入的 values 会变的。
    KIDJourney
        5
    KIDJourney  
       2015-12-04 21:13:59 +08:00
    KIDJourney
        6
    KIDJourney  
       2015-12-04 21:15:11 +08:00
    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  
       2015-12-04 22:01:48 +08:00   ❤️ 1
    其实我觉得你问题没说清楚。
    如果没有读过《提问的智慧》,请读一下。
    本质上来说,你需要提供一个简单的表结构,一个插入语句,和你预期的行为方式。
    Ashitaka4
        8
    Ashitaka4  
    OP
       2015-12-07 11:17:04 +08:00
    @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  
       2015-12-07 13:38:14 +08:00
    @Ashitaka4 似乎是看明白了。
    你的期望是跟着 insert 以后再做一次
    update hostgroups set total = total + 1 where hostgroupid = 12 是吗?
    Ashitaka4
        10
    Ashitaka4  
    OP
       2015-12-09 10:37:15 +08:00
    @msg7086 对的 但还没有找到更好的方法,
    KIDJourney
        11
    KIDJourney  
       2015-12-10 19:03:35 +08:00
    我回答你看不懂吗。。。
    在 mysql 里面你不能这样做。。。
    触发器不能修改正在被使用的表。。。

    我还把文档发给你了,你都不看的吗。。。
    KIDJourney
        12
    KIDJourney  
       2015-12-10 21:25:26 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.