3 votes

Colonnes calculées dans mysql sur les instructions INSERT

Disons que je veux avoir une table qui enregistre la date et le nombre de colonnes dans une autre table (ou n'importe quelle sorte de concatation mathématique / de chaîne de caractères, etc.)

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

Est-il possible de faire en sorte que la colonne "count" soit calculée à chaque fois que j'effectue une insertion ?

par exemple, faire quelque chose comme :

INSERT INTO log (date='foo');

et que le décompte soit calculé par mysql.

Je pourrais évidemment le faire moi-même en effectuant une requête pour obtenir le décompte et l'insérer, mais ce serait mieux ainsi.

6voto

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

Pour définir automatiquement la colonne date d'une nouvelle ligne du journal avec la date du jour, vous devez créer un déclencheur qui ressemble à ceci :

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

0voto

Thomas Watnedal Points 2405

Vous devez certainement déclarer ce que vous voulez insérer. Cela devrait être possible en utilisant la fonction INSÉRER ... SÉLECTIONNER déclaration.

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

Ce qui devrait insérer une nouvelle ligne dans la table log, contenant la date du jour et le nombre de lignes dans la table foo. (En supposant que la table foo ait une colonne id ). Utilisez la clé primaire ou une autre colonne indexée)

-1voto

Federico Points 821

Pourquoi ne pas utiliser information_schema.TABLES ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X