MySQL Clé Étrangère Sur Supprimer
Je suis à essayer de comprendre les relations et les options de suppression.
J'ai deux tables, User
et UserStaff
, avec un 1:n relation de User
à UserStaff
(un utilisateur peut avoir plusieurs membres du personnel).
Quand mon User
est supprimé, je veux supprimer tous les UserStaff
les tableaux associés à ce User
. Quand mon UserStaff
est supprimé, je ne veux rien pour arriver à User
. Je comprends que c'est une relation en cascade, mais je ne suis pas sûr de la façon.
c'est à dire Dois-je sélectionner la clé étrangère dans mon UserStaff
table et en cascade, ou puis-je créer une nouvelle clé étrangère dans User
et définir à la cascade?
- Je suppose que vous vouliez dire "supprimer tous les UserStaff entrées", pas "supprimer tous les UserStaff tables"
Vous devez vous connecter pour publier un commentaire.
Oui, c'est possible. Vous devez en faire la FK dans UserStaff table. De cette façon:
De L'Utilisateur Table
UserStaff Table
UserStaff
tableau "cascade" alors, je l'ai!De Wikipédia:
Ici,
User
est le maître de la table, etUserStaff
est la table enfant. Donc, oui, vous aurez envie de créer la clé étrangère dansUserStaff
, avecON DELETE CASCADE
L'on DELETE CASCADE est spécifié sur la clé étrangère dans la
UserStaff
table. Pour plus d'infos sur les clés étrangères de la Documentation de MySQL a un certain nombre d'exemples. LeUser
la table n'a pas de clé étrangère pointant versUserStaff
, de sorte qu'il ne sera pas affectée par les modifications apportées à laUserStaff
table.Il a été un moment depuis que j'ai utilisé, mais ici va (btw, j'utilise Toad for MySql - une excellente IDE, et c'est gratuit trop - http://www.toadworld.com/Freeware/ToadforMySQLFreeware/tabid/561/Default.aspx!)
Vous avez besoin d'ajouter une Contrainte pour l'Utilisateur de la table. Si vous avez une colonne d'id (et les correspondants à l'étranger userid clé dans UserStaff) puis le SouceColumn doit être l'id de la table de destination UserStaff et la colonne de destination identifiant. Vous pouvez ensuite définir la OnDelete action 'Cascade'
Les autres options sont assez explicites - de Restreindre les valeurs limites pour les valeurs dans la colonne source, Set Null définit la clé étrangère de matches Nuls et Aucune Action n', er, rien.
Ce genre de choses est très facile à faire via le Crapaud de l'IDE. J'ai utilisé la commande MySqlAdmin outils pour les âges, mais récemment découvert Crapaud (et il a diff et comparer les outils de trop!).
La façon la plus simple pourrait être de faire deux rapide des tables et de l'essayer. Mais puisque vous n'avez pas, je peux vous dire que le résultat sera qu'il fonctionne de la manière que vous voulez.
Lorsque vous avez une table
User
et une tableUserStaff
ont un champ dansUserStaff
utilise une clé étrangère pour faire référence à un champ dansUser
; alors si vous supprimez un enregistrement deUserStaff
qui sera supprimé sans avoir aucun effet sur lesUser
table. L'autre manière autour de vous supprimer tous les dossiers liés à cet enregistrement.Version courte: Un champ dans
UserStaff
doit faire référence à un champ dansUser
avec CASCADE