En utilisant MySQL, gestion des livres, le problème implique deux tables, livres et prêteur
Voici la question :
Créez un déclencheur pour réaliser l'incrémentation automatique des livres empruntés/diminution des livres restitués, mais le déclencheur que j'ai écrit ne peut pas réaliser cette fonction, et le montant final n'a pas changé (certains montants dans le tableau ont été saisis manuellement par moi)
Lorsque les livres sont empruntés et que l'attribut islend est mis à jour, le nombre de livres empruntés est mis à jour en même temps dans le tableau du prêteur.
Une fois l'attribut islend mis à jour, il enregistre l'identifiant de l'emprunteur, l'identifiant du prêteur est. la clé primaire, et l'islend dans la table books est la clé étrangère La connexion entre ces deux tables.
Les deux structures de tables de base de données sont données ci-dessous. Les déclencheurs actuellement écrits sont les suivants :
CREATE TRIGGER returnBook
AFTER UPDATE ON books
FOR EACH ROW
BEGIN
UPDATE lender
SET amount = lender.amount - 1
WHERE id = new.isLend;
END
La structure de la table de rendu est la suivante :
La structure de la table des livres est la suivante :
Déclaration de test
String sql = "UPDATE books SET isLend=?,date=NULL WHERE bookId=? AND isLend=?";
try {
ps = conn.prepareStatement(sql);
ps.setString(1, "1");
ps.setString(2, String.valueOf(bookId));
ps.setString(3, String.valueOf(id));
row = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
La fonction emprunt/retour peut être implémentée normalement, mais la fonction de déclenchement n'est pas implémentée
Il n'y a rien de mal avec le déclencheur lui-même, sauf que nous devons faire attention au problème nul mentionné par @夜 qui disparaît en été [lingchenxiaoshixiari]
Vous pouvez ajouter un tableau de type journal au déclencheur pour voir si le déclencheur a été exécuté