- 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」軍曹を参考にさせていただきました。
|
|