0

テーブルへの最後の挿入Printerでエラーが返されないのはなぜですか? 参照整合性のために拒否されると思いました(望んでいました)。

コード

CREATE TABLE IF NOT EXISTS
Client (
    hostName    TEXT PRIMARY KEY,
    MACAddress  TEXT NOT NULL,
    deviceType  TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS
Printer (
    hostName    TEXT NOT NULL REFERENCES Client(hostName),
    outputType  TEXT NOT NULL,
    printerName TEXT NOT NULL,
    PRIMARY KEY (hostname, outputType),
    FOREIGN KEY (hostName) REFERENCES Client(hostName)
      ON DELETE CASCADE
      ON UPDATE CASCADE
);

insert into Client (hostName, MACAddress, deviceType)
values ('billlaptop.private.ycc', 'bc:ea:c5:13:b3:09','Client');

insert into Printer (hostName, outputType, printerName)
values ('billlaptop.private.ycc', 'Receipt', 'Thermal');

insert into Printer (hostName, outputType, printerName)
values ('xxxx.private.ycc', 'Receipt', 'Thermal');

select * from Printer;

出力

+--------------------------------------------------+
| hostName                outputType   printerName |
+--------------------------------------------------+
| billlaptop.private.ycc  Receipt      Thermal     |
| xxxx.private.ycc        Receipt      Thermal     |
+--------------------------------------------------+
4

2 に答える 2

2

ドキュメントによると、外部キー制約はデフォルトで無効になっています。次のコマンドを使用しPRAGMA foreign_keysて有効にします。

sqlite> PRAGMA foreign_keys = ON;

予想されるエラーをいじります。

于 2013-09-06T18:02:55.833 に答える
1

SQLite3 プラグマ pageによると、SQLite バージョン3.6.19の時点で、外部キー強制のデフォルト設定は OFF です。

声明を出さなければならない

PRAGMA foreign_keys = ON;

チェックを有効にします。

于 2013-09-06T18:02:48.060 に答える