## Insert 插入
```go
// 一條數據
var data = map[string]interface{}{"age":17, "job":"it3"}
// insert into user (age, job) values (17, 'it3')
db.Table(&user).Data(data).Insert()
// 多條數據
var multi_data = []map[string]interface{}{ {"age":17, "job":"it3"},{"age":17, "job":"it4"} }
// insert into user (age, job) values (17, 'it3') (17, 'it4')
db.Table("user").Data(multi_data).Insert()
```
## InsertGetId 插入并返回插入id, 默認返回影響行數
```go
// 一條數據
var data = map[string]interface{}{"age":17, "job":"it3"}
// insert into user (age, job) values (17, 'it3')
db.Table(&user).Data(data).Insert()
// 多條數據
var multi_data = []map[string]interface{}{ {"age":17, "job":"it3"},{"age":17, "job":"it4"} }
// insert into user (age, job) values (17, 'it3') (17, 'it4')
db.Table("user").Data(multi_data).InsertGetId()
```
## Update 修改
```go
// update user set age=17, job='ite3' where (id=1) or (age>30)
db.Table("user").
Data(map[string]interface{}{"age":17, "job":"it3"}).
Where("id", 1).
OrWhere("age",">",30).
Update()
```
## Delete 刪除
```go
// delete from user where id=5
db.Table("user").Where("id", 5).Delete()
```
除了 `InsertGetId` 返回插入id, 其他方法均返回 影響行數, 如果影響行數為0, 則操作也是不成功的
## 事務
```go
var data = map[string]interface{}{"names": "fizz3", "age": 3}
```
- 標準事務
```go
db := engin.NewOrm()
// 開始事務
db.Begin()
res,err := db.Table("user").Where("id", 1).Data(data).Update()
if (res == 0 || err!=nil) {
// 回滾事務
db.Rollback()
}
res2,err2 := db.Table("user").Data(data).Insert()
if (res2 == 0 || err2!=nil) {
// 回滾事務
db.Rollback()
}
// 提交事務
db.Commit()
```
- 一鍵事務: 簡單用法, 用閉包實現, 自動開始,回滾和提交 事務
```go
db:= DB()
err := db.Transaction(
// 第一個業務
func(db IOrm) error {
_,err := db.Where("uid",1).Update(&Data{"name":"gorose2"})
if err!=nil {
return err
}
_,err = db.Insert(&Data{"name":"gorose2"})
if err!=nil {
return err
}
return nil
},
// 第二個業務
func(db IOrm) error {
_,err := db.Where("uid",1).Delete()
if err!=nil {
return err
}
_,err = db.Insert(&Data{"name":"gorose2"})
if err!=nil {
return err
}
return nil
}
)
```
內部閉包會在返回錯誤時自動回滾, 會在沒有錯誤時自動提交事務
## 特別說明
1. 傳入的數據如果是struct綁定數據, 則默認忽略字段類型默認值.
如果想更新的話, 則可以使用 `ExtraCols(args ...string)`,如:`xx.ExtraCols("field","field2").Update(&Data{xxx})`