2009-12-17 7 views
0

J'ai une base de données à laquelle plusieurs utilisateurs peuvent accéder. Est-il possible de définir les tables de sorte que chaque fois que quelqu'un entre un nouvel enregistrement ou modifie un enregistrement, son nom d'utilisateur et la date entrée sont stockés dans 2 colonnes dans la même table que l'enregistrement lui-même. La table ressemblerait à ceci:Ajouter automatiquement l'utilisateur et la date aux enregistrements

Id | Name | Username | Date Entered | Date Modified 
1 | Cat | john | 1999-05-05 | 1996-06-06 

J'utilise une interface graphique qui est phpMyAdmin.

Merci!

Répondre

1

Vous pouvez définir une colonne pour ne pas autoriser les valeurs nulles, soit lorsque vous créez la table en utilisant NOT NULL après la déclaration de type de données. Sinon, vous utilisez une instruction ALTER TABLE pour modifier une colonne si elle existe déjà ou si vous ajoutez la colonne à une table existante.

Cela empêchera quelqu'un d'ajouter un enregistrement, mais pas de mettre à jour. Si vous avez une table séparée d'utilisateurs à référencer, vous utiliserez une relation de clé étrangère pour vous assurer que si la colonne utilisateur est remplie, elle sera effectuée avec un utilisateur valide.

Des contraintes par défaut peuvent être utilisées pour définir la valeur des champs de date si aucune valeur n'est fournie.

ALTER TABLE x 
    ADD USER VARCHAR(45) NOT NULL 

ALTER TABLE x 
    ADD DATE_ENTERED DATE NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

ALTER TABLE x 
    ADD DATE_ENTERED DATE NOT NULL DEFAULT ON UPDATE CURRENT_TIMESTAMP 
+0

Est-il possible de le faire pour que les utilisateurs puissent mettre à jour et ajouter des enregistrements? – Tim

+0

@Tim: Oui, les utilisateurs peuvent ajouter et mettre à jour des enregistrements. Les contraintes DEFAULT appliquent la valeur si aucune valeur/null n'est fournie. Pour plus d'informations sur les contraintes d'horodatage par défaut: http://dev.mysql.com/doc/refman/5.0/en/timestamp.html –

0

Tout d'abord, vous pouvez passer un peu de temps à réfléchir à la meilleure façon de concevoir un mécanisme d'audit, car l'ajout de deux colonnes à toutes les tables de votre base de données est probablement pas optimale. Cela dit, ce que vous cherchez à faire ce que vous avez décrit est un élément déclencheur. C'est un morceau de SQL qui s'exécutera chaque fois qu'une opération spécifiée est appelée. Un exemple approximatif pour votre cas:

créer l'audit de déclenchement après insertion sur « nom_table » insert (utilisateur, temps) dans « nom_table »

Je ne me rappelle pas la syntaxe précise de MySQL, mais c'est un rude exemple de ce dont vous avez besoin. S'il vous plaît poser une question de suivi si ce n'est pas clair.

Questions connexes