Я не хочу писать рекурсивную функцию php
для ее обработки.MySQL on delete cascade remove parent_id on pk_id remove
У меня есть таблица поиска, которая генерирует список статей и категорий, каждый из которых имеет свой собственный уникальный идентификатор (nav_id
), и если это дочерний элемент, он имеет parent_id
(статьи никогда не используются в качестве родителя).
Так что мои мысли были CASCADE DELETE, которые продолжают работать в нарушении parent_id не могут быть пустыми. Однако именно так я определяю root.
SQL
CREATE TABLE IF NOT EXISTS `navigation` (
`nav_id` INT NOT NULL AUTO_INCREMENT COMMENT '',
`parent_id` INT NULL COMMENT '',
`article_id` INT NULL DEFAULT 0 COMMENT '',
`category_id` INT NULL DEFAULT 0 COMMENT '',
`position` TINYINT NULL COMMENT '',
PRIMARY KEY (`nav_id`, `parent_id`) COMMENT '',
UNIQUE INDEX `nav_id_UNIQUE` (`nav_id` ASC) COMMENT '',
INDEX `rec1_idx` (`parent_id` ASC) COMMENT '',
CONSTRAINT `rec1`
FOREIGN KEY (`parent_id`)
REFERENCES `navigation` (`nav_id`)
ON DELETE CASCADE
ON UPDATE NO ACTION)
ENGINE = InnoDB
Однако ВСТАВИТЬ результат для:
':parent_id' => null
':article_id' => null
':category_id' => 19
':position' => 1
INSERT INTO navigation (
parent_id,article_id,category_id,position
) VALUES (
:parent_id,:article_id,:category_id,:position
)
является
Integrity constraint violation: 1048 Column 'parent_id' cannot be null
Любые идеи приветствуются.
Таблица структурных изменений? Изменение внешнего ключа?
Я также попробовал триггер после и перед удалением, однако вы не можете удалить из той же таблицы, на которой запускается триггер.
Смотрите, если это помогает: HTTP: //stackoverflow.com/questions/441988/mysql-foreign-key-to-allow-null – Maximus2012
Другой: http://stackoverflow.com/questions/150828 74/how-to-pass-a-null-value-to-a-foreign-key-field – Maximus2012
Нет. Либо несколько таблиц, либо у них проблема с первичным ключом. Я даже изменил свой CREATE TABLE SQL DEFAULT parent_id = null и установил его в поле галочки PHPMyAdmin null, то же самое.Хорошо работает, если я удаляю ограничение, но мне нужно, чтобы каскад delete был удален. – Darcey