怎么写这一个 mysql 的触发器,需求见正文,挺急得,谢谢! - V2EX
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 3184 次点击
    这是一个创建于 3603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个表的表名字是: 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     Solana     3167 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 00:33 PVG 08:33 LAX 17:33 JFK 20:33
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86