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

外部キー参照アクションを変更するにはどうすればよいですか? (行動)

    古い質問ですが、助けを得ることができるように回答を追加します

    その2つのステップのプロセス:

    仮に、table1 外部キーがあります 列名fk_table2_id制約 名前fk_name およびtable2 キーt2を持つ参照テーブル (私の図の以下のようなもの )。

       table1 [ fk_table2_id ] --> table2 [t2]
    

    最初のステップ 、古い制約を削除:(参照

    ALTER TABLE `table1` 
    DROP FOREIGN KEY `fk_name`;  
    

    通知制約は削除され、列は削除されません

    第2ステップ 、新しい制約を追加します:

    ALTER TABLE `table1`  
    ADD CONSTRAINT `fk_name` 
        FOREIGN KEY (`fk_table2_id`) REFERENCES `table2` (`t2`) ON DELETE CASCADE;  
    

    制約を追加すると、列はすでに存在します

    例:

    UserDetailsがあります 表はUsersを参照しています 表:

    mysql> SHOW CREATE TABLE UserDetails;
    :
    :
     `User_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`Detail_id`),
      KEY `FK_User_id` (`User_id`),
      CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`)
    :
    :
    

    最初のステップ:

    mysql> ALTER TABLE `UserDetails` DROP FOREIGN KEY `FK_User_id`;
    Query OK, 1 row affected (0.07 sec)  
    

    2番目のステップ:

    mysql> ALTER TABLE `UserDetails` ADD CONSTRAINT `FK_User_id` 
        -> FOREIGN KEY (`User_id`) REFERENCES `Users` (`User_id`) ON DELETE CASCADE;
    Query OK, 1 row affected (0.02 sec)  
    

    結果:

    mysql> SHOW CREATE TABLE UserDetails;
    :
    :
    `User_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`Detail_id`),
      KEY `FK_User_id` (`User_id`),
      CONSTRAINT `FK_User_id` FOREIGN KEY (`User_id`) REFERENCES 
                                           `Users` (`User_id`) ON DELETE CASCADE
    :
    


    1. Postgresのhave句でselect集計列エイリアスを参照する

    2. MySQLの既存のテーブルに自動インクリメント列を追加する方法

    3. SQLServerからOracleへのデータの繰り返しの移動

    4. 式をデータ型datetimeに変換する算術オーバーフローエラー。 (日時表示中..)