J'ai passé beaucoup de temps dessus, mais je n'arrive toujours pas à le résoudre.Pourquoi le déclencheur est-il faux dans MySQL?
Pour certaines raisons que je veux empêcher une même insertion dans la base de données. Donc, je choisis d'utiliser le déclencheur. C'est,
CREATE TRIGGER trigger_card_usage_insert_block
BEFORE INSERT ON annual_card_usage_log
FOR EACH ROW
BEGIN
DECLARE lasttime INT; -- hold the last insert time
SELECT
usage_time INTO lasttime
FROM
annual_card_usage_log
WHERE
NEW.card_id = card_id
AND NEW.mch_id = mch_id
AND NEW.store_id = store_id
ORDER BY
usage_time DESC
LIMIT 1;
-- only insert when after 300 second
IF(
lasttime != NULL
AND(lasttime + 300 < new.usagetime)
) THEN
INSERT INTO annual_card_usage_log(
card_id ,
mch_id ,
store_id ,
usage_time
)
VALUES
(
NEW.card_id ,
NEW.mch_id ,
NEW.store_id ,
NEW.usage_time
);
END
IF;
END$
Ceci est le code de création. Et ci-dessous est le tableau,
CREATE TABLE `annual_card_usage_log` (
`usage_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
`card_id` int(10) unsigned NOT NULL COMMENT '',
`mch_id` int(10) unsigned NOT NULL COMMENT '',
`store_id` int(10) DEFAULT NULL,
`usage_time` int(10) NOT NULL COMMENT '',
PRIMARY KEY (`usage_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Malheureusement, je ne peux pas créer le déclencheur, il semble faux. Peux-tu me dire pourquoi? Quel code est faux. J'utilise le client mysql appelé Sequel Pro, et quand je lance le sql j'ai un message d'erreur "Vous avez une erreur dans votre syntaxe SQL, consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de '' à la ligne 6 Exécution arrêtée! " Je ne suis pas la raison maintenant.
* impossible de créer le déclencheur * - pourquoi exactement? – anatol
@anatol J'utilise le client mysql appelé Sequel Pro, et quand je lance le sql j'ai un message d'erreur "Vous avez une erreur dans votre syntaxe SQL, consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser '' à la ligne 6 Exécution arrêtée! " Je ne suis pas la raison maintenant. – blackdog
C'est informations utiles, s'il vous plaît ajouter à votre question – anatol