2008-09-05 9 views
2

Disons que je veux avoir une table qui enregistre la date et le nombre de colonnes dans une autre table (ou vraiment n'importe quelle sorte de concat de maths/chaînes etc.).Colonnes calculées dans mysql sur les instructions INSERT

CREATE TABLE `log` (
`id` INTEGER NOT NULL AUTO_INCREMENT , 
`date` DATETIME NOT NULL , 
`count` INTEGER NOT NULL , 
PRIMARY KEY (`id`) 
); 

Est-il possible de calculer la colonne de comptage à chaque fois que je fais une insertion?

par exemple. faire quelque chose comme:

INSERT INTO log (date='foo'); 

et avoir compte calculé par mysql.

De toute évidence, je pourrais le faire moi-même en faisant une requête pour obtenir le compte et l'insérer, mais ce serait mieux.

Répondre

5

Les déclencheurs sont le meilleur outil pour annoter des données lorsqu'une table est modifiée par insertion, mise à jour ou suppression.

Pour définir automatiquement la colonne de date d'une nouvelle ligne dans le journal avec la date actuelle, vous auriez créer un déclencheur qui avait l'air quelque chose comme ceci:

create trigger log_date before insert on log 
for each row begin 
    set new.date = current_date() 
end; 
0

Vous devez absolument déclarer ce qu'il faut insérer. Cela devrait être possible en utilisant l'instruction INSERT ... SELECT.

INSERT INTO log (date, count) 
    SELECT DATE() as date, count(id) as count 
    from foo; 

qui devrait insérer une nouvelle ligne dans la table de journal, contenant la date d'aujourd'hui et le nombre de lignes dans la table foo. (En supposant que la table foo possède une colonne id. Utilisez la clé primaire ou une autre colonne indexée)

-1

Pourquoi utilisez-vous pas INFORMATION_SCHEMA.TABLES ?

Questions connexes