在另一个表中插入或更新时递增/递减列

时间:2016-06-19 09:46:16

标签: mysql sql database database-design

所以考虑一下: 我有两张桌子,第一张是“机器”,第二张是“出租”。我在名为“inRental”的机器中有一个布尔列,当机器没有租用时它是0,而当机器没有租用时它是1。我在租赁中也有一个名为“已完成”的布尔列,当机器仍在租赁时为0,租赁完成时为1(我不删除租赁条目,因为我想跟踪租赁历史)。所以我想要的是,当“租赁”中插入该机器的新租赁条目时,将列'machines.inRental'增加或设置为1。例如,当我创建新的租赁时,我做了:

INSERT INTO rentals VALUES (0,:machineID,0) 

当发生这种情况时,我想:

UPDATE machines SET inRental=1 WHERE MachineID=:machineID

类似我希望租赁完成时:

UPDATE rentals SET finished=1 WHERE MachineID=:machineID

UPDATE machines SET inRental=0 WHERE MachineID=:machineID

表格是这样的:

RentalID  MachineID    finished   ...
.....................................
1         5            1                 
2         6            1                   
3         7            0                      


MachineID  inRental   ...
.........................
5          0                             
6          0                               
7          1                                 

我猜这是用触发器实现的,但是怎么样?我也听说触发器坏了,最好避免它们。有没有更好的办法?我知道它可能看起来列inRental是多余的,我可以只做JOINS,但我在子查询中使用很多次表'机器'与其他表,我发现它有点无效和混乱,必须使JOINs子查询,还是不是?

1 个答案:

答案 0 :(得分:0)

触发器的使用完全取决于您的要求,您也可以使用存储过程。请参阅:formatting option 112