6

このnull 外部キーによると、適切な "NOT NULL" 制約をスキーマに追加しない限り、追加するまで許可されます。

しかし、私はいくつかの異なる動作を見ています、

sqlite> PRAGMA Foreign_keys;
1
sqlite> create table proc (
sqlite>   pid integer,
sqlite>   name text,
sqlite>   ppid integer,
sqlite>   foreign key (ppid) references proc (id)
sqlite> );
sqlite> .schema proc
CREATE TABLE proc (
  pid integer,
  name text,
  ppid integer,
  foreign key (ppid) references proc (id)
);

sqlite> insert into proc (pid, name, ppid)
sqlite> values (0, "init", null);
Error: foreign key mismatch

sqlite> PRAGMA Foreign_keys=OFF;
sqlite> PRAGMA Foreign_keys;
0

sqlite> insert into proc (pid, name, ppid)
sqlite> values (0, "init", null);
sqlite> select * from proc;
0|init|

PRAGMAforeign_keys=ONのときにsqliteでnull外部キーを許可するにはどうすればよいですか? またはそれはまったく不可能ですか?

4

2 に答える 2

0
  1. ID 列の名前pidは ではなくidです。
  2. 親キー列にはUNIQUEorPRIMARY KEY制約が必要です。
于 2013-04-30T17:13:51.627 に答える
-1

テーブル作成ステートメントを次のように変更して、外部キー句を追加してみてください。

CREATE TABLE proc (pid integer, name text, ppid integer, foreign key (ppid) references 
proc (id) ON UPDATE CASCADE ON DELETE SET NULL);
于 2015-02-17T20:29:54.560 に答える