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

既存のMYSQLデータベースでALTERTABLEを使用して外部キーを追加する際の問題-追加できません!ヘルプ!

    両方のテーブルはInnoDBタイプですか?

    companyテーブルにはcompany_idのインデックスがありますか?

    テーブルはMyISAM(構成を変更していない場合のデフォルト)であり、MyISAMで外部キー制約を作成することはできないと思います。 2つのテーブルのCREATETABLEの説明を参照してください。

    両方のテーブルが空の場合は、それらを削除して再作成し、エンジンとしてInnoDBを選択します。テーブル作成スクリプトにFOREIGNKEY制約を追加することもできます。

    MySQLからリファレンスマニュアル :

    @egervari:これを実行するとどうなりますか:

    CREATE TABLE `test` (
      `company_id` bigint(20) NOT NULL,
      `module_id` bigint(20) NOT NULL,
    
      KEY  (`module_id`),
      KEY  (`company_id`),
    
      CONSTRAINT `test_fk_module`
        FOREIGN KEY (`module_id`)
        REFERENCES `module` (`module_id`),
    
      CONSTRAINT `test_fk_company`
        FOREIGN KEY (`company_id`)
        REFERENCES `company` (`company_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT
    
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
    

    そして、実行した場合:

    ALTER TABLE `company_to_module`
      ADD CONSTRAINT `company_to_module_fk_company` 
        FOREIGN KEY (`company_id`)
        REFERENCES `company` (`company_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT;
    


    1. PostgreSQLクエリは制限1で非常に遅い

    2. mysqlのUTCでの日付

    3. INSERT COMMAND ::エラー:列の値が存在しません

    4. Ruby on Rails3OSXのソケット'/tmp/mysql.sock'を介してローカルMySQLサーバーに接続できません