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

MySQLで外部キーチェックを無効にする方法

    MySQLの外部キーチェックにより、外部キーの制約があるテーブルに対してデータベースを更新できない場合があります。このような場合、MySQLで外部キーチェックを一時的に無効にし、更新を行い、後でMySQLで外部キーチェックを有効にすることができます。 MySQLで外部キー制約を無効にする方法は次のとおりです。

    MySQLで外部キーチェックを無効にする方法

    MySQLで外部キーチェックを無効にする手順は次のとおりです。

    システム変数foreign_key_checksを設定することにより、MySQLで外部キーチェックを無効にできます。 0に。

    SET foreign_key_checks = 0

    同様に、システム変数 forum_key_check を設定することにより、MySQLで外部キーチェックを有効にできます。 〜1

    SET foreign_key_checks = 1

    ただし、外部キーチェックを有効にした後、MySQLは外部キーチェックを無効にした後に追加した既存のデータを再検証しないことに注意してください。データベースへの新しい追加/更新のみをチェックします。

    ボーナスリード:MySQLでシーケンスを作成する方法

    例を見てみましょう。次の2つのテーブルがあるとします および都市 都市 外部キー列がありますcountry_id country_idを参照します

    CREATE TABLE countries(
        country_id INT PRIMARY KEY AUTO_INCREMENT,
        country_name VARCHAR(255) NOT NULL
    );

    CREATE TABLE cities(
        city_id INT PRIMARY KEY AUTO_INCREMENT,
        city_name VARCHAR(255),
        country_id INT,
        FOREIGN KEY(country_id) 
    		REFERENCES countries(country_id)
    );

    ボーナスリード:MySQLで2つのテーブルを比較する方法

    それでは、都市に行を挿入してみましょう。 country_idに言及せずにテーブル 外部キー値を指定すると、次のようなエラーが発生します。

    mysql> INSERT INTO cities(city_name, country_id)
           VALUES('NYC',1);
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint
    fails (`sample`.`cities`, CONSTRAINT `cities_ibfk_1` FOREIGN KEY (`country_id`)
     REFERENCES `countries` (`country_id`))
    

    次に、MySQLで外部キーチェックを無効にして、行をもう一度挿入してみましょう。

    mysql> SET foreign_key_checks = 0;
    
    mysql> INSERT INTO cities(city_name, country_id)
           VALUES('NYC',1);
    
    mysql> select * from cities;
    +---------+-----------+------------+
    | city_id | city_name | country_id |
    +---------+-----------+------------+
    |       2 | NYC       |          1 |
    +---------+-----------+------------+
    

    次に、MySQLで外部チェックを有効にします

    mysql> SET foreign_key_checks = 1;
    
    

    ボーナスリード:MySQLで過去1か月のデータを取得する方法

    最後に、対応する行をに挿入します テーブル。

    mysql> INSERT INTO countries(country_id, country_name)
           VALUES(1,'USA');
    
    mysql> select * from countries;
    +------------+--------------+
    | country_id | country_name |
    +------------+--------------+
    |          1 | USA          |
    +------------+--------------+
    

    Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。

    1. SQLiteとデータベースの初期化

    2. timeofday()がPostgreSQLでどのように機能するか

    3. PostgreSQL拡張機能であるpgFincore1.2

    4. SQLServerで現在の日付を取得する方法