返回信息流求助一下大家,我碰到了一个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
不知道我描述清楚了么
这是一条镜像帖。来源:北邮人论坛 / database / #6032同步于 2011/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
这种情况下的MySQL的trigger该怎么写?
kaka2w
2011/10/14镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
木有人么?
【 在 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.*]
是想写一个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.*]
解决方案,希望斑竹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.*]
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.*]
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差不多,但存储的记录不同。
: ...................