8
votes

Faire une rangée inactive dans mysql

est-il possible de faire une ligne dans MySQL inactive? Donc, cette ligne n'est plus utilisée dans les résultats des requêtes? Mon client souhaite que les membres supprimés existent dans la base de données, mais je ne veux pas modifier toutes les questions pour vérifier si le membre est supprimé ou non.

ou y a-t-il un moyen facile de déplacer toutes les données de la ligne en une autre table "inactive"?


0 commentaires

4 Réponses :


6
votes

Ce que vous décrivez est généralement appelé un Soft Supprimer .

Les rangées en mouvement entre différentes tables sont rarement une bonne idée dans des bases de données relationnelles. En général, vous ne devriez pas déplacer des enregistrements sur simplement parce que certains attributs à leur sujet ont changé (et "inactivité" est juste un attribut dans ce cas).

J'ajouterais un champ inactif dans la table, réglez-le sur 0 si la ligne est active et à 1 si inactif. Cependant, vous devriez filtrer des lignes inactives de toutes vos questions en ajoutant où inactive = 0 dans votre clauses. Une alternative à ce sujet serait d'utiliser une vue, comme @brian suggéré dans l'autre réponse , que je recommande.



2
votes

Vous pouvez aussi vous suggérer de les copier dans une nouvelle table avec la même structure sur Supprimer


1 commentaires

Particulièrement facile si vous utilisez un déclencheur "sur Supprimer"



11
votes

Vous pouvez renommer la table actuelle, créer la colonne "supprimée", puis créer une vue avec le même nom que la table actuelle, sélectionnant tout le cas échéant = 0. De cette façon, vous n'avez pas à changer toutes vos questions. La vue sera mise à jour à condition que vous fournissez une valeur par défaut pour la colonne DELETE. _ xxx


3 commentaires

+1 pour la vue. Pourriez-vous mettre un lien vers la syntaxe de la vue Créer une vue ou un échantillon de la manière de le faire pour que l'OP sait où aller d'ici?


Mais lorsque je souhaite mettre à jour certaines données dans la table des membres, je ne peux pas utiliser le tableau Afficher pour mettre à jour ces données, non? Je dois donc modifier toutes les requêtes de mise à jour pour mettre à jour le my_New_Table (pour cet exemple)?


Les vues définies comme ceci devraient être mises à jour ... Essayez! C'est-à-dire insérer dans my_Table (col1, col2, col3) (1,2,3); et mettre à jour My_Table Set Col1 = 1 où Col2 = 5; Devrait-on travailler lorsque my_table est défini comme une vue comme ça.



0
votes

un sur Suppr Trigger est ce que vous besoin.

EXEMPLE D'UTILISATION: P>

CREATE TRIGGER Users_archiver
AFTER delete ON users
FOR EACH ROW
BEGIN
insert into users_archive values(old.id,old.username,old.first_name,
old.last_name,old.password);
 END$$
delimiter ;


0 commentaires