0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Goで学ぶコンピューターサイエンスAdvent Calendar 2024

Day 15

【Goで学ぶコンピューターサイエンス】データベースの基礎

Posted at

データベースの基本的な用語

テーブル

  • データを行と列で整理した、表形式のもの
ID 名前 年齢 メールアドレス
1 田中太郎 30 taro@example.com
2 鈴木花子 25 hanako@example.com

レコード

  • テーブルの1行にあたるデータ

フィールド

  • テーブルの列にあたる項目

主キー(Primary key)

  • レコードを一意に識別するためのフィールド
  • 重複が許されない
  • 上記テーブルの「ID」フィールド

データベースの種類

リレーショナルデータベース(RDB)

  • データをテーブル(表)の形式で管理
  • 関係(リレーション)を使ってデータを関連付けられる
  • SQLで操作する
  • MySQL、PostgreSQL、SQLiteなど

非リレーショナルデータベース(NoSQL)

  • データを表形式以外の方法で管理
  • 柔軟でスケーラビリティが高い
  • ドキュメント形式やキーバリュー形式でデータを保存
  • MongoDB(ドキュメント型)、Redis(キーバリュー型)

インメモリデータベース

  • データをメモリ上に保存し、高速な読み書きを実現
  • Redis、Memcached

SQL

※サンプルはMySQLの例です。

DDL

新しいテーブルの作成

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT,
    email VARCHAR(255) UNIQUE
);

テーブルの変更

ALTER TABLE users ADD COLUMN phone_number VARCHAR(15);

テーブルの削除

DROP TABLE users;

テーブルのデータを全削除(テーブル構造は維持)

TRUNCATE TABLE users;

データベースの作成

CREATE DATABASE sample_db;

データベースの削除

DROP DATABASE sample_db;

DML

データの追加

INSERT INTO users (id, name, age, email) VALUES (1, '田中太郎', 30, 'taro@example.com');

データの取得

SELECT * FROM users WHERE age > 25;

データの更新

UPDATE users SET age = 31 WHERE id = 1;

データの削除

DELETE FROM users WHERE id = 1;

DCL

ユーザーに権限を付与

GRANT SELECT, INSERT ON users TO 'example_user'@'localhost';

ユーザーの権限を取り消し

REVOKE INSERT ON users FROM 'example_user'@'localhost';

ユーザーの作成

CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'password';

ユーザーの削除

DROP USER 'example_user'@'localhost';

データベース設計の基本

正規化

  • データの重複を排除し、構造を整理するプロセス
  • 複数のテーブルに存在する共通項目を別テーブルに分離して共通化する

インデックス

  • 検索速度を向上させるための仕組み
  • 本の「索引」と同じような役割

Goサンプルコード

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/mattn/go-sqlite3" // SQLite用ドライバ
)

func main() {
	// データベースに接続
	db, err := sql.Open("sqlite3", "./example.db")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// テーブルの作成
	createTable := `
	CREATE TABLE IF NOT EXISTS users (
		id INTEGER PRIMARY KEY AUTOINCREMENT,
		name TEXT NOT NULL,
		age INTEGER,
		email TEXT UNIQUE
	);
	`
	_, err = db.Exec(createTable)
	if err != nil {
		log.Fatal(err)
	}

	// データの挿入
	insert := `INSERT INTO users (name, age, email) VALUES (?, ?, ?);`
	_, err = db.Exec(insert, "田中太郎", 30, "taro@example.com")
	if err != nil {
		log.Fatal(err)
	}

	// データの取得
	rows, err := db.Query(`SELECT id, name, age, email FROM users;`)
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	for rows.Next() {
		user := struct {
			ID    int
			Name  string
			Age   int
			Email string
		}{}
		rows.Scan(&user.ID, &user.Name, &user.Age, &user.Email)
		fmt.Printf("ID: %d, Name: %s, Age: %d, Email: %s\n", user.ID, user.Name, user.Age, user.Email)
	}
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?