From ded91a21fe275c1d8dd999d0141560e077db899e Mon Sep 17 00:00:00 2001 From: Rohan Allison Date: Tue, 16 Jun 2015 23:28:54 -0500 Subject: [PATCH] Update README with clear explanation of transaction db handle --- README.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f2b9978b..ccab06db 100644 --- a/README.md +++ b/README.md @@ -855,23 +855,26 @@ db.Joins("left join users on users.id = emails.user_id").Where("users.name = ?", ## Transactions -All individual save and delete operations are run in a transaction by default. +To perform a set of operations within a transaction, the general flow is as below. +The database handle returned from ``` db.Begin() ``` should be used for all operations within the transaction. +(Note that all individual save and delete operations are run in a transaction by default.) ```go // begin tx := db.Begin() -// do revertable work in a transaction (use 'tx' in place of 'db') -tx.Exec +// do some database operations (use 'tx' from this point, not 'db') +tx.Create(...) +... -// rollback +// rollback in case of error tx.Rollback() -// commit +// Or commit if all is ok tx.Commit() ``` -### More Complex Example +### A Specific Example ``` func CreateAnimals(db *gorm.DB) err { tx := db.Begin()