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

データベースで循環参照を使用できますか?

    都市と州を考えてみましょう。各都市は州内に存在します。各州には首都があります。

    CREATE TABLE city (
      city  VARCHAR(32),
      state VARCHAR(32) NOT NULL,
      PRIMARY KEY (city),
      FOREIGN KEY (state) REFERENCES state (state)
    );
    
    CREATE TABLE state (
      state VARCHAR(32),
      capital_city VARCHAR(32),
      PRIMARY KEY (state),
      FOREIGN KEY (capital_city) REFERENCES city (city)
    );
    

    最初の問題-外部キーは(まだ)存在しないテーブルの列を参照できないため、これらのテーブルを図のように作成することはできません。解決策は、外部キーなしでそれらを作成し、後で外部キーを追加することです。

    2番目の問題-各挿入には他のテーブルの既存の行が必要になるため、どちらのテーブルにも行を挿入できません。解決策は、外部キー列の1つをNULLに設定し、そのデータを2つのフェーズで挿入することです。例:

    --Create state record
    INSERT INTO state (state, capital_city) VALUES ('Florida', NULL);
    
    --Create various city records
    INSERT INTO city (city, state) VALUES ('Miami', 'Florida');
    INSERT INTO city (city, state) VALUES ('Tallahassee', 'Florida');
    INSERT INTO city (city, state) VALUES ('Orlando', 'Florida');
    
    --Set one of the cities as the capital
    UPDATE state SET capital_city = 'Tallahassee' WHERE state = 'Florida';
    


    1. mysqlblobに保存されている画像を表示する

    2. SQLServerの文字列から日付への変換

    3. MySQLで秒を時間値に変更する方法

    4. 「ユーザーpostgresのパスワード認証に失敗しました」