【发布时间】:2013-07-26 12:30:04
【问题描述】:
我的 MySQL 数据库中有 accounts 和 money 表,所以如果有任何行增加资金,accounts.balance 应该更新,首先我通过 Active Record 和 Transaction 完成
$transaction = $connection->beginTransaction();
try {
if ($createModel->save()) {
$account = $createModel->accounts;
$account->balance += $createModel->amount;
if ($account->save())
$transaction->commit();
}
} catch(Exception $e){
$transaction->rollBack();
}
现在我将其更改为 $createModel->save() 并创建触发器以更新 accounts 表,
CREATE TRIGGER before_insert_money BEFORE INSERT ON money
FOR EACH ROW
BEGIN
UPDATE accounts SET balance=balance+NEW.amount WHERE id=NEW.accounts_id;
END;
触发器是否足以确保在不使用事务的情况下更新帐户表?如果您的答案是否定的,我该如何结合触发器、事务和 ActiveRecord?
【问题讨论】:
-
你为什么要通过触发器来那个?交易出了什么问题?
-
我觉得它更快,它帮助我拥有更薄的控制器。
-
认为某事更快与测量它实际上更快是不同的。即使它稍微快一点,你仍然使用煎饼杀死黄蜂,你的解决方案可能有效,但它不是触发器的用途。
标签: mysql yii triggers transactions