0

だから、私は得ています:

エラー コード: 1451。親行を削除または更新できません: 外部キー制約が失敗しました ( playground. Person, CONSTRAINT sk_Person_Parent FOREIGN KEY ( parent_id) REFERENCES Person( id) ON DELETE CASCADE ON UPDATE CASCADE)

これは、それ自体を参照する単純なテーブルです。

CREATE TABLE IF NOT EXISTS Person (
id int not null primary key,
name varchar(100) not null,
parent_id int null,
CONSTRAINT `sk_Person_Parent`
  FOREIGN KEY (parent_id)
  REFERENCES Person (id)
  ON DELETE CASCADE
  ON UPDATE CASCADE
);

ご覧のとおり、「ON UPDATE CASCADE」があります。4 つの単純な行を挿入します。

INSERT INTO Person(id, name, parent_id)
VALUES
(1, 'vasko', NULL), 
(2, 'asdas', 1), 
(3, 'ivo', 1), 
(4, 'anton', 3);

だから私は1 - vasko 2 - asdasd 3 - ivo 4 - antonを持っています。ID 1 で削除すると、ON DELETE CASCADE のため、すべてのレコードが消去されます。ただし、実行しようとすると

UPDATE Person
SET id=10
WHERE id=1;

指定されたエラーが発生します。何か案は?

(vasil の id が 10 になり、次の 2 行の parent_id が 10 に更新されることを期待しています)

4

1 に答える 1

2

これはMysqlの制限です:

ON UPDATE CASCADE または ON UPDATE SET NULL が、カスケード中に以前に更新した同じテーブルを再帰的に更新する場合、RESTRICT のように動作します。これは、自己参照の ON UPDATE CASCADE または ON UPDATE SET NULL 操作を使用できないことを意味します。

ここを参照

于 2016-02-07T15:46:40.437 に答える