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

MySQL外部キーエラー1005errno150外部キーとしての主キー

    外部キー制約を作成する場合、MySQLは参照テーブルと参照テーブルの両方で使用可能なインデックスを必要とします。参照テーブルのインデックスは、存在しない場合は自動的に作成されますが、参照テーブルのインデックスは手動で作成する必要があります(ソース )。あなたのものが欠けているようです。

    テストケース:

    CREATE TABLE tbl_a (
        id int PRIMARY KEY,
        some_other_id int,
        value int
    ) ENGINE=INNODB;
    Query OK, 0 rows affected (0.10 sec)
    
    CREATE TABLE tbl_b (
        id int PRIMARY KEY,
        a_id int,
        FOREIGN KEY (a_id) REFERENCES tbl_a (some_other_id)
    ) ENGINE=INNODB;
    ERROR 1005 (HY000): Can't create table 'e.tbl_b' (errno: 150)
    

    ただし、some_other_idにインデックスを追加すると :

    CREATE INDEX ix_some_id ON tbl_a (some_other_id);
    Query OK, 0 rows affected (0.11 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    CREATE TABLE tbl_b (
        id int PRIMARY KEY,
        a_id int,
        FOREIGN KEY (a_id) REFERENCES tbl_a (some_other_id)
    ) ENGINE=INNODB;
    Query OK, 0 rows affected (0.06 sec)
    

    参照されるフィールドは参照されるテーブルの主キーであることが多く、主キーは自動的にインデックス付けされるため、これはほとんどの状況で問題にならないことがよくあります。



    1. グループ化前のMySQLの注文

    2. MySQLのデータベースクエリ効率の最大化-パート2-

    3. PGError:エラー:オブジェクトとそのhas_manyオブジェクトのARクエリのWHERE句で集計は許可されていません

    4. ListViewコントロールのドラッグドロップソートイベント