Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

alter table para añadir auto_increment a un campo

Estas en el tema de alter table para añadir auto_increment a un campo en el foro de Mysql en Foros del Web. Estoy aprendiendo sql desde cero, ya que hasta ahora solo sabía de sql por las consultas básicas que se hacen desde PHP. He creado una ...
  #1 (permalink)  
Antiguo 12/07/2013, 07:21
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
alter table para añadir auto_increment a un campo

Estoy aprendiendo sql desde cero, ya que hasta ahora solo sabía de sql por las consultas básicas que se hacen desde PHP.

He creado una base de datos "pruebas", en ella una tabla "tabla1" con los campos

id_tabla1 int not null,

nombre varchar (100),

apellidos varchar (100),

primary key (id_tabla1)


el problema es que quiero añadir auto_increment al campo id_tabla1 pero no lo he logrado.

he leído y buscado sobre alter table y auto_increment pero no me aclara nada sobre la sintaxis o si me falta algo.

lo he intentado con las cláusulas add, change y modify pero sin resultados y sin saber si es eso exactamente lo que me está fallando en la siguiente alteración

Código SQL:
Ver original
  1. ALTER TABLE tabla1 CHANGE id_tabla1 id_tabla1 AUTO_INCREMENT ;
  2.  
  3. ##otra manera que lo intento es con MODIFY
  4.  
  5. ALTER TABLE tabla1 MODIFY id_tabla1 AUTO_INCREMENT ;
  6.  
  7. ##y otra manera es con ADD
  8.  
  9. ALTER TABLE tabla1 ADD id_tabla1 AUTO_INCREMENT ;

pero nada, no puedo, me devuelve error.

saludos!!
  #2 (permalink)  
Antiguo 12/07/2013, 07:44
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: alter table para añadir auto_increment a un campo

Hola guardarmicorreo:

Cuando alguna consulta te marque un error, es conveniente que nos digas qué error es el que te está marcando, porque ahí generalmente está implícita la respuesta y se puede determinar cuál es el problema... Sin esta información puede resultar algo complicado ayudarte... Ojo con eso.

Tienes varios detalles en tus intentos por hacer el ALTER TABLE:

1. Un campo AUTO_INCREMENTAL debe estar definido como llave... si no tienes especificado el campo id_tabla1 como llave, debes agregarlo también como llave.

2. En la sentencia, debes especificar el TIPO, independientemente que ya lo hayas hecho al momento de crear la tabla,

3. Siempre es recomendable QUE LEAS EL MANUAL DE REFERENCIA... ahí por lo general vas a encontrar la respuesta a lo que estás preguntando... o si lo prefieres, pregúntale a SAN GOOGLE, el tiene muchas respuestas.


Cita:
he leído y buscado sobre alter table y auto_increment pero no me aclara nada sobre la sintaxis o si me falta algo.
Me sorprende que digas esto, pues en el Manual de Referencia, viene un ejemplo exacto de lo que quieres hacer:

Cita:
Para añadir una nueva columna entera AUTO_INCREMENT llamada c:

mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> ADD PRIMARY KEY (c);
Con la estructura de tu tabla:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla1 (
  2.     ->    id_tabla1 INT NOT NULL,
  3.     ->    nombre VARCHAR (100),
  4.     ->    apellidos VARCHAR (100));
  5. Query OK, 0 rows affected (0.26 sec)
  6.  
  7. mysql> ALTER TABLE tabla1 CHANGE
  8.     -> id_tabla1 id_tabla1 INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  9.     -> ADD PRIMARY KEY(id_tabla1);
  10. Query OK, 0 rows affected (0.89 sec)
  11. Records: 0  Duplicates: 0  Warnings: 0
  12.  
  13. mysql> insert into tabla1 values (null, 'Leonardo', 'Córcega');
  14. Query OK, 1 row affected (0.04 sec)
  15.  
  16. mysql> SELECT * FROM tabla1;
  17. +-----------+----------+-----------+
  18. | id_tabla1 | nombre   | apellidos |
  19. +-----------+----------+-----------+
  20. |         1 | Leonardo | Córcega   |
  21. +-----------+----------+-----------+
  22. 1 row in set (0.00 sec)

Observa que el tipo de datos es UNSIGNED, ya que NUNCA TENDRÁS ID's NEGATIVOS. La única diferencia entre lo que pongo y el ejemplo del manual es que en lugar de ADD utilizo CHANGE, pues el campo ya existe.

Si con esto, te sigue marcando error la consulta, por favor, POSTEA EL ERROR, aquí somos informáticos, no adivinos

Saludos
Leo.
  #3 (permalink)  
Antiguo 12/07/2013, 07:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: alter table para añadir auto_increment a un campo

Como complemento... acabo de leer que si tienes definido el campo como LLAVE, por lo tanto, no es necesario agregarlo en el ALTER TABLE:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla1 (
  2.     ->    id_tabla1 INT NOT NULL,
  3.     ->    nombre VARCHAR (100),
  4.     ->    apellidos VARCHAR (100),
  5.     ->    PRIMARY KEY (id_tabla1));
  6. Query OK, 0 rows affected (0.23 sec)
  7.  
  8. mysql> ALTER TABLE tabla1 CHANGE
  9.     -> id_tabla1 id_tabla1 INT UNSIGNED NOT NULL AUTO_INCREMENT;
  10. Query OK, 0 rows affected (0.43 sec)
  11. Records: 0  Duplicates: 0  Warnings: 0

Saludos
Leo.
  #4 (permalink)  
Antiguo 12/07/2013, 07:58
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: alter table para añadir auto_increment a un campo

Y ya entrados en gastos con esto de la práctica, también puedes hacerlo con MODIFY... la diferencia entre CHANGE y MODIFY es que con CHANGE puedes incluso renombrar la columna... observa en el ejemplo que pongo dos veces el nombre del campo para dejarlo exactamente igual, pero puedes hacerlo con MODIFY así:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla1 (
  2.     ->    id_tabla1 INT NOT NULL,
  3.     ->    nombre VARCHAR (100),
  4.     ->    apellidos VARCHAR (100),
  5.     ->    PRIMARY KEY (id_tabla1));
  6. Query OK, 0 rows affected (0.25 sec)
  7.  
  8. mysql> ALTER TABLE tabla1 MODIFY
  9.     -> id_tabla1 INT UNSIGNED NOT NULL AUTO_INCREMENT;
  10. Query OK, 0 rows affected (0.48 sec)
  11. Records: 0  Duplicates: 0  Warnings: 0

Saludos
Leo
  #5 (permalink)  
Antiguo 12/07/2013, 09:31
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: alter table para añadir auto_increment a un campo

ha sido una clase magistral! muchísimas gracias.
el ejemplo que mencionas de la documentación de mysql sí lo vi, pero no entendí el unsigned por eso tuve problemas para entender alter table del manual hasta que junto con tu explicación lo logré.

lo que no entiendo es por qué si quiero editar un campo y puedo hacerlo con modify para no cambiar el nombre tengo que establecer de nuevo el tipo de dato (int) la longitud y si es null o not null. no lo entiendo, si no tengo que cambiar el nombre con modify ¿por qué los otros campos tengo que volver a declararlos? se supone que solo quiero agregar auto_increment en este caso, pero podría ser con not_null o unsigned.

estoy entendiendo la importancia de mysql poco a poco :P
  #6 (permalink)  
Antiguo 12/07/2013, 10:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: alter table para añadir auto_increment a un campo

Hola de nuevo guardarmicorreo:

Cita:
lo que no entiendo es por qué si quiero editar un campo y puedo hacerlo con modify para no cambiar el nombre tengo que establecer de nuevo el tipo de dato (int) la longitud y si es null o not null. no lo entiendo, si no tengo que cambiar el nombre con modify ¿por qué los otros campos tengo que volver a declararlos? se supone que solo quiero agregar auto_increment en este caso, pero podría ser con not_null o unsigned.
No se trata de entender o no entender por qué se tienen que poner esos datos, simplemente es cuestión si sintaxis... la definición de una columna tiene esta sintáxis:

Código:
column_definition:
    col_name type [NOT NULL | NULL] [DEFAULT default_value]
        [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
        [COMMENT 'string'] [reference_definition]
Es decir, lo mínimo que requieres para definir cualquier columna es su nombre y su tipo, eso es lo mínimo que debes colocar, independientemente de que estés haciendo un ALTER TABLE y el campo ya tenga definido ese dato... en realidad lo que estás haciendo es definir una nueva la cual toma el lugar de una columna ya existente. Por esa cuestión es necesario colocar al menos el nombre y el tipo para poder hacer el cambio.

Los modificadores NOT NULL, NULL, DEFAULT, AUTO_INCREMENT, etc. son completamente opcionales y podrías omitirlos.

Sin embargo, un campo AUTO_INCREMENT es un caso especial de columna, donde tienes que especificar que el campo sea de tipo entero, no nulo y que sea llave. No podrías declara entonces un campo AUTO_INCREMENT con un tipo de datos varchar, o con un campo que pueda aceptar nulos... así es la definición establecida, y si no la sigues simplemente NO PODRÁS HACER EL CAMBIO.

La parte del UNSIGNED en realidad no es obligatoria, podrías haber definido la columna con signo, pero esto como expliqué en mis post's anteriores es un desperdicio de espacios, pues nunca tendrás ID's negativos.

Como dije anteriormente, no se trata de entender el por qué de las cosas, sino seguir las reglas establecidas por el motor de BD.

Saludos
Leo.
  #7 (permalink)  
Antiguo 12/07/2013, 10:20
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: alter table para añadir auto_increment a un campo

muchísimas gracias !!! me ha quedado todo perfectamente claro, así sí da gusto aprender :D :P

Etiquetas: campo, php, sql, tabla, table
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.