Ver Mensaje Individual
  #6 (permalink)  
Antiguo 12/07/2013, 10:14
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.