データベース - SQL 基本構文 - テーブル作成・削除・変更 - キーを他テーブルのキーに


クラウディア 


1. 概要
2. MySQL
8. 参考サイト

1. 概要

 表題に説明が必要です。  命題は、「あるテーブルのプライマリキーを他のテーブルのプライマリキーと同一にするには?」ということです。

2. MySQL

 「MySQL」で実現する方法です。

CREATE TABLE table_a (
  id INT NOT NULL,
  data_a VARCHAR(100),
  PRIMARY KEY (id)
) ENGINE=InnoDB;

CREATE TABLE table_b (
  id INT NOT NULL,
  data_b VARCHAR(100),
  PRIMARY KEY (id),
  CONSTRAINT fk_table_b_id
    FOREIGN KEY (id)
    REFERENCES table_a(id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE=InnoDB;
 これで、「table_b」のプライマリキーは、「table_a」のプライマリキーと同一になります。  ここで、「ENGINE=InnoDB」というのが必須なようです。  参考サイトによれば、「MySQL では、外部キー制約(FOREIGN KEY)を実際に検証・強制するのは InnoDB のみです」とのことです。  「MySQL」で、「InnoDB」が有効かどうか見るには。

mysql -u root -p
 で、「mysql」を起動して。

SHOW ENGINES;
 ずらずらと表が出力されますが、「InnoDB」の行を見ます。

+------------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine           | Support | Comment                                                    | Transactions | XA   | Savepoints |
+------------------+---------+------------------------------------------------------------+--------------+------+------------+
| InnoDB           | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
 「Support」の箇所は、次の意味を持つようです。
Support 意味 備考
YES 使用可能(有効)
DEFAULT 使用可能 + デフォルト
NO 無効
DISABLED 無効(起動オプション等で禁止)

 なので、上記の例は、無効です。
 わたしの使用している、「MySQL 8.4.7」で。


/usr/local/etc/mysql/my.cnf
 の設定で、「innodb」と書いてある行を軒並みコメントアウトしたりしているので、ものすごく不安だったのですが。  すべてコメントアウトしていても、デフォルトのままでした。

8. 参考サイト

 本ページは、「ChatGPT」軍曹を参考にさせていただきました。

EaseUS
AbemaTV 無料体験