BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #6032同步于 2011/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

这种情况下的MySQL的trigger该怎么写?

kaka2w
2011/10/14镜像同步6 回复
求助一下大家,我碰到了一个MySQL数据库的编写一个trigger的问题,不知道这个 trigger该怎么写,大致如下: table_1 ID NAME COUNT 1 name1 2 2 name2 3 3 name3 1 table_2 ID TITLE TYPE_ID 1 title1 1 2 title2 1 3 title3 2 4 title4 3 5 title5 2 6 title6 2 让 table_1 中的 COUNT 列的值为 table_2 中 TYPE_ID 值等于 table_1 中 ID 值的行数 的统计值, 例如: table_2中 TYPE_ID等于1的行有ID=1和ID=2两行,所以table_1中ID=1行的COUNT值为2 table_2中 TYPE_ID等于2的行有ID=3、5、6三行,所以table_1中ID=2行的COUNT值为3 table_2中 TYPE_ID等于3的行有ID=4一行, 所以table_1中ID=3行的COUNT值为1 不知道我描述清楚了么
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
kaka2w机器人#1 · 2011/10/14
木有人么? 【 在 kaka2w (长期征人游泳跑步) 的大作中提到: 】 : 标 题: 这种情况下的MySQL的trigger该怎么写? : 发信站: 北邮人论坛 (Fri Oct 14 11:17:17 2011), 站内 : : 求助一下大家,我碰到了一个MySQL数据库的编写一个triggle的问题,不知道这个 : triggle该怎么写,大致如下: : : table_1 : ID NAME COUNT : 1 name1 2 : 2 name2 3 : 3 name3 1 : : table_2 : ID TITLE TYPE_ID : 1 title1 1 : 2 title2 1 : 3 title3 2 : 4 title4 3 : 5 title5 2 : 6 title6 2 : : 让 table_1 中的 COUNT 列的值为 table_2 中 TYPE_ID 值等于 table_1 中 ID 值的行数 : 的统计值, : 例如: : table_2中 TYPE_ID等于1的行有ID=1和ID=2两行,所以table_1中ID=1行的COUNT值为2 : table_2中 TYPE_ID等于2的行有ID=3、5、6三行,所以table_1中ID=2行的COUNT值为3 : table_2中 TYPE_ID等于3的行有ID=4一行, 所以table_1中ID=3行的COUNT值为1 : : 不知道我描述清楚了么 : -- : kaka2w (长期征人游泳跑步) 共上站 5445 次,发表过 8888 篇文章 : 积分[3303] 可消费积分[3303] 性别:[帅哥哦] 星座:[天蝎座] : kaka2w (长期征人游泳跑步) 共上站 6151 次,发表过 9999 篇文章 : 积分[4200] 可消费积分[4200] 性别:[帅哥哦] 星座:[天蝎座] : 微博求关注:http://weibo.com/1246502925 : : : ※ 来源:·北邮人论坛 bbs.byr.cn·[FROM: 119.255.30.*]
wangjianzhou机器人#2 · 2011/10/14
是想些插入数据的SQL?还是想加入一个触发器实现一些事件?
kaka2w机器人#3 · 2011/10/15
是想写一个trigger实现每次table_2进行insert 或者 delete 操作后自动进行table_1表某一行的count的更新操作,count是统计table_2中type_id等于table_1中id的行的个数(或者说行数),如表所示 一个比较二的方法是每次table_2进行insert或delete之后都把table_1中的每一行的count算一遍,我想的是只计算table_2中变化的那一行的type_id所对应的那一行,效率会高很多,因为预期数据量会很大 我发现难点是,怎么知道是执行一次insert或delete之后,怎么知道是哪一行被insert或delete了? 【 在 wangjianzhou (缺钱) 的大作中提到: 】 : 标 题: Re: 这种情况下的MySQL的trigger该怎么写? : 发信站: 北邮人论坛 (Fri Oct 14 20:57:54 2011), 站内 : : 是想些插入数据的SQL?还是想加入一个触发器实现一些事件? : -- : : ※ 来源:·北邮人论坛 http://bbs.byr.cn·[FROM: 118.229.143.*]
kaka2w机器人#4 · 2011/10/15
解决方案,希望斑竹m一下 mysql的insert触发器或者是update触发器的被插入数据是用NEW对象来存储的,它不是一张表,也不是一个变量,它是一个对象,其中的内部成员变量就是每个字段,这样就容易理解了:NEW.columnName可以取得新的要插入的记录的列。 其中还有一个是OLD对象,这个对象是你要删除的那条记录。使用方法和作用NEW差不多,但存储的记录不同。 mysql没有mssql中的INSERTED 和 DELETED表,却有NEW和OLD两个记录对象,但是,这两个对象分别只能存储一条记录,而不能存储多条记录,因为它们不是表啊。 【 在 kaka2w (长期征人游泳跑步) 的大作中提到: 】 : 标 题: 这种情况下的MySQL的trigger该怎么写? : 发信站: 北邮人论坛 (Fri Oct 14 11:17:17 2011), 站内 : : 求助一下大家,我碰到了一个MySQL数据库的编写一个trigger的问题,不知道这个 : trigger该怎么写,大致如下: : : table_1 : ID NAME COUNT : 1 name1 2 : 2 name2 3 : 3 name3 1 : : table_2 : ID TITLE TYPE_ID : 1 title1 1 : 2 title2 1 : 3 title3 2 : 4 title4 3 : 5 title5 2 : 6 title6 2 : : 让 table_1 中的 COUNT 列的值为 table_2 中 TYPE_ID 值等于 table_1 中 ID 值的行数 : 的统计值, : 例如: : table_2中 TYPE_ID等于1的行有ID=1和ID=2两行,所以table_1中ID=1行的COUNT值为2 : table_2中 TYPE_ID等于2的行有ID=3、5、6三行,所以table_1中ID=2行的COUNT值为3 : table_2中 TYPE_ID等于3的行有ID=4一行, 所以table_1中ID=3行的COUNT值为1 : : 不知道我描述清楚了么 : -- : kaka2w (长期征人游泳跑步) 共上站 5445 次,发表过 8888 篇文章 : 积分[3303] 可消费积分[3303] 性别:[帅哥哦] 星座:[天蝎座] : kaka2w (长期征人游泳跑步) 共上站 6151 次,发表过 9999 篇文章 : 积分[4200] 可消费积分[4200] 性别:[帅哥哦] 星座:[天蝎座] : 微博求关注:http://weibo.com/1246502925 : : : ※ 修改:·kaka2w 于 Oct 15 13:23:05 2011 修改本文·[FROM: 119.255.30.*] : ※ 来源:·北邮人论坛 bbs.byr.cn·[FROM: 119.255.30.*]
doubleKO机器人#5 · 2011/10/15
CREATE TRIGGER ins_check AFTER INSERT ON table_2 FOR EACH ROW BEGIN...END CREATE TRIGGER del_check AFTER DELETE ON table_2 FOR EACH ROW BEGIN...END 【 在 kaka2w (长期征人游泳跑步) 的大作中提到: 】 : 标 题: 这种情况下的MySQL的trigger该怎么写? : 发信站: 北邮人论坛 (Fri Oct 14 11:17:17 2011), 站内 : : 求助一下大家,我碰到了一个MySQL数据库的编写一个trigger的问题,不知道这个 : trigger该怎么写,大致如下: : : table_1 : ID NAME COUNT : 1 name1 2 : 2 name2 3 : 3 name3 1 : : table_2 : ID TITLE TYPE_ID : 1 title1 1 : 2 title2 1 : 3 title3 2 : 4 title4 3 : 5 title5 2 : 6 title6 2 : : 让 table_1 中的 COUNT 列的值为 table_2 中 TYPE_ID 值等于 table_1 中 ID 值的行数 : 的统计值, : 例如: : table_2中 TYPE_ID等于1的行有ID=1和ID=2两行,所以table_1中ID=1行的COUNT值为2 : table_2中 TYPE_ID等于2的行有ID=3、5、6三行,所以table_1中ID=2行的COUNT值为3 : table_2中 TYPE_ID等于3的行有ID=4一行, 所以table_1中ID=3行的COUNT值为1 : : 不知道我描述清楚了么 : -- : kaka2w (长期征人游泳跑步) 共上站 5445 次,发表过 8888 篇文章 : 积分[3303] 可消费积分[3303] 性别:[帅哥哦] 星座:[天蝎座] : kaka2w (长期征人游泳跑步) 共上站 6151 次,发表过 9999 篇文章 : 积分[4200] 可消费积分[4200] 性别:[帅哥哦] 星座:[天蝎座] : 微博求关注:http://weibo.com/1246502925 : : : ※ 修改:·kaka2w 于 Oct 15 13:23:05 2011 修改本文·[FROM: 119.255.30.*] : ※ 来源:·北邮人论坛 bbs.byr.cn·[FROM: 119.255.30.*]
doubleKO机器人#6 · 2011/10/15
OLD和NEW是对触发程序的MySQL扩展。 使用OLD和NEW关键字,能够访问受触发程序影响的行中的列(OLD和NEW不区分大小写)。在INSERT触发程序中,仅能使用NEW.col_name,没有旧行。在DELETE触发程序中,仅能使用OLD.col_name,没有新行。在UPDATE触发程序中,可以使用OLD.col_name来引用更新前的某一行的列,也能使用NEW.col_name来引用更新后的行中的列。 你要在t2上建触发器动态修改t1,可以定义修改t1的存储程序(若语句较多的话),然后在t2触发器中调用存储程序时传递OLD.id或NEW.id 【 在 kaka2w (长期征人游泳跑步) 的大作中提到: 】 : 解决方案,希望斑竹m一下 : mysql的insert触发器或者是update触发器的被插入数据是用NEW对象来存储的,它不是一张表,也不是一个变量,它是一个对象,其中的内部成员变量就是每个字段,这样就容易理解了:NEW.columnName可以取得新的要插入的记录的列。 : 其中还有一个是OLD对象,这个对象是你要删除的那条记录。使用方法和作用NEW差不多,但存储的记录不同。 : ...................