HeidiSQLでSQLを実行する

次に、Go LangでWebAPIを作成するために、まずはDockerでMySQLを構築するで作ったMySQLにデータベースを作成する。HeidiSQLから作成しようとするが、

SQL 0A80E90FC (1044): Access denied for user 'your_username'@'%' to database 'project'uery

という権限エラーが出るようになった。

version: '3'
services:
  mysql:
    image: mysql:latest
    container_name: project
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: project
      MYSQL_USER: username
      MYSQL_PASSWORD: password
    ports:
      , "3306:3306"
    volumes:
      - ./data:/var/lib/mysql

に変更したらできた。ちょっと理由はわからない。

で、projectというデータベースでSQLを実行する。

CREATE TABLE sample (
  id INT AUTO_INCREMENT PRIMARY KEY,
  firstName VARCHAR(255),
  lastName VARCHAR(255),
  isActive BOOLEAN DEFAULT TRUE
);

これでSampleのテーブルを作成することが出来た。

GoLangでテーブルを作成する

次にGORMをインストールする。

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

を実行すると、

require (
	github.com/jinzhu/inflection v1.0.0 // indirect
	github.com/jinzhu/now v1.1.5 // indirect
	github.com/mattn/go-sqlite3 v1.14.18 // indirect
	gorm.io/driver/sqlite v1.5.4 // indirect
	gorm.io/gorm v1.25.5 // indirect
)

更新された。

上のふたつは謎だけど、それっぽいのは入ってきた。

よく考えたらMySQLを使用するので、

go get -u gorm.io/driver/mysql

だった。

ちなみに不要パッケージの削除方法はわからなかった。(要調査)

main.goに下記をコピペ。


package main

import (
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

type User struct {
	// gorm.Modelをつけると、idとCreatedAtとUpdatedAtとDeletedAtが作られる
	gorm.Model

	Name     string
	Age      int
	IsActive bool
}

func main() {
	// dbを作成します
	db := dbInit()

	// dbをmigrateします
	db.AutoMigrate(&User{})
}

func dbInit() *gorm.DB {
	dsn := "root:password@tcp(127.0.0.1:3306)/project?charset=utf8mb4&parseTime=true"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}
	return db
}

これで実行すると

$ go run src/main.go

2023/11/28 17:51:13 C:/01_myPROJECT/project-Backend/src/main.go:22 SLOW SQL >= 200ms
[282.042ms] [rows:0] CREATE TABLE `users` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(                    (3) NULL,`name` longtext,`age` bigint,`is_active` boolean,PRIMARY KEY (`id`),INDEX `idx_users_deleted_at` (`deleted_at`))

作成したDBusersテーブルが作成された。

これで接続が確認できた。