既存の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では外部キー制約がサポートされていません。
-
MySQLの既存テーブルに現在の日付を追加・更新する方法
既存のテーブルを更新するには UPDATE 文を使用します。そして、現在の日付を設定するには CURDATE() 関数を使います。UPDATE テーブル名 SET カラム名 = CURDATE();サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。mysql> create table DemoTable-> (-> DueDate datetime-> );Query OK, 0 rows affected (0.58 sec)データの挿入次に、INSERT コマンドを使ってテーブルにいくつかのレコードを挿入します。mysql> insert i
-
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 カラムを参照する外部キーとして定義