ä»Âä¹Âæ¯GORMï¼Â
GORM æ¯ Go è¯Âè¨Âä¸ÂçÂÂä¸Â个强大çÂÂ对象堳系æ å°Âï¼ÂORMï¼ÂåºÂï¼Âå®ÂæÂÂä¾ÂäºÂä¸Âç§Âç®ÂÃ¥ÂÂä¸Âä¼Âé çÂÂæ¹å¼ÂæÂ¥è¿Âè¡Âæ°æ®åºÂæÂÂä½ÂãÂÂORM æ¯ä¸Âç§Âç¼Âç¨ÂæÂÂæ¯ï¼Âå®Âå°Âæ°æ®åºÂ表ä¸Âç¨ÂåºÂä¸ÂçÂÂ对象è¿Âè¡Âæ å°Âï¼Â使å¾Âå¼ÂÃ¥ÂÂè å¯以使ç¨é¢åÂÂ对象çÂÂæ¹å¼Âè¿Âè¡Âæ°æ®åºÂçÂÂå¢Âå æ¹æÂ¥æÂÂä½Âï¼ÂèÂÂæ éÂÂç´æÂ¥ç¼Âå SQL è¯Âå¥ãÂÂ
GORM æÂÂä¾ÂäºÂ许å¤ÂÃ¥ÂÂè½åÂÂç¹æ§ï¼Âå æ¬ï¼Â
- 模åÂÂå®Âä¹Âï¼ÂGORM å Â许å¼ÂÃ¥ÂÂè éÂÂè¿Âå®Âä¹Âç»ÂæÂÂä½Âæ¥表示æ°æ®åºÂ表ï¼Â并å¯以éÂÂè¿Âå¨ç»ÂæÂÂä½Âä¸Âè¿Âè¡Âæ Âè®°ï¼Âtaggingï¼ÂæÂ¥æÂÂå®ÂÃ¥ÂÂ段åÂÂ称ãÂÂæ°æ®类åÂÂãÂÂ约æÂÂæ¡件çÂÂãÂÂ
- æ°æ®åºÂè¿Â移ï¼ÂGORM æ¯æÂÂèªå¨åÂÂæ°æ®åºÂè¿Â移ï¼Âå³根æ®模åÂÂå®Âä¹Âèªå¨çÂÂæÂÂæ°æ®åºÂ表ï¼Â以åÂÂæ ¹æ®模åÂÂçÂÂæ´æ¹èªå¨æ´æ°æ°æ®åºÂ表ç»ÂæÂÂãÂÂ
- CRUD æÂÂä½Âï¼ÂGORM æÂÂä¾ÂäºÂç®ÂÃ¥ÂÂæÂÂç¨ç APIï¼Âå¯以è¿Âè¡Â常è§ÂçÂÂæ°æ®åºÂæÂÂä½Âï¼Âå¦ÂÃ¥ÂÂ建ï¼ÂCreateï¼ÂãÂÂ读åÂÂï¼ÂRetrieve/Queryï¼ÂãÂÂæ´æ°ï¼ÂUpdateï¼ÂãÂÂå é¤ï¼ÂDeleteï¼ÂçÂÂãÂÂ
- æ¥询æÂÂ建å¨ï¼ÂGORM æÂÂä¾ÂäºÂ强大çÂÂæ¥询æÂÂ建å¨ï¼Âå¯以éÂÂè¿Âé¾å¼Âè°Âç¨çÂÂæ¹å¼ÂæÂÂ建å¤ÂæÂÂçÂÂæ¥询è¯Âå¥ï¼Â并æ¯æÂÂæ¡件çÂÂéÂÂãÂÂæÂÂåºÂãÂÂÃ¥ÂÂ页çÂÂÃ¥ÂÂè½ãÂÂ
- å ³èÂÂ堳系ï¼ÂGORM æ¯æÂÂå®Âä¹ÂÃ¥ÂÂå¤ÂçÂÂæ°æ®åºÂ表ä¹Âé´çÂÂå ³èÂÂ堳系ï¼Âå¦Âä¸Â对ä¸ÂãÂÂä¸Â对å¤ÂãÂÂå¤Â对å¤ÂçÂÂ堳系ï¼Âå¨æ¥询æ¶å¯以æ¹便å°è¿Âè¡Âå ³èÂÂæ°æ®çÂÂå 载ãÂÂ
- äºÂå¡æ¯æÂÂï¼ÂGORM æÂÂä¾ÂäºÂäºÂå¡管çÂÂçÂÂÃ¥ÂÂè½ï¼Âå¯以确ä¿Âä¸Âç»Âæ°æ®åºÂæÂÂä½Âè¦Âä¹Âå ¨é¨æÂÂÃ¥ÂÂè¦Âä¹Âå ¨é¨失败ï¼Âä»ÂèÂÂä¿ÂæÂÂæ°æ®çÂÂä¸Âè´æ§ãÂÂ
å¨堶ä»Âè¯Âè¨Âä¸ÂæÂÂ类似çÂÂÃ¥ÂÂå¨åÂÂï¼Â
æ¯çÂÂï¼Âå ¶ä»Âç¼Âç¨Âè¯Âè¨Âä¸Âä¹ÂæÂÂ类似亠GORM ç ORM åºÂï¼Âç¨äºÂç®ÂÃ¥ÂÂæ°æ®åºÂæÂÂä½Âï¼ÂæÂÂé«Âå¼ÂÃ¥ÂÂæÂÂçÂÂãÂÂä¸Âé¢åÂÂ举å ç§Â常è§Âç ORM åºÂï¼Â
- SQLAlchemyï¼ÂPythonï¼Âï¼ÂSQLAlchemy æ¯ Python ä¸ÂçÂÂä¸Â个æµÂè¡Âç ORM åºÂï¼Âæ¯æÂÂå¤Âç§Âæ°æ®åºÂÃ¥ÂÂ端ï¼Âå æ¬ PostgreSQLãÂÂMySQLãÂÂSQLite çÂÂãÂÂå®ÂæÂÂä¾ÂäºÂçµ活çÂÂ对象堳系æ å°ÂÃ¥ÂÂ强大çÂÂæ¥询æÂÂ建åÂÂè½ãÂÂ
- Hibernateï¼ÂJavaï¼Âï¼ÂHibernate æ¯ Java ä¸ÂæÂÂÃ¥ÂÂ欢è¿Âç ORM æ¡Âæ¶ä¹Âä¸Âï¼Âå®ÂæÂÂä¾ÂäºÂå ¨é¢çÂÂæ°æ®åºÂæÂÂä½Â解å³æ¹æ¡ÂãÂÂHibernate æ¯æÂÂÃ¥ÂÂç§Â堳系åÂÂæ°æ®åºÂï¼Â并æÂÂä¾ÂäºÂ丰å¯ÂçÂÂç¹æ§ï¼Âå¦Âæ°æ®ç¼ÂÃ¥ÂÂãÂÂäºÂå¡管çÂÂãÂÂæ¥询è¯Âè¨ÂçÂÂãÂÂ
- Entity Frameworkï¼ÂC#ï¼Âï¼ÂEntity Framework æ¯ C# ä¸ÂçÂÂå®Âæ¹ ORM æ¡Âæ¶ï¼Âå®ÂæÂÂä¾ÂäºÂ对å¤Âç§Âæ°æ®åºÂçÂÂæ¯æÂÂï¼Â妠SQL ServerãÂÂMySQLãÂÂOracle çÂÂãÂÂéÂÂè¿ Entity Frameworkï¼Âå¼ÂÃ¥ÂÂè å¯以使ç¨ LINQ æ¥询è¯Âè¨Âè¿Âè¡Âæ°æ®åºÂæÂÂä½ÂãÂÂ
- Django ORMï¼ÂPythonï¼Âï¼ÂDjango ORM æ¯ Django Web æ¡Âæ¶é»Â认éÂÂæÂÂç ORM 工堷ï¼Âå®ÂæÂÂä¾ÂäºÂ便æ·çÂÂæ°æ®åºÂæÂÂä½Âæ¹å¼Âï¼Â并æ¯æÂÂå¤Âç§Âæ°æ®åºÂÃ¥ÂÂ端ãÂÂDjango ORM å ·æÂÂ渠æ°çÂÂAPI设计åÂÂ强大çÂÂæ¥询åÂÂè½ãÂÂ
- ActiveRecordï¼ÂRubyï¼Âï¼ÂActiveRecord æ¯ Ruby on Rails æ¡Âæ¶ä¸ÂçÂÂé»Â认 ORM å±Âï¼Âå®ÂéÂÂè¿Âå°Âæ°æ®åºÂ表æ å°Âå° Ruby ç±»æÂ¥å®Âç°æ°æ®åºÂæÂÂä½ÂãÂÂActiveRecord æÂÂä¾ÂäºÂ丰å¯ÂçÂÂæ¹æ³ÂÃ¥ÂÂ约å®Âï¼Âç®ÂÃ¥ÂÂäºÂæ°æ®åºÂæÂÂä½ÂçÂÂç¼ÂÃ¥ÂÂãÂÂ
1. å¼Âå ¥ GORM
é¦Âå Âï¼ÂæÂÂ们éÂÂè¦Âå¼Âå ¥ GORM å ï¼Âå¯以éÂÂè¿Â以ä¸Âå½令æÂ¥è·åÂÂï¼Â
go get gorm.io/gorm
go get gorm.io/driver/mysql
å¯è½éÂÂå°çÂÂé®é¢Âï¼Â
- å¨å½令è¡Âè¾ÂÃ¥Â
¥ä¸Âè¿°æÂÂ令@æÂÂ代çÂÂçÂÂæ¬ï¼Â
go get github.com/go-sql-driver/mysql
)å¯è½åºç°ä¸Âè½½ä¸ÂæÂÂÃ¥ÂÂçÂÂæ åÂ括Âè¿Âæ¶åÂÂéÂÂè¦ÂæÂÂ们æ´æ¹Go env
ä¸ÂçÂÂ代çÂÂ设置å¯解å³é®é¢Â
å¨å½令è¡Âä¸Âè¾Âå ¥ï¼Â
go env -w GOPROXY=goproxy.cn,direct
- æÂÂÃ¥ÂÂä¸Âè½½äºÂMySQLæ°æ®åºÂ驱å¨ç¨ÂåºÂï¼Âä½Â导åÂ
¥æ¶æÂÂ示æ¾ä¸Âå°ä¾ÂèµÂÃ¥ÂÂ
Ã¥ÂÂå åÂÂæÂÂ
å¯è½æ¯å 为å 管çÂÂGo Modulesæ¹å¼Â设置éÂÂ误导è´ï¼Âé»Â认æ åµä¸Âï¼Âä¾ÂèµÂå ä¼Âä¸Âè½½å°GOPATH\src\github.com\è·¯å¾Âä¸Âï¼Âå¦ÂæÂÂä¹ÂÃ¥ÂÂ设置äºÂgo env -w GO111MODULE=onï¼ÂÃ¥ÂÂä¼Âä¸Âè½½å°GOPATH\pkg\mod\github.com\è·¯å¾Âä¸Âï¼Â导è´æÂÂä¸Âå°ä¾ÂèµÂå ãÂÂ
解å³åÂÂæ³Âï¼Â
å°Âä¸Â载好çÂÂä¾ÂèµÂå æ·è´Âå°GOPATH\src\è·¯å¾Â丠设置go env -w GO111MODULE=offï¼ÂéÂÂæ°ä¸Âè½½
2. è¿ÂæÂ¥æ°æ®åºÂ
å¨代ç Âä¸Âï¼ÂæÂÂ们é¦Âå ÂéÂÂè¦Âé Âç½®æ°æ®åºÂè¿Âæ¥信æ¯并建ç«Âè¿ÂæÂ¥ãÂÂè¿ÂéÂÂ以 MySQL æ°æ®åºÂ为ä¾Âï¼Â
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main() {
dsn := "user:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println("æ æ³Âè¿ÂæÂ¥å°æ°æ®åºÂ:", err)
return
}
sqlDB, err := db.DB()
defer sqlDB.Close()
// Ã¥ÂÂç»Âæ°æ®åºÂæÂÂä½Â...
}
请根æ®å®ÂéÂÂ
æÂÂ
åµ修æ¹ dsn
Ã¥ÂÂéÂÂä¸ÂçÂÂæ°æ®åºÂè¿Âæ¥信æ¯ï¼ÂÃ¥ÂÂ
捨æ·åÂÂãÂÂå¯Âç ÂãÂÂ主æºå°åÂÂãÂÂ端å£å·åÂÂæ°æ®åºÂÃ¥ÂÂ称çÂÂãÂÂ
dsnæ¯ä»Âä¹Âï¼Â
DSN æ¯ “Data Source Name”ï¼Âæ°æ®æºÂÃ¥ÂÂ称ï¼ÂçÂÂ缩åÂÂï¼Âå®Âæ¯ä¸Âç§Âç¨äºÂæ Âè¯ÂÃ¥ÂÂå®Âä½Âæ°æ®åºÂæÂÂå ¶ä»Âæ°æ®æºÂçÂÂÃ¥ÂÂ符串格å¼ÂãÂÂDSN å å«äºÂè¿ÂæÂ¥æ°æ®åºÂæÂÂéÂÂçÂÂä¿¡æ¯ï¼Âå¦Âæ°æ®åºÂç±»åÂÂãÂÂ主æºåÂÂãÂÂ端å£ãÂÂæ°æ®åºÂÃ¥ÂÂ称ãÂÂ认è¯ÂÃ¥ÂÂæ®çÂÂãÂÂ
ä¸ÂÃ¥ÂÂçÂÂæ°æ®åºÂÃ¥ÂÂåºÂç¨ç¨ÂåºÂå¯è½ä¼Â使ç¨ä¸ÂÃ¥ÂÂç DSN æ ¼å¼ÂãÂÂ以ä¸Âæ¯ä¸ÂäºÂ常è§Âç DSN 示ä¾Âï¼Â
-
MySQL DSN 示ä¾Âï¼Â
mysql://username:password@hostname:port/database
-
PostgreSQL DSN 示ä¾Âï¼Â
postgresql://username:password@hostname:port/database
-
SQL Server DSN 示ä¾Âï¼Â
sqlserver://username:password@hostname:port;database=database
-
SQLite DSN 示ä¾Âï¼Â
sqlite:///path/to/database.db
å¨使ç¨æÂÂ个ç¼Âç¨Âè¯Âè¨ÂæÂÂæ¡Âæ¶è¿ÂæÂ¥æ°æ®åºÂæ¶ï¼ÂéÂÂ常éÂÂè¦ÂæÂÂä¾Âæ£确ç DSN æÂ¥æÂÂå®Âæ°æ®åºÂçÂÂä½Âç½®åÂÂå ¶ä»Âè¿ÂæÂ¥åÂÂæ°ãÂÂå ·ä½Âç DSN æ ¼å¼ÂÃ¥ÂÂè¦Âæ±Âï¼Â请åÂÂèÂÂ对åºÂæ°æ®åºÂæÂÂæ¡Âæ¶çÂÂæÂÂæ¡£æÂÂæÂÂÃ¥ÂÂï¼Â以确ä¿ÂæÂÂä¾Âæ£确çÂÂè¿Âæ¥信æ¯ãÂÂ
3. å®Âä¹Â模åÂÂç»ÂæÂÂ
å¨ GORM ä¸Âï¼Âè¿ÂæÂ¥æÂÂÃ¥ÂÂÃ¥ÂÂï¼ÂæÂÂ们éÂÂè¦Âå®Âä¹Âæ°æ®åºÂ表对åºÂçÂÂ模åÂÂç»ÂæÂÂä½ÂãÂÂ以ç¨æ·表ï¼Âusersï¼Â为ä¾Âï¼Â
type User struct {
ID uint
Name string
Age int
}
ä¸Â述代ç Âå®Âä¹ÂäºÂä¸Â个 User
ç»ÂæÂÂä½Âï¼Âå®ÂÃ¥ÂÂ
å«亠Id
ãÂÂName
ãÂÂAge
ä¸Â个åÂÂ段ï¼ÂÃ¥ÂÂå«表示ç¨æ·çÂÂidï¼Âå§ÂÃ¥ÂÂï¼Âå¹´é¾Âï¼Âå¨è¿ÂéÂÂæÂÂ们éÂÂæÂÂ举ä¾ÂÃ¥ÂÂ个示ä¾Âï¼Â
4. Ã¥ÂÂ建表
å¨è¿ÂæÂ¥å°æ°æ®åºÂÃ¥ÂÂï¼ÂæÂÂ们å¯以使ç¨ GORM æÂÂä¾ÂçÂÂèªå¨è¿Â移åÂÂè½æÂ¥åÂÂ建表ãÂÂåªéÂÂè°Âç¨ AutoMigrate
æ¹æ³Âï¼Â并å°Â模åÂÂä½Â为åÂÂæ°传åÂ
¥å³å¯ï¼Â
db.AutoMigrate(&User{})
ä¸Â述代ç Âå°Âä¼Âå¨æ°æ®åºÂä¸ÂÃ¥ÂÂ建ä¸Â个åÂÂ为 users
çÂÂ表ï¼Â并èªå¨添å 丠User
ç»ÂæÂÂä½Â对åºÂçÂÂÃ¥ÂÂ段ãÂÂ
å½Âç¶ï¼Âä¹Âå¯以å¨èª己åÂÂä¸Â个sqlæ§è¡Âï¼Âæ¯Âå¦Âï¼Â
create TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
age INT
);
5. æ°æ®æÂÂä½Â
æÂ¥ä¸ÂæÂ¥ï¼ÂæÂÂ们å¯以使ç¨ GORM æÂÂä¾ÂçÂÂæ¹æ³ÂæÂ¥è¿Âè¡Âæ°æ®æÂÂä½Âï¼Âä¾Âå¦ÂæÂÂå ¥ãÂÂæ¥询ãÂÂæ´æ°åÂÂå é¤(å¢Âå æ¹æÂÂ¥)çÂÂãÂÂ
æÂÂå ¥æ°æ®
user := User{ Name: "JohnWick", Age: 25, }
db.Create(&user)
ä¸Â述代ç ÂÃ¥ÂÂ建äºÂä¸Â个åÂÂ为 JohnWick
çÂÂç¨æ·ï¼Â并å°ÂÃ¥Â
¶æÂÂÃ¥Â
¥å°æ°æ®åºÂä¸ÂãÂÂ
æ¥询æ°æ®
var users []User
db.Find(&users)
ä¸Â述代ç ÂéÂÂè¿Â使ç¨ Find
æ¹æ³Âæ¥询æ°æ®åºÂä¸ÂçÂÂæÂÂæÂÂç¨æ·ï¼Â并å°Âç»ÂæÂÂÃ¥ÂÂå¨å¨ users
Ã¥ÂÂéÂÂä¸ÂãÂÂ
æ´æ°æ°æ®
var user User
db.First(&user)
user.age = 99
db.Save(&user)
ä¸Â述代ç Âé¦ÂÃ¥Â
Âæ¥询æ°æ®åºÂä¸ÂçÂÂ第ä¸Â个ç¨æ·ï¼Â并å°ÂÃ¥Â
¶å¹´é¾Âä¿®æ¹为 99
ï¼Âç¶åÂÂéÂÂè¿Âè°Âç¨ Save
æ¹æ³Âä¿ÂÃ¥ÂÂæ´æ¹ãÂÂ
æÂÂè ï¼Â
var retrievedUser User
result = db.Model(&retrievedUser).Update("Age", 30)
if result.Error != nil {
panic(result.Error)
}
å é¤æ°æ®
db.Delete(&user)
å¯ç¨ä¸Â述代ç Âå é¤æ°æ®åºÂä¸ÂçÂÂæÂÂå®Âç¨æ·ãÂÂ
é¢Âå¤Âè¯Âï¼ éÂÂç½®æ°æ®åºÂçÂÂèªå¢Â计æ°å¨
å½ÂæÂÂÃ¥ÂÂå®Âä¸Âå¥Â代ç Âè¿Â衠墠æÂÂ¥ æ¹ å æ¶ï¼ÂæÂÂÃ¥ÂÂç°å³使æ°æ®åºÂçÂÂæÂÂÃ¥ÂÂç¶æÂÂæ¯空çÂÂï¼Âä½Âæ¯æ¯Â次æ§è¡Â代ç Âï¼Âidé½ä¼Âèªå¢Â1ï¼ÂæÂÂå°±å¨æ³æÂÂä¹Âè½å¤ÂéÂÂç½®èªå¢Â计æ°å¨ï¼ÂæÂÂÃ¥ÂÂå¾Âåº以ä¸Â代ç Âï¼ÂÃ¥ÂÂ纯çÂÂdeleteæ¯æ æ³Âè¾¾å°ç®çÂÂçÂÂï¼ÂæÂÂ们éÂÂè¦Âalter table
err = db.Transaction(func(tx *gorm.DB) error {
if err := tx.Session(&gorm.Session{AllowGlobalUpdate: true}).Model(&User{}).Delete(&User{}).Error; err != nil {
return err
}
if err := tx.Exec("ALTER TABLE users AUTO_INCREMENT = 1").Error; err != nil {
return err
}
return nil
})
if err != nil {
fmt.Println("éÂÂç½®æ°æ®表æ¶åºéÂÂ:", err)
return
}
fmt.Println("æ°æ®表已æ¸Â
空并èªå¢Â计æ°å¨已éÂÂç½®")
继ç»Âé¢Âå¤Âè¯Â
é®:å¦Âä½Â渠é¤MySQLèªå¢ÂID?
çÂÂ:àMySQLçÂÂèªå¢ÂIDæ¯ä¸Âç§ÂéÂÂ常éÂÂè¦ÂçÂÂç¹æ§ï¼Âàå®Âå¯以èªå¨为æ¯Âæ¡记å½ÂÃ¥ÂÂé Âä¸Â个å¯ä¸ÂàçÂÂID,à以便äºÂå¨æ°æ®åºÂä¸Âè¿Âè¡ÂæÂÂä½ÂãÂÂä½Âæ¯,æÂÂæ¶åÂÂæÂÂ们éÂÂè¦Â渠é¤èªå¢ÂID,æ¯Âå¦Âå¨æµÂè¯Âç¯å¢Âä¸ÂéÂÂç½®æ°æ®æÂÂè å¨çÂÂ产ç¯å¢Âä¸Âå é¤ä¸ÂäºÂè®°å½ÂãÂÂÃÂ
ä¸Âé¢æÂÂ们å°Âä»Âç»Âä¸Âç§Â渠é¤MySQLèªå¢ÂIDçÂÂæ¹æ³ÂãÂÂ
æ¹æ³Âä¸Â:使ç¨TRUNCATEàTABLEè¯ÂÃ¥ÂÂ¥
TRUNCATEàTABLEè¯Âå¯以快éÂÂ渠空-张表çÂÂæÂÂæÂÂæ°æ®,à并éÂÂç½®èªå¢ÂIDãÂÂ使ç¨该è¯Âå¥æ¶éÂÂè¦Â注æÂÂ以ä¸Âå ç¹:
1.àTRUNCATEàTABLEè¯Â询ä¼Âå é¤表ä¸ÂçÂÂæÂÂæÂÂæ°æ®,å æ¤å¡忠å¤Â份æ°æ®ãÂÂ
2.àTRUNCATEàTABLEè¯Âä¸Âæ¯æÂÂWHEREÃ¥ÂÂÃ¥ÂÂ¥,å®Âä¼Âä¸Â次æ§å é¤æ´张表çÂÂæ°æ®ãÂÂ
3.àTRUNCATEàTABLEè¯Âå¥ä¼ÂéÂÂç½®èªå¢ÂIDï¼Âä¸Âä¸Â次æÂÂå ¥æ°æ®æ¶èªå¢ÂIDä¼Âä»Â1å¼Âå§Â计æ°ãÂÂ
ä¸Âé¢æ¯ä¸Â个示ä¾Â:
æ¹æ³ÂäºÂ:使ç¨ALTERàTABLEè¯ÂÃ¥ÂÂ¥
ALTERàTABLEè¯Âå¥å¯以修æ¹表çÂÂç»ÂæÂÂ,å æŒ é¤表ä¸ÂçÂÂÃ¥ÂÂãÂÂæ·»å æ°çÂÂÃ¥ÂÂãÂÂä¿®æ¹åÂÂçÂÂæ°æ®类åÂÂçÂÂãÂÂ使ç¨该è¯Âå¥æ¶éÂÂè¦Â注æÂÂ以ä¸Âå¡ç¹:
1.àALTERàTABLEè¯Âå¥å¯以å é¤表ä¸ÂçÂÂÃ¥ÂÂï¼Âè¿Âæ ·ä¹Âå¯以éÂÂç½®èªå¢ÂIDãÂÂ
2.àALTERàTABLEè¯Âå¥å¯以修æ¹表çÂÂç»ÂæÂÂ,å æ¤请å¡忠å¤Â份æ°æ®ãÂÂ
3.àALTERàTABLEè¯Âå¥ä¼ÂéÂÂç½®èªå¢ÂIDï¼Âä¸Âä¸Â-次æÂÂå ¥æ°æ®æ¶èªå¢ÂIDä¼Âä»Â1å¼Âå§Â计æ°ãÂÂ
ä¸Âé¢æ¯ä¸Â个示ä¾Â:
amename;
æ¹æ³Âä¸Â:使ç¨DELETEè¯ÂÃ¥ÂÂ¥
DELETEè¯Âå¯以å é¤表ä¸ÂçÂÂæ°æ®ï¼Âä½Âæ¯å®Âä¸Âä¼ÂéÂÂç½®èªå¢ÂIDãÂÂ使ç¨该è¯Âå¥æ¶éÂÂè¦Â注æÂÂ以ä¸Âå¡ç¹:
1.àDELETEè¯Âå¥å¯以å é¤表ä¸ÂçÂÂæ°æ®ï¼Âä½Âæ¯ä¸Âä¼Âå é¤表ä¸ÂçÂÂç»ÂæÂÂãÂÂ
2.àDELETEè¯Âå¥ä¸Âä¼ÂéÂÂç½®èªå¢ÂIDï¼Âä¸Âä¸Âà次æÂÂå ¥æ°æ®æ¶èªå¢ÂIDä¼Âä»Âä¸Âä¸Â次çÂÂæÂÂ大å¼å 1å¼Âå§Â计æ°ãÂÂ
6.å ³éÂÂæ°æ®åºÂ
å½ÂæÂÂæÂÂæÂÂä½Âå®ÂæÂÂÃ¥ÂÂï¼ÂæÂÂ们éÂÂè¦Âå ³éÂÂæ°æ®åºÂè¿Âæ¥以éÂÂæ¾èµÂæºÂï¼Â
db.Close()
æÂÂè ï¼Â
db, err := gorm.Open("mysql", "user:password@tcp(localhost:3306)/database")
if err != nil {
// å¤ÂçÂÂè¿ÂæÂ¥éÂÂ误
return err
}
defer db.Close()
// æ§è¡Âæ°æ®åºÂæÂÂä½Â
// ...
使ç¨ defer å ³é®åÂÂå¯以é¿å Âå¿Âè®°å¨éÂÂå½ÂçÂÂä½Âç½®æÂÂå¨堳éÂÂæ°æ®åºÂè¿ÂæÂ¥ï¼ÂæÂÂé«Â代ç ÂçÂÂå¯读æ§åÂÂå¯维æ¤æ§ãÂÂÃ¥ÂÂæ¶ï¼Âè¿Âæ ·çÂÂÃ¥ÂÂæ³Âä¹Âå¯以å¨å½æ°åÂÂçÂÂå¼Â常æ¶ä¿Âè¯Âæ°æ®åºÂè¿ÂæÂ¥çÂÂå ³éÂÂï¼Âä»ÂèÂÂé¿å ÂèµÂæºÂæ³Âæ¼ÂãÂÂ
æ»ä¹Âï¼Â使ç¨ defer å ³éÂÂæ°æ®åºÂè¿ÂæÂ¥æ¯ä¸Â个è¯好çÂÂç¼Âç¨Âä¹ æ¯ï¼Â建议å¨éÂÂå½ÂçÂÂä½Â置使ç¨ defer æ¥确ä¿Âæ°æ®åºÂè¿ÂæÂ¥çÂÂå ³éÂÂãÂÂè¿Âæ ·å¯以æÂÂé«Â代ç ÂçÂÂå¯é æ§åÂÂå¯维æ¤æ§ãÂÂ
ç»Âè¯Â
æ¾ÂÂçÂÂÃ¥ÂÂ
容大æ¦Âå°±æ¯è¿Âä¹ÂäºÂäºÂQWQ
ä»Â
代表个人è§Â解ï¼Âå¦ÂæÂÂ误æÂÂéÂÂæ¼ÂæÂÂæÂÂæ£