Buenas
Tengo una tabla que UNO de sus campos es serial (autoincremental).
Me gustaria que mi serial empezara por una cantidad determinada, por ejemplo 1.000 y no se como conseguirlo.
Trabajo con mysql
Gracias
| |||
Re: Empezar serial desde 1000 Mira estas respuestas http://www.forosdelweb.com/f86/conoc...rement-575804/ Pregunta al foro: es posible hacer un UPDATE a las tablas de metadatos para conseguir lo que pide neodani "Empezar serial desde 1000"? Quim |
| |||
Re: Empezar serial desde 1000 Primero, algunas breves aclaraciones; cambiar el auto_increment de una tabla, siempre que sea MyISAM, Memory o InnoDB posterior a 5.0.3, es posible, y fácil haciendo esto: ALTER TABLE nombretabla AUTO_INCREMENT= 1000; y ya está; naturalmente es posible hacer eso mismo nada más crear la tabla, y ya comenzará el autoincrementable desde 1000. Una cosa distinta es lo que ha pedido Quimfv, un update de una tabla ya existente con datos y un id que no es el que quieres... Hola, Quimfv, hacer lo que pides es, creo, posible, pero yo solo lo he probado en tablas MyISAM. No sé lo que ocurrirá con las InnoDB y su control de borrado en cascada de los FK. Para MyISAM, yo he dado los siguientes pasos (ni que decir tiene que esto con PHP o ASP también puede hacerse, pero estamos en el foro MySQL): Para el caso de tablas MyISAM 1) Añadir un campo INT llamado por ejemplo idantiguo a la tabla t1, que tiene un campo id autoincrementable con índice primary key ALTER TABLE t1 ADD idantiguo INT; 2) Copiar en ese campo el valor del id primary key, dato que se usará luego para los cambios en las tablas relacionadas. UPDATE t1 SET idantiguo = id; 3) Copiamos la estructura de la tabla t1; quitamos el primary key; le añadimos un índice nuevo primary key y establecemos como autoincrement el número que queramos, por ej., el 1000. Y finalmente, copiamos los datos, campo por campo, excepto el id de t1. CREATE TABLE t2 LIKE t1; ALTER TABLE T2 DROP id ALTER TABLE t2 ADD idt2 INT AUTO_INCREMENT PRIMARY KEY; ALTER TABLE t2 auto_increment = 1000; INSERT INTO t2 (campo1, campo2, campo3, idantiguo) SELECT campo1, campo2, campo3, idantiguo FROM t1; En esa lista deben incluirse todos los campos de t1 menos id... Ahora tenemos una tabla con un index primary key 4) trabajamos sobre las tablas relacionadas, concretamente la llamada t3, pero antes añadimos un índice al campo idantiguo de t2 para trabajar mejor con él... ALTER TABLE t2 ADD INDEX ( `idantiguo` ) ; UPDATE t3, t2 SET t3.refid = t2.idt2 WHERE t3.refid = t2.idantiguo La parte del UPDATE habría que hacerla con todas las tablas que estuvieran relacionadas con el PK de t1 mediante un FK 5) borramos la tabla t1, eliminamos el campo idantiguo de t2, cambiamos el nombre a la tabla t2 llamándola ahora t1 y cambiamos el nombre del id para que sea como el primero que tuvo. drop table t1; drop table t2 idantiguo; RENAME TABLE t2 TO t1; ALTER TABLE t1 CHANGE `idt2` `id` INT( 11 ) NOT NULL AUTO_INCREMENT; Y ya tenemos todos nuestros id en la tabla principal y sus relacionadas desde 1000, y las correspondencias entre PK y FK se mantienen, a pesar de los saltos que hubiera en el id de t1 al principio. Pero mi pregunta, ¿y todo esto para qué, amigos? Última edición por jurena; 16/04/2008 a las 13:02 Razón: añadir correcciones... |
| |||
Re: Empezar serial desde 1000
Código:
Simple y elegante. ALTER TABLE nombretabla AUTO_INCREMENT= 1000; Jurena, gracias por las explicaciones, mi pregunta era solo por si no había una solución tan fácil como la que has dado, puesto que el post de neodani después de haber pasado por otro foro llevaba ahí días sin respuesta. Al ver que para conocer el próximo autoincrement se consultaba las tablas de meta datos se me ocurrió que igual se podía solucionar por la vía de hacer lo siguiente:
Código:
Solo con ánimo de profundizar en el conocimiento, yo diría que ese ALTER TABLE lo que en realidad hace internamente es el UPDATE que yo sugería, puesto que si se aplica como sugiere, CORRECTAMENTE, jurena inmediatamente después de crear la tabla no puede guardar esa información en otro sitio que no sea en sus meta datos. No olvidemos que SQL es un lenguaje declarativo.UPDATE `information_schema`.`tables` SET AUTO_INCREMENT =1000 WHERE TABLE_SCHEMA = "nombrebase" AND TABLE_NAME = "nombretabla"; Quim |
| |||
Re: Empezar serial desde 1000 Perdona, Quimfv, te entendí mal y me dejé llevar por mis propias dudas sobre cómo cambiar el auto_increment cuando había tablas relacionadas y sin que ello produjera problemas en las relaciones (yo por ahora estoy con MyISAM). Gracias, Quimfv |