MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

既存のMySQLテーブルにFOREIGN KEY制約を追加する方法【ALTER TABLE活用】

すでに作成済みのMySQLテーブルの列に対してFOREIGN KEY(外部キー)制約を追加したい場合は、ALTER TABLEステートメントを使用します。これにより、テーブルを再作成することなく、後から参照整合性を設定することが可能です。

基本構文

FOREIGN KEY制約を追加する際の基本的な構文は以下の通りです。

ALTER TABLE テーブル名 ADD FOREIGN KEY (列名) REFERENCES 参照先テーブル名(主キー列名);

この構文では、制約を追加する対象のテーブルと列を指定し、REFERENCES句で参照先となるテーブルおよびその主キー列を指定します。

具体例

ここでは、「Orders1」という注文テーブルにFOREIGN KEY制約を追加する例を見てみましょう。「Customer」(顧客)テーブルの「Cust_Id」列が主キーとして設定されており、Orders1テーブルの「Cust_id」列からこの主キーを参照させます。

以下のクエリを実行することで、FOREIGN KEY制約を追加できます。

mysql> Alter table orders1 add FOREIGN KEY(Cust_id) REFERENCES Customer(Cust_id);
Query OK, 0 rows affected (0.21 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> Describe ORDERS1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| order_id     | int(11)     | NO   | PRI | NULL    |       |
| Product_name | varchar(25) | YES  |     | NULL    |       |
| orderdate    | date        | YES  |     | NULL    |       |
| Cust_id      | int(11)     | YES  | MUL | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.05 sec)

実行結果のポイント

DESCRIBEコマンドでテーブル構造を確認すると、「Cust_id」列のKey欄がMULと表示されています。これは、その列が外部キーとして機能していることを示しています。

注意点

  • 参照先の列(この例ではCustomer.Cust_Id)は、必ず主キーまたはユニークキーが設定されている必要があります。
  • 既存データの中に、参照先テーブルに存在しない値が含まれている場合、制約の追加はエラーとなります。
  • 使用するストレージエンジンはInnoDBである必要があります。MyISAMでは外部キー制約がサポートされていません。
  1. MySQLの既存テーブルに現在の日付を追加・更新する方法

    既存のテーブルを更新するには UPDATE 文を使用します。そして、現在の日付を設定するには CURDATE() 関数を使います。UPDATE テーブル名 SET カラム名 = CURDATE();サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。mysql> create table DemoTable-> (-> DueDate datetime-> );Query OK, 0 rows affected (0.58 sec)データの挿入次に、INSERT コマンドを使ってテーブルにいくつかのレコードを挿入します。mysql> insert i

  2. MySQLデータベースで外部キーを確認・識別する方法をわかりやすく解説

    はじめに:サンプルテーブルを作成するまずは、外部キーの参照元となる基本テーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable1 (Id int NOT NULL PRIMARY KEY, EmployeeName varchar(100)); Query OK, 0 rows affected (0.50 sec)外部キー制約を持つ2つ目のテーブルを作成する続いて、外部キー制約を設定した2つ目のテーブルを作成します。ここでは DemoTable2 の Id カラムが、DemoTable1 の Id カラムを参照する外部キーとして定義