mysql触发器日期对比,mysql-更新触发器的不同日期

我正在做一个项目,却被这个触发器卡住了.这是涉及的两个表.

---------------+---------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+---------------+---------------+------+-----+---------+----------------+

| id_tra | int(11) | NO | PRI | NULL | auto_increment |

| nombre_tra | varchar(100) | NO | | NULL | |

| apellidos_tra | varchar(100) | NO | | NULL | |

| dni_tra | varchar(1000) | NO | | NULL | |

| telefono_tra | int(10) | NO | | NULL | |

| falta_tra | date | NO | | NULL | |

| dias_tra | int(255) | NO | | NULL | |

+---------------+---------------+------+-----+---------+----------------+

+--------------+----------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+--------------+----------+------+-----+---------+----------------+

| id_rec | int(11) | NO | PRI | NULL | auto_increment |

| id_tra_rec | int(11) | NO | MUL | NULL | |

| id_var_rec | int(11) | NO | MUL | NULL | |

| fecha_rec | date | NO | | NULL | |

| cantidad_rec | int(255) | NO | | NULL | |

+--------------+----------+------+-----+---------+----------------+

在这种情况下,id_tra和id_tra_rec是相关的,并且当第二张表映像上有INSERT时,我需要一个触发器来更新dias_tra 1上的dias_tra来更新id_tra = id_tra_rec.

那是相对容易的,但奇怪的是,Insert可以具有不同的数据,但是具有相同的日期(fecha_rec),因此触发器必须知道是否存在具有相同ID和相同日期(fecha_rec)的行,以不更新dias_tra .像精选不同的东西.这是我尝试过的:

create trigger dias_tra

after insert on datos_recogida

for each row

begin

if (select fecha_rec from datos_recogida where id_tra_rec=new.id_trarec and fecha_rec=new.fecha_rec)

update datos_trabajadores set dias_tra = dias_tra +1 where id_tra=new.id_tra_rec

end if;

end;

对不起,我的英文,第一次来,希望您能谅解.如果您需要更多信息,我在这里:)

解决方法:

您无需说datos_trabajadores的创建时间,因此这里有一个触发器,可以根据需要进行检查和创建.我使用了一个简单的计数来检查是否已存在id_tra_rec和fecha_rec-这是插入后触发,因此计数1表示其第一个.请注意,您可以在需要调试时删除debug_table进行调试.

drop table if exists datos_recogida,datos_trabajadores;

create table datos_trabajadores

( id_tra int(11) auto_increment primary key,

nombre_tra varchar(100) ,

apellidos_tra varchar(100) ,

dni_tra varchar(1000) ,

telefono_tra int(10) ,

falta_tra date ,

dias_tra int(255) )

;

create table datos_recogida

( id_rec int(11) auto_increment primary key,

id_tra_rec int(11) ,

id_var_rec int(11) ,

fecha_rec date ,

cantidad_rec int(255) );

drop trigger if exists t;

delimiter $$

create trigger t after insert on datos_recogida

for each row

begin

if (select count(*) from datos_recogida where id_tra_rec = new.id_tra_rec and fecha_rec = new.fecha_rec) = 1 then

insert into debug_table(msg) values (concat('not found:',new.id_tra_rec,':',new.fecha_rec));

if not exists(select 1 from datos_trabajadores where dias_tra = new.id_tra_rec) then

insert into debug_table(msg) values ('inserting');

insert into datos_trabajadores(dias_tra,nombre_tra) values (new.id_tra_rec,1);

else

insert into debug_table(msg) values ('Updating');

update datos_trabajadores

set nombre_tra = nombre_tra + 1

where dias_tra = new.id_tra_rec;

end if;

end if;

end $$

delimiter ;

truncate table debug_table;

truncate table datos_recogida;

truncate table datos_trabajadores;

insert into datos_recogida (id_tra_rec,fecha_rec)

values

(1,'2019-01-01'),

(1,'2019-01-01'),

(1,'2019-01-02');

select * from debug_table;

select * from datos_trabajadores;

MariaDB [sandbox]> select * from debug_table;

+----+------------------------+------+

| id | msg | MSG2 |

+----+------------------------+------+

| 1 | not found:1:2019-01-01 | NULL |

| 2 | inserting | NULL |

| 3 | not found:1:2019-01-02 | NULL |

| 4 | Updating | NULL |

+----+------------------------+------+

4 rows in set (0.00 sec)

MariaDB [sandbox]> select * from datos_trabajadores;

+--------+------------+---------------+---------+--------------+-----------+----------+

| id_tra | nombre_tra | apellidos_tra | dni_tra | telefono_tra | falta_tra | dias_tra |

+--------+------------+---------------+---------+--------------+-----------+----------+

| 1 | 2 | NULL | NULL | NULL | NULL | 1 |

+--------+------------+---------------+---------+--------------+-----------+----------+

1 row in set (0.00 sec)

标签:mysql,date,insert,triggers

来源: https://codeday.me/bug/20191024/1922446.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值