¿Cómo puedo crear una secuencia en MySQL?

Estoy intentando crear una secuencia en MySQL (soy muy nuevo en SQL). I'm utilizando el siguiente código, pero causa un error:

CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;

ORDID hace referencia a un campo de una tabla que estoy utilizando. ¿Cómo puedo crear la secuencia correctamente?

Editar:

Supuestamente, MySQL no utiliza secuencias. Ahora estoy usando el siguiente código, pero esto está causando errores también. ¿Cómo los arreglo?

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

Editar:

Creo que he encontrado una solución. Para phpMyAdmin (que estaba usando) puede utilizar el siguiente código.

ALTER TABLE ORD AUTO_INCREMENT = 622;

No tengo ni idea de por qué prefiere esto, pero si alguien más necesita ayuda con esto, aquí tienes :)

Esta es una solución sugerida por el manual de MySQl:

Si expr se da como argumento a LAST_INSERT_ID(), el valor del argumento

argumento es devuelto por la función y se recuerda como el siguiente valor que será devuelto por LAST_INSERT_ID(). Esto puede utilizarse para simular secuencias:

Crear una tabla para mantener el contador de secuencias e inicializarla:

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

Utiliza la tabla para generar números de secuencia así:

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

La sentencia UPDATE incrementa el contador de la secuencia y hace que la siguiente llamada a LAST_INSERT_ID() devuelva el valor actualizado. La sentencia La sentencia SELECT recupera ese valor. La API C mysql_insert_id() también puede utilizarse para obtener el valor. Vea la Sección 23.8.7.37, "mysql_insert_id()".

Se pueden generar secuencias sin llamar a LAST_INSERT_ID(), pero la utilidad de usar la función de esta manera es que el valor del ID se mantenido en el servidor como el último valor generado automáticamente. Es es seguro para múltiples usuarios porque varios clientes pueden emitir la sentencia UPDATE y obtener su propio valor de secuencia con la sentencia SELECT (o mysql_insert_id()), sin afectar o ser afectado por otros clientes que generen sus propios valores de secuencia.

Comentarios (0)
Solución

Consulta este artículo. Creo que debería ayudarte a conseguir lo que quieres. Si tu tabla ya existe, y ya tiene datos en ella, el error que estás obteniendo puede deberse a que el auto_incremento intenta asignar un valor que ya existe para otros registros.

En resumen, como otros ya han mencionado en los comentarios, las secuencias, tal y como se conciben y manejan en Oracle, no existen en MySQL. Sin embargo, es probable que pueda utilizar auto_increment para lograr lo que desea.

Sin detalles adicionales sobre el error específico, es difícil proporcionar una ayuda más específica.

ACTUALIZACIÓN

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

Este enlace también es útil para describir el uso de auto_increment. Establecer el valor de AUTO_INCREMENT parece ser una opción de la tabla, y no algo que se especifica como un atributo de la columna específicamente.

Además, según uno de los enlaces anteriores, puedes establecer el valor de inicio de auto_incrementación a través de una alteración de la tabla.

ALTER TABLE ORD AUTO_INCREMENT = 622;

ACTUALIZACIÓN 2 Aquí hay un enlace a un ejemplo de sqlfiddle, utilizando el auto incremento.
Espero que esta información ayude.

Comentarios (5)

Al crear la tabla de incremento debe tener en cuenta que no debe eliminar las filas insertadas. La razón de esto es evitar el almacenamiento de grandes datos tontos en la base de datos con ID-s en ella. De lo contrario, en caso de reinicio de mysql se obtendría la máxima fila existente y continuaría el incremento desde ese punto como se menciona en la documentación http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html

Comentarios (0)