在Go语言中,操作SQL数据库,通常会用到一些第三方库来简化数据库的连接、查询和操作过程。其中原生的 database/sql
+ go-sql-driver/mysql 库更符合sql语句使用习惯。
安装
go get github.com/go-sql-driver/mysql
直接上代码来演示基本的创建,插入,更新,删除操作。
package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)type Staff struct {id intage intname stringemail stringcreate_at string
}func main() {db, err := sql.Open("mysql", "zy:123456@tcp(localhost:3306)/company")if err != nil {panic(err)}defer db.Close()/* create table */createTableQuery := `CREATE TABLE IF NOT EXISTS department (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,email VARCHAR(100) NOT NULL,age INT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)`_, err = db.Exec(createTableQuery)if err != nil {panic(err)} else {fmt.Println("Table created successfully")}/* insert data */insertCmd := `INSERT INTO department (name, email, age) VALUES ("xiaoming", "xiaoming@email.com", 25)`if result, err := db.Exec(insertCmd); err != nil {panic(err)} else {if id, err := result.LastInsertId(); err != nil {panic(err)} else {fmt.Printf("insert id %d\n", id)}}/* query data */queryCmd := `SELECT * FROM department`rows, err := db.Query(queryCmd)if err != nil {panic(err)}defer rows.Close()for rows.Next() {var person Staffrows.Scan(&person.id, &person.name, &person.email, &person.age, &person.create_at)fmt.Printf("%v\n", person)}/* update data */updateCmd := `UPDATE department set age = 30 WHERE name = "xiaoming"`result, err := db.Exec(updateCmd)if err != nil {panic(err)} else {if affectId, err := result.RowsAffected(); err != nil {panic(err)} else {fmt.Printf("update success, rows count %d\n", affectId)}}/* delete */deleteCmd := `DELETE FROM department WHERE name = "xiaoming"`result, err = db.Exec(deleteCmd)if err != nil {panic(err)} else {if affectId, err := result.RowsAffected(); err != nil {panic(err)} else {fmt.Printf("delete success, rows count %d\n", affectId)}}
}