Maison >base de données >tutoriel mysql >Comment puis-je incrémenter automatiquement un champ de clé non primaire dans SQLite ?

Comment puis-je incrémenter automatiquement un champ de clé non primaire dans SQLite ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-27 04:13:10186parcourir

How Can I Auto-Increment a Non-Primary Key Field in SQLite?

Champs de clé non primaire à incrémentation automatique dans SQLite

Dans SQLite, il peut être souhaitable qu'un champ de clé non primaire soit automatiquement incrémenté à chaque insertion, obtenir un comportement similaire aux clés primaires à incrémentation automatique. Cela permet la gestion de valeurs séquentielles au sein d'une table.

Pour y parvenir, une solution de contournement peut être mise en œuvre en exploitant la fonction d'agrégation MAX(). Considérons le scénario suivant : une table de journal avec une clé primaire (id) à usage interne et un numéro de révision (rev_no) qui doit être auto-incrémenté.

CREATE TABLE Log(
  id INTEGER PRIMARY KEY,
  rev_no INT
);

Pour insérer une nouvelle entrée de journal avec un numéro de révision auto-incrémenté, nous pouvons utiliser l'instruction SQL suivante :

INSERT INTO Log (id, rev_no, description)
VALUES ((SELECT MAX(id) + 1 FROM Log), 'rev_Id', 'some description');

Cette instruction calcule d'abord la valeur d'identification maximale dans la table Log et y ajoute 1, générant efficacement le prochain numéro de révision disponible. La valeur résultante est ensuite utilisée comme rev_no pour la nouvelle entrée de journal.

Une approche alternative peut être utilisée pour gérer les tables vides :

INSERT INTO Log (id, rev_no, description)
VALUES ((SELECT IFNULL(MAX(id), 0) + 1 FROM Log), 'rev_Id', 'some description');

Cette instruction modifiée utilise la fonction IFNULL() pour garantir que la valeur d'identification maximale est calculée, même si la table est vide. Par défaut, il renverra 0.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn