MariaDB[1]简介及环境配置
MariaDB 是关系型[2]数据库MySQL[3]的一个开源分支。
user@Debian:~$ sudo apt install mariadb-server # 安装mariadb-server
user@Debian:~$ sudo mysql_secure_installation # 初始化设置
user@Debian:~$ sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
# 允许远程登录
# bind-address = 127.0.0.1
user@Debian:~$ sudo service mysql start # 开启mysqld服务
user@Debian:~$ mysql
MariaDB [(none)]> grant all privileges on *.* to root@localhost identified by 'password'; -- 赋权
MariaDB [(none)]> flush privileges; # 刷新权限
Golang 连接 MariaDB
user@Debian:~$ mysql -h localhost -u root -p
MariaDB [(none)]> create database GinDB; # 创建数据库
user@Debian:~/GinProject$ go get -v github.com/go-sql-driver/mysql # 下载安装数据库驱动
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql" // 引入数据库驱动。_表示仅执行包中的init()初始化函数
)
type person struct {
ID int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func checkErr(err error) {
if err != nil {
panic(err) // 引起异常
}
}
func main() {
conn := "root:password@tcp(127.0.0.1:3306)/GinDB?charset=utf8mb4" // 数据库链接
db, err := sql.Open("mysql", conn) // 创建数据库连接
checkErr(err)
defer db.Close() // 延迟关闭
createTable(db)
insert(db)
insertData(db)
query(db)
}
func createTable(db *sql.DB) {
_, err := db.Exec(`
CREATE TABLE IF NOT EXISTS person(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(12) NOT NULL,
age INT DEFAULT 1
);`)
checkErr(err)
}
func insert(db *sql.DB) {
_, err := db.Exec("INSERT INTO person(name,age) VALUES(?,?);", "Amy", 18)
checkErr(err)
}
func insertData(db *sql.DB) {
tx, err := db.Begin() // 事务
checkErr(err)
tmpl, err := tx.Prepare("INSERT person SET name=?,age=?;") // 获取模板
checkErr(err)
res, err := tmpl.Exec("Cody", 18) // 填充模板
checkErr(err)
err = tx.Rollback() // 回滚不触发更新,tx.Commit()提交触发更新
checkErr(err)
id, err := res.LastInsertId() // 获取新增数据的自增id
checkErr(err)
fmt.Println(id)
}
func query(db *sql.DB) {
rows, err := db.Query("SELECT id,name,age FROM person WHERE age>=18;")
checkErr(err)
defer rows.Close()
scan:
if rows.Next() {
var p person
err := rows.Scan(&p.ID, &p.Name, &p.Age)
checkErr(err)
fmt.Println(p.ID, p.Name, p.Age)
goto scan // 跳转标签
}
}
Q:
INSERT INTO
…VALUES
和INSERT
…SET
有什么区别?
A:。INSERT INTO
…VALUES
为通用语句。INSERT
…SET
为 MySQL 专属,运行更快。
? Ask More...
MariaDB: https://mariadb.org/
[2]关系型: 以行列形式存储数据。
[3]MySQL: https://www.mysql.com/
- END -