MySQLで複合キーを試す

やる気がでないときは何でもいいから書く!

開発環境

# ホスト
> docker --version
Docker version 20.10.8, build 3967b7d

> docker-compose --version
docker-compose version 1.29.2, build 5becea4c

# コンテナ
root@{CONTAINER_ID}:/# mysql --version
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

複合キー とは

2つ以上の列で構成される主キーを複合キー(compound key)と呼びます。
O'Reilly Japan - 初めてのSQL 第3版

複合キーで調べると出席番号を例として挙げている記事が多くヒットした。
出席番号を絡めた複合キー有りのテーブルを試す。

テーブル作成

CREATE TABLE student
(
    `id` INT(2) NOT NULL,
    `sex` INT(1) NOT NULL,
    `name` VARCHAR(30) NOT NULL,
    PRIMARY KEY(`id`, `sex`)
);

id(出席番号)とsex(性別)を主キーに設定した。

レコード追加

INSERT INTO student VALUES (1, 0, "Uguisudani Bob");
INSERT INTO student VALUES (1, 1, "Ueno Mary");
INSERT INTO student VALUES (2, 0, "Okachimachi Bob");
INSERT INTO student VALUES (2, 1, "Osaki Mary");
INSERT INTO student VALUES (3, 0, "Kanda Bob");
INSERT INTO student VALUES (3, 1, "Tokyo Mary");

中身確認

mysql> SELECT * FROM student;
+----+-----+-----------------+
| id | sex | name            |
+----+-----+-----------------+
|  1 |   0 | Uguisudani Bob  |
|  1 |   1 | Ueno Mary       |
|  2 |   0 | Okachimachi Bob |
|  2 |   1 | Osaki Mary      |
|  3 |   0 | Kanda Bob       |
|  3 |   1 | Tokyo Mary      |
+----+-----+-----------------+

テーブル作成文の確認

mysql> SHOW CREATE TABLE student\G
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int NOT NULL,
  `sex` int NOT NULL,
  `name` varchar(30) NOT NULL,
  PRIMARY KEY (`id`,`sex`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

id(出席番号)とsex(性別)が主キーに設定されていることを確認。

参考