MariaDB简介

2022-05-07 00:00:00 数据库 专区 订阅 初始化 触发


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...

[1]

MariaDB: https://mariadb.org/

[2]

关系型: 以行列形式存储数据。

[3]

MySQL: https://www.mysql.com/

- END -

相关文章