我有一个这样的场景:
有两个表table1和table2。table1有一个主键pkey,table2有一个外键fkey。现在,在插入时,如果提供了外键,则该值应按原样插入。否则,必须使用某些计算从table1获取主键,并确定要插入的外键。我该怎么做?
我正在使用MySql 5.0。
编辑:
在我的场景中,table1保存账单详细信息,即table1具有账单和应付总金额。客户支付总未付余额的一部分或将为特定账单支付。我想要做的是,在没有提供bill_id(它是table1中的主键和table2中的外键)的情况下,在table1中搜索最早到期的账单并扣除到期金额,如有剩余则从下一个账单开始扣除。我想在数据库层面上实现这一点,而不是在上层实现。因此,当进行插入时,如果没有外键的值,则触发器或其他方式应检索并放置该值。我该如何实现?
使用这里提供的答案,我尝试了这个:
有两个表table1和table2。table1有一个主键pkey,table2有一个外键fkey。现在,在插入时,如果提供了外键,则该值应按原样插入。否则,必须使用某些计算从table1获取主键,并确定要插入的外键。我该怎么做?
我正在使用MySql 5.0。
编辑:
在我的场景中,table1保存账单详细信息,即table1具有账单和应付总金额。客户支付总未付余额的一部分或将为特定账单支付。我想要做的是,在没有提供bill_id(它是table1中的主键和table2中的外键)的情况下,在table1中搜索最早到期的账单并扣除到期金额,如有剩余则从下一个账单开始扣除。我想在数据库层面上实现这一点,而不是在上层实现。因此,当进行插入时,如果没有外键的值,则触发器或其他方式应检索并放置该值。我该如何实现?
使用这里提供的答案,我尝试了这个:
CREATE DEFINER=`root`@`localhost` TRIGGER `inflow_pay_done_insert` BEFORE INSERT ON `inflow_pay_done` FOR EACH ROW BEGIN
DECLARE pkey INT;
SET pkey = (SELECT bill_id from inflow_bills where payment_stat = 0 and rs_id = NEW.rs_id order by time_stamp limit 1);
SET NEW.bill_id = IF(NEW.bill_id , NEW.bill_id , pkey);
UPDATE raw_mat_sup rms SET rms.outstanding_bal_payable = rms.outstanding_bal_payable - NEW.amount where rms.rs_id = NEW.rs_id;
END|
我在尝试向inflow_pay_done插入数据时遇到以下错误:
/* SQL错误(1048):无法将'bill_id'列设置为null */
table2
的INSERT
语句中没有提供table1
的主键,那么从table1
选择主键的条件是什么?只是为了建立有效的关系/外键而随机选择一个吗? - Kaii