sql >> データベース >  >> RDS >> Database

SQLに外部キーを追加する方法は?

    SQLで外部キーを追加する方法

    外部キーは、同じテーブルまたは別のテーブルの主キーを参照する属性または属性のセットです(関係)。

    • テーブルの作成に伴う外部キーの作成

    テーブルの作成時でも外部キーを作成できます。

    構文:

    CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));

    例:

    まず、「 employeedb」という名前のデータベースを作成します。 」。次に、そのデータベースに「employee」と「department」の2つのテーブルを作成します。以降のすべての例では、これらのテーブルとデータベースを検討します。

    「employee」テーブルと「department」テーブルをそれぞれ作成しながら、主キーと外部キーを作成します。

    mysql> USE employeedb;
     Database changed
     mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40));
     Query OK, 0 rows affected (0.07 sec)
     mysql> DESC employee;
     +------------+-------------+------+-----+---------+-------+
     | Field      | Type        | Null | Key | Default | Extra |
     +------------+-------------+------+-----+---------+-------+
     | Emp_ID     | int(11)     | NO   | PRI | NULL    |       |
     | Emp_Name   | varchar(40) | YES  |     | NULL    |       |
     | Emp_Salary | varchar(40) | YES  |     | NULL    |       |
     +------------+-------------+------+-----+---------+-------+
     3 rows in set (0.09 sec)
     mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID));
     Query OK, 0 rows affected (0.20 sec)
     mysql> DESC department;
     +-----------+-------------+------+-----+---------+-------+
     | Field     | Type        | Null | Key | Default | Extra |
     +-----------+-------------+------+-----+---------+-------+
     | Dept_ID   | int(11)     | NO   | PRI | NULL    |       |
     | Dept_Name | varchar(40) | YES  |     | NULL    |       |
     | Emp_ID    | int(11)     | NO   | MUL | NULL    |       |
     +-----------+-------------+------+-----+---------+-------+
     3 rows in set (0.02 sec) 

    テーブルの作成時に、「employee」テーブルへの2つの主キー「Emp_ID」、「department」テーブルへの「Dept_ID」、および「department」テーブルへの外部キーとしての「Emp_ID」を作成しました。キーがテーブルに追加されているかどうかを確認するために、DESCコマンドを使用しました。

    • 制約名を使用した外部キ​​ーの作成

    制約名とともにテーブルを作成する場合でも、外部キーを作成できます。この制約名は、テーブル全体を削除せずにテーブルから外部キーを削除するときに役立ちます。

    構文:

    CREATE TABLE tablename(ColumnName1 Datatype(SIZE) PRIMARY KEY, ColumnNameN Datatype(SIZE), CONSTRAINT ConstraintName FOREIGN KEY( ColumnName ) REFERENCES PARENT_TABLE_NAME(Primary_Key_ColumnName));

    例:

    「employee」テーブルと「department」テーブルをそれぞれ作成しながら、主キーと外部キーを作成します。テーブル自体の作成中に、外部キー制約とともに外部キーが作成されます。

     mysql> USE employeedb;
     Database changed
     mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40));
     Query OK, 0 rows affected (0.11 sec)
     mysql> DESC employee;
     +------------+-------------+------+-----+---------+-------+
     | Field      | Type        | Null | Key | Default | Extra |
     +------------+-------------+------+-----+---------+-------+
     | Emp_ID     | int(11)     | NO   | PRI | NULL    |       |
     | Emp_Name   | varchar(40) | YES  |     | NULL    |       |
     | Emp_Salary | varchar(40) | YES  |     | NULL    |       |
     +------------+-------------+------+-----+---------+-------+
     3 rows in set (0.01 sec)
     mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL, CONSTRAINT emp_id_fk FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID));
     Query OK, 0 rows affected (0.25 sec)
     mysql> DESC department;
     +-----------+-------------+------+-----+---------+-------+
     | Field     | Type        | Null | Key | Default | Extra |
     +-----------+-------------+------+-----+---------+-------+
     | Dept_ID   | int(11)     | NO   | PRI | NULL    |       |
     | Dept_Name | varchar(40) | YES  |     | NULL    |       |
     | Emp_ID    | int(11)     | NO   | MUL | NULL    |       |
     +-----------+-------------+------+-----+---------+-------+
     3 rows in set (0.04 sec) 

    テーブルの作成時に、「employee」テーブルへの2つの主キー「Emp_ID」、「department」テーブルへの「Dept_ID」、および「department」テーブルへの外部キーとしての「Emp_ID」を作成しました。ここでは、「emp_id_fk」という名前の外部キー制約も追加しました。キーがテーブルに追加されているかどうかを確認するために、DESCコマンドを使用しました。

    • ALTERコマンドを使用した外部キ​​ーの作成

    テーブル作成後でも外部キーを作成することが可能です。テーブルに外部キーを追加していない場合にテーブルを作成し、その後、既存のテーブルに外部キーを追加する必要がある場合は、ALTERコマンドを使用します。

    構文:

    ALTER TABLE Parent_TableName ADD FOREIGN KEY(ColumnName) REFERENCES Child_TableName(ColumnName);

    例:

    ALTERコマンドを使用して、既存のテーブルに外部キーを追加します。

     mysql> USE employeedb;
     Database changed
     mysql> CREATE TABLE employee(Emp_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Emp_Name VARCHAR(40), Emp_Salary VARCHAR(40));
     Query OK, 0 rows affected (0.16 sec)
     mysql> DESC employee;
     +------------+-------------+------+-----+---------+----------------+
     | Field      | Type        | Null | Key | Default | Extra          |
     +------------+-------------+------+-----+---------+----------------+
     | Emp_ID     | int(11)     | NO   | PRI | NULL    | auto_increment |
     | Emp_Name   | varchar(40) | YES  |     | NULL    |                |
     | Emp_Salary | varchar(40) | YES  |     | NULL    |                |
     +------------+-------------+------+-----+---------+----------------+
     3 rows in set (0.01 sec)
     mysql> CREATE TABLE department(Dept_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Dept_Name VARCHAR(40), Emp_ID INT NOT NULL);
     Query OK, 0 rows affected (0.12 sec)
     mysql> ALTER TABLE department ADD FOREIGN KEY(Emp_ID) REFERENCES employee(Emp_ID);
     Query OK, 0 rows affected (0.23 sec)
     Records: 0  Duplicates: 0  Warnings: 0
     mysql> DESC department;
     +-----------+-------------+------+-----+---------+----------------+
     | Field     | Type        | Null | Key | Default | Extra          |
     +-----------+-------------+------+-----+---------+----------------+
     | Dept_ID   | int(11)     | NO   | PRI | NULL    | auto_increment |
     | Dept_Name | varchar(40) | YES  |     | NULL    |                |
     | Emp_ID    | int(11)     | NO   | MUL | NULL    |                |
     +-----------+-------------+------+-----+---------+----------------+
     3 rows in set (0.01 sec) 

    テーブルの作成中に、「employee」テーブルへの2つの主キー「Emp_ID」と「department」テーブルへの「Dept_ID」を作成しました。次に、ALTERコマンドを使用して、部門テーブルに外部キーとして「Emp_ID」を追加しました。キーがテーブルに追加されているかどうかを確認するために、DESCコマンドを使用しました。


    1. マルチクラウド環境全体でのPostgreSQLセキュリティの標準化

    2. インデックスが範囲外であるため、インデックス2で引数をバインドできません

    3. PostgreSQLとApacheSparkを使用したビッグデータ

    4. MySQLで大文字を小文字に変換する方法