是否有使用使用CodeIgniter事務?
$this->db->trans_start();
,並使用
$this->db->query('START TRANSACTION');
之間有什麼區別?
實際上,我希望將此問題應用於其他編程語言,如C#與BeginTransaction()
。
您何時明確寫出要在查詢中開始事務以及何時只從框架調用內置方法或您正在使用的任何語言?
是否有使用使用CodeIgniter事務?
$this->db->trans_start();
,並使用
$this->db->query('START TRANSACTION');
之間有什麼區別?
實際上,我希望將此問題應用於其他編程語言,如C#與BeginTransaction()
。
您何時明確寫出要在查詢中開始事務以及何時只從框架調用內置方法或您正在使用的任何語言?
問:是否有使用
回答之間的任何差別:號都做同樣的工作。
說明
如果你需要得到了解CI事務讀取this answer上another question。
但只通過使用$this->db->query()
您不能歸檔交易部分。
問:當你明確地寫出來,你想在一個查詢開始交易,當你只是調用內置-in方法從框架或您正在使用的任何語言?
答案:(基於PHP/CI)它基於你做什麼樣的系統。
說明
例如,如果您有簡單的產品加上其有很多的子表。 (假設1個主表和4個子表)。所以一旦子表表拋出錯誤,數據將保留在上位表。所以爲了防止我們在這裏使用Transaction。
假設Child Table 2
發生了錯誤,這會發生什麼(插入數據)。
| Table Name | Normal Insert if |
/update | Transaction |
| ------ | ------ | ------ |
| Master Table | Remain | Roalbacked |
| Child Table 1 | Remain | Roalbacked |
| Child Table 2 | Error | Roalbacked |
| Child Table 3 | Empty | Nothing to do |
| Child Table 4 | Empty | Nothing to do |
有用的鏈接
很好解釋。這應該被添加到CI文檔中。 –
@ankitsuthar感謝哥們 –
我會使用框架的方法,如果可能。它可能帶有特定的錯誤處理,事件,日誌記錄等,你會錯過一個原始查詢。在CI中,您會錯過首次運行的SET AUTOCOMMIT = 0查詢:https://github.com/bcit-ci/CodeIgniter/blob/9e17059bf8d277058d1de23390e388b5fa0cc26a/system/database/drivers/mysql/mysql_driver。 php#L294 – ceejayoz