J'ai une table qui contient des catégories imbriquées. Je veux éviter les noms en double sur les éléments de même niveau (c'est-à-dire, les catégories avec le même parent). Je suis venu avec ceci:Contrainte unique avec colonne nullable
CREATE TABLE `category` (
`category_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`category_name` varchar(100) NOT NULL,
`parent_id` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`category_id`),
UNIQUE KEY `category_name_UNIQUE` (`category_name`,`parent_id`),
KEY `fk_category_category1` (`parent_id`,`category_id`),
CONSTRAINT `fk_category_category1` FOREIGN KEY (`parent_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
Serve, category_name_UNIQUE
n'impose pas ma règle pour les catégories de niveau racine (ceux où parent_id
est NULL). Y a-t-il une solution de contournement raisonnable?
Non 'ON DELETE SET DEFAULT' dans MySQL, j'ai peur :( –
Ah, en effet ... reconnu par l'analyseur, mais rejeté:" SET DEFAULT: Cette action est reconnue par l'analyseur, mais InnoDB rejette la table définitions contenant les clauses ON DELETE SET DEFAULT ou ON UPDATE SET DEFAULT. "Eh bien, vous pouvez implémenter la cascade dans les triggers – Unreason
Les triggers dans MySQL ne sont pas autorisés à modifier d'autres lignes de la table affectée –