Таким образом, я получаю: КодMySql «не может обновить родительскую строку», когда у меня есть «ON UPDATE CASCADE»
Ошибки: 1451. Не удается удалить или обновить родительскую строку: внешний ключ ограничения не удается (
playground
.Person
, скованностьsk_Person_Parent
FOREIGN KEY (parent_id
) СПРАВОЧНЫЙ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
);
, как вы видите, есть «ПО ОБНОВЛЕНИЮ КАСКАД». вставить 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 - Антоном. Когда я удаляю по id 1, все записи удаляются из-за ВКЛЮЧЕНА УДАЛИТЬ КАСКАД. Однако, если я попытаюсь выполнить
UPDATE Person
SET id=10
WHERE id=1;
Я получаю данную ошибку. Есть идеи?
(я ожидал идентификатор Васил, чтобы стать 10, а parent_id из следующих 2 рядов, которые будут обновлены до 10)
Это интересный внешний ключ подход. Проблема заключается в том, что при попытке изменить идентификатор, что обычно не является обычным делом, но, скажем так, это нормально, сначала ** пытается изменить внешний ключ - поскольку id = 10 еще не существует, он терпит неудачу. Просто я не вижу обходного пути, чтобы решить его легко и любопытно, чтобы увидеть, есть ли (за исключением использования временного подхода к таблице). – smozgur
хорошо я читал книгу db, и там была тема об иерархиях, поэтому я хотел поэкспериментировать, и тогда это подошло мне на ум. Не проблема, которая имеет решающее значение для моей работы над проектом, просто интересно. –
ON UPDATE CASCADE выглядит бесполезным в этой структуре. Мне пришлось бы управлять им вручную для сделанных записей. Как я уже сказал, мне действительно интересно узнать, есть ли способ обхода проблемы. – smozgur