Je voudrais avoir un déclencheur pour effectuer l'opération suivante pour les enregistrements insérés:déclencheur MySQL pour mettre à jour un champ à la valeur id
# pseudocode
if new.group_id is null
set new.group_id = new.id
else
# don't touch it
end
Plus clairement: dire que j'ai une table avec trois colonnes: id
primaire clé, group_id
int, value
varchar.
Lorsque j'insère avec group_id
comme ça:
INSERT INTO table(value, group_id) VALUES ('a', 10)
Je voudrais avoir:
id | group_id | value
---+----------+------
1 | 10 | a
mais quand j'omets group_id
:
INSERT INTO table(value) VALUES ('b')
il devrait être automatiquement mis à id
de cette fiche:
id | group_id | value
---+----------+------
2 | 2 | b
Est-ce possible avec un déclencheur? (Je sais que je peux mettre à jour le dossier après l'insertion, mais ayant le déclencheur serait plus agréable.)
Ça craint. Même en 2016 –
@AA_PV, cela pourrait être résolu par un objet de séquence indépendant, comme ils le font dans Oracle. Cela a été une demande de fonctionnalité ouverte dans MySQL depuis 2003: https://bugs.mysql.com/bug.php?id=1625 Mais dans Oracle, pour utiliser la séquence, vous devez * l'appeler * dans le code de l'application, qui signifie écrire le code pour * chaque * INSERT dans une table que vous voulez avoir une clé primaire auto-inc. Ou bien écrire un déclencheur pour * chaque * table. Les utilisateurs de MySQL aiment pouvoir écrire autant de déclencheurs, et déclarent simplement AUTO_INCREMENT comme option de colonne. –
oui mais deux colonnes AUTO_INCREMENT ne sont pas autorisées dans MySQL, non? Bien que je pense que quelque chose de similaire à http://stackoverflow.com/a/7345183/4411645 peut être fait. Et pour éviter la requête imbriquée, peut-être que cela peut être maintenu dans le code de l'application, bien que cela puisse être encore plus dangereux, pas sûr. –