web-dev-qa-db-fra.com

Comment créer une séquence dans MySQL?

J'essaie de créer une séquence dans MySQL (je suis très novice dans SQL dans son ensemble). J'utilise le code suivant, mais cela provoque une erreur:

CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;

ORDID fait référence à un champ dans une table que j'utilise. Comment créer la séquence correctement?

Modifier:

Apparemment, MySQL n'utilise pas de séquences. J'utilise maintenant le code suivant, mais cela cause aussi des erreurs. Comment puis-je les réparer?

CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code

Modifier:

Je pense avoir trouvé une solution. Pour phpMyAdmin (que j'utilisais), vous pouvez utiliser le code suivant.

ALTER TABLE ORD AUTO_INCREMENT = 622;

Je ne sais pas pourquoi il préfère cela, mais si quelqu'un d'autre a besoin d'aide avec ça, alors voilà. :)

16
Ben

Découvrez cet article . Je crois que cela devrait vous aider à obtenir ce que vous voulez. Si votre table existe déjà et qu'elle contient déjà des données, l'erreur que vous obtenez peut être due à l'auto_increment qui tente d'affecter une valeur qui existe déjà pour d'autres enregistrements.

En bref, comme d'autres l'ont déjà mentionné dans les commentaires, les séquences, telles qu'elles sont pensées et gérées dans Oracle, n'existent pas dans MySQL. Cependant, vous pouvez probablement utiliser auto_increment pour accomplir ce que vous voulez. 

Sans détails supplémentaires sur l'erreur spécifique, il est difficile de fournir une aide plus spécifique.

METTRE À JOUR

CREATE TABLE ORD (
  ORDID INT NOT NULL AUTO_INCREMENT,
  //Rest of table code
  PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;

Ce lien est également utile pour décrire l'utilisation de auto_increment . Définir la valeur AUTO_INCREMENT semble être une option table , et non quelque chose qui est spécifiquement spécifié comme attribut de colonne.

En outre, vous pouvez également définir la valeur de début de l'incrémentation automatique via l'un des liens ci-dessus, en modifiant votre table.

ALTER TABLE ORD AUTO_INCREMENT = 622;

UPDATE 2 Voici un lien vers un exemple de travail avec sqlfiddle , utilisant l'incrémentation automatique.
J'espère que cette information aide.

17
Daileyo

Ceci est une solution suggérée par le manuel MySQL :

Si expr est donné en argument à LAST_INSERT_ID (), la valeur du L'argument est renvoyé par la fonction et est mémorisé comme le prochain valeur à renvoyer par LAST_INSERT_ID (). Ceci peut être utilisé pour simuler séquences:

Créez une table pour contenir le compteur de séquence et l'initialiser:

    mysql> CREATE TABLE sequence (id INT NOT NULL);
    mysql> INSERT INTO sequence VALUES (0);

Utilisez le tableau pour générer des numéros de séquence comme ceci:

    mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
    mysql> SELECT LAST_INSERT_ID();

L'instruction UPDATE incrémente le compteur de séquence et entraîne l'appel suivant à LAST_INSERT_ID () pour renvoyer la valeur mise à jour. Le L'instruction SELECT récupère cette valeur. L'API C mysql_insert_id () fonction peut également être utilisé pour obtenir la valeur. Voir la section 23.8.7.37, «Mysql_insert_id ()». 

Vous pouvez générer des séquences sans appeler LAST_INSERT_ID (), mais le L’utilité d’utiliser la fonction de cette façon est que la valeur de l’ID est conservés sur le serveur en tant que dernière valeur générée automatiquement. Il est multi-utilisateur sûr car plusieurs clients peuvent émettre le UPDATE et obtenez sa propre valeur de séquence avec l’instruction SELECT (ou mysql_insert_id ()), sans affecter ou être affecté par d’autres les clients qui génèrent leurs propres valeurs de séquence.

24
pupitetris

En créant la table d'incrément, vous devez être conscient de ne pas supprimer les lignes insérées. La raison en est d'éviter de stocker de grandes données dumb dans la base de données avec ID-s en elle. Sinon, en cas de redémarrage de mysql, il obtiendrait le nombre maximum de lignes existantes et continuerait à incrémenter à partir de ce point, comme indiqué dans la documentation http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling. html

2
Dato Janez

Si vous avez besoin de choses différentes de AUTO_INCREMENT, vous pouvez toujours utiliser des déclencheurs.

0
Marek Lisiecki