Mysql DELETE CASCADE
Résolu
developper55
Messages postés
123
Date d'inscription
Statut
Membre
Dernière intervention
-
pseudo -
pseudo -
Bonjour,
j'ai deux tables : users et upload , dont la deuxieme peut contenir un ou plusieurs lignes (fichier) d'un utilisateurs de la table 'users'
j'ai utilisé https://dev.mysql.com/doc/refman/8.0/en/innodb-foreign-key-constraints.html pour créer le Forgein Key ,
mais si vous regardez ci-dessous la différence de la table upload avant et après la création
mon souci est que:
ex: DELETE FROM users WHERE index_users='10'
elle supprime seulement la ligne qui correspond à cet index dans la table "users" et le contenu de la table upload reste
Que pensez vous ?
j'utilise : phpMyAdmin SQL Dump version 2.9.1.1
Merci
------- table users
CREATE TABLE `users` (
`index_users` int(8) NOT NULL auto_increment,
`nom` varchar(32) default NULL,
`prenom` varchar(32) default NULL,
`username` varchar(30) default NULL,
`password` varchar(32) default NULL,
PRIMARY KEY (`index_users`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=524 ;
---------- table upload lors de la création
CREATE TABLE `upload` (
`index_upload` int(11) NOT NULL auto_increment,
`index_users` int(11) default NULL,
`name` longtext NOT NULL,
`file` mediumblob NOT NULL,
PRIMARY KEY (`index_upload`),
FOREIGN KEY (index_users) REFERENCES users(index_users)
ON DELETE CASCADE
}
---------- table upload après le dump de la base
CREATE TABLE `upload` (
`index_upload` int(11) NOT NULL auto_increment,
`index_users` int(11) default NULL,
`name` longtext NOT NULL,
`file` mediumblob NOT NULL,
PRIMARY KEY (`index_upload`),
KEY `index_users` (`index_users`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;
j'ai deux tables : users et upload , dont la deuxieme peut contenir un ou plusieurs lignes (fichier) d'un utilisateurs de la table 'users'
j'ai utilisé https://dev.mysql.com/doc/refman/8.0/en/innodb-foreign-key-constraints.html pour créer le Forgein Key ,
mais si vous regardez ci-dessous la différence de la table upload avant et après la création
mon souci est que:
ex: DELETE FROM users WHERE index_users='10'
elle supprime seulement la ligne qui correspond à cet index dans la table "users" et le contenu de la table upload reste
Que pensez vous ?
j'utilise : phpMyAdmin SQL Dump version 2.9.1.1
Merci
------- table users
CREATE TABLE `users` (
`index_users` int(8) NOT NULL auto_increment,
`nom` varchar(32) default NULL,
`prenom` varchar(32) default NULL,
`username` varchar(30) default NULL,
`password` varchar(32) default NULL,
PRIMARY KEY (`index_users`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=524 ;
---------- table upload lors de la création
CREATE TABLE `upload` (
`index_upload` int(11) NOT NULL auto_increment,
`index_users` int(11) default NULL,
`name` longtext NOT NULL,
`file` mediumblob NOT NULL,
PRIMARY KEY (`index_upload`),
FOREIGN KEY (index_users) REFERENCES users(index_users)
ON DELETE CASCADE
}
---------- table upload après le dump de la base
CREATE TABLE `upload` (
`index_upload` int(11) NOT NULL auto_increment,
`index_users` int(11) default NULL,
`name` longtext NOT NULL,
`file` mediumblob NOT NULL,
PRIMARY KEY (`index_upload`),
KEY `index_users` (`index_users`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;
A voir également:
- Mysql on delete cascade
- Hiberfil.sys delete - Guide
- Liste déroulante en cascade - Guide
- Just delete me - Guide
- Mysql community server - Télécharger - Bases de données
- Delete boot option - Forum BIOS
5 réponses
Je pense que tu ne liras jamais cette réponse mais pour d'autres éventuellement. Il faut spécifier engine = innodb si tu veux que ta FK soit effective (MyISAM ne gère pas les FK...). D'autres part un delete ne peut agir que sur une seule table à ma connaissance. C'est le CASCADE qui se charge de supprimer les lignes filles.