2017-01-11 25 views
1

SQLiteには、実際には外部キーの名前を取得できないという制限がありますか?彼らの文書のどこにでも述べられているこの制限を見つけることができなかったので私は尋ねています。SQLiteで外部キー制約の名前を取得する方法は?

例えば、私は次のスクリプトを実行します。

CREATE TABLE 
     users (
     id INTEGER NOT NULL PRIMARY KEY, 
     first_name TEXT NOT NULL, 
     last_name TEXT NOT NULL 
) ; 

CREATE TABLE 
     orders (
     id INTEGER NOT NULL PRIMARY KEY,  
     user_id INTEGER NOT NULL,  
     CONSTRAINT fk_users FOREIGN KEY (user_id) REFERENCES users(id) 
) ; 

今、私は、キー「fk_usersが」実際に作成されたことを確認したいと思いますので、私は、次のプラグマを実行します。

PRAGMA foreign_key_list(orders); 

最初の列には私の外部キーの名前が表示されますが、代わりに "0"の値が表示されています。さらに、カスタム名で複数の外部キーを作成すると、それらはすべて「0」または「1」と呼ばれます。

これは本当にSQLiteの制限ですか、何か不足していますか?

答えて

1

制約名を抽出するメカニズムはありません。

0

テーブルsqlite_masterは、 "sql"カラムにCREATEコマンドを格納します。あなたはそのコマンドを問い合わせて、外部キーの名前を抽出するために何らかの構文解析を行うことができます。私の作品を組み合わせ外部キーの例は:

SELECT sql FROM sqlite_master WHERE name = 'song' 

CREATE TABLE "song" (
"songid" INTEGER, 
"songartist" TEXT, 
"songalbum" TEXT, 
"songname" TEXT, 
CONSTRAINT "fk__song_album" FOREIGN KEY ("songartist", "songalbum") REFERENCES "album" ("albumartist", "albumname") 
) 

が得られ、外部キーの名前「fk__song_album」が含まれています。

1は、クエリで外部キーを変更した場合は、SQL列の内容が修正/更新されます。

sqlite_master.sql列内のテキストが作成され、元のCREATE文のテキストのコピーです上記のように正規化され、その後のALTER TABLEステートメントによって変更されます。 UNIQUEまたはPRIMARY KEY制約によって自動的に作成される内部索引の場合、sqlite_master.sqlはNULLです。

https://www.sqlite.org/fileformat2.html

エクストラヒント: Navicatは(ライト)の外部キーの情報を見るために...右の表をクリックして、「デザインのテーブル」を選択します。次に、外部キータブを選択します。

enter image description here

関連する問題