elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: Update en un ID AUTO_INCREMENT
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: Update en un ID AUTO_INCREMENT  (Leído 5,670 veces)
Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
[Pregunta]: Update en un ID AUTO_INCREMENT
« en: 26 Julio 2019, 18:00 pm »

Buenos días, básicamente quería saber como podría editar un id (AUTO_INCREMENT) de una tabla ya es conocido que son valores únicos e irrepetibles. Lo que busco es que al momento de realizar la consulta, el registro al que intento editar "UPDATE" tenga un id más renovada es decir mas grande como si fuera que cree ese registro por primera vez. Espero haberme podido explicar bien.. Gracias


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #1 en: 26 Julio 2019, 18:34 pm »

No estoy muy seguro, pero creo que si utilizas NULL para el campo con AUTO_INCREMENT (y le has puesto NOT_NULL al campo con AUTO_INCREMENT) te genera un nuevo número.


En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #2 en: 26 Julio 2019, 18:50 pm »

No estoy muy seguro, pero creo que si utilizas NULL para el campo con AUTO_INCREMENT (y le has puesto NOT_NULL al campo con AUTO_INCREMENT) te genera un nuevo número.

Había buscado en internet antes y se decía algo de que al hacer eso de poner null da un id = 0 pero lo voy a probar haber que tal y te digo.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #3 en: 26 Julio 2019, 18:58 pm »

Había buscado en internet antes y se decía algo de que al hacer eso de poner null da un id = 0 pero lo voy a probar haber que tal y te digo.

Va a depender de la base de datos pero está en la documentación de MySQL.



https://dev.mysql.com/doc/mysql-tutorial-excerpt/5.7/en/example-auto-increment.html
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #4 en: 26 Julio 2019, 21:05 pm »

Creo que tu tabla tiene problemas de definición, ejecuta un DESCRIBE nombrdelatabla; y peganos el resultado para ver porque no está incrementando los valores de manera automática.
En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #5 en: 27 Julio 2019, 03:29 am »

No pude poner el NOT_NULL no se donde tengo que ir para eso.

Creo que tu tabla tiene problemas de definición, ejecuta un DESCRIBE nombrdelatabla; y peganos el resultado para ver porque no está incrementando los valores de manera automática.

Me salió esto..

Field | Type | Null | Key | Default | Extra

id | int(50) | NO | PRI | NULL | auto_increment
nombre | varchar(25) | YES | NULL
apellido | varchar(25) | YES | NULL
email | varchar(200) | YES | NULL
contrasena | varchar(200) | YES | NULL
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #6 en: 27 Julio 2019, 05:04 am »

Ok...

Código:
id | int(50) | NO | PRI | NULL | auto_increment

Tu columna id dice que si es numérico y autoincrementable pero también dice que puede ser nulo y eso está mal, porque si no lo defines al insertar un valor entonces queda nulo en ves de crear el valor numérico autoincrementado.

Debes modificarlo e indicarle que no puede ser nulo:

Código:
ALTER TABLE nombredelatabla MODIFY id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;

Ojo, cuando lo hags te dará un error si tienes registros nulos, para aplicar ese cambio debes asignar un valor a cada registro nulo.

Otro cuidado es el valor de inicio del autoincrementable, probablemente la base de datos no ha utilizado la función de autoincremento por lo cual el primer valor a asignar al crear un registro sea el 1 y luego el 2 y así, pero si ya tienes esos valores utilizados entonces tendrás un problema.

Para solucionar esto debes modificar el valor del autoincrementable para que comience a partir del siguiente valor mas grande que tengas:

Código:
ALTER TABLE nombredelatabla AUTO_INCREMENT = 100;

Donde 100 es el valor que comenzará a utilizar.

Si quieres saber tu valor máximo actual puedes utilizar:

Código:
SELECT MAX(id) FROM nombredelatabla;

A eso le sumas uno y ya.

Para saber si tienes registros nulos:

Código:
SELECT * FROM nombredelatabla WHERE id IS NULL LIMIT 100;

Saludos.
En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #7 en: 27 Julio 2019, 05:12 am »

¡Muchas gracias a los dos por la mano que me dieron con esto!  ;-)
MIL GRACIAS!
En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #8 en: 27 Julio 2019, 07:03 am »

Saludos,

- He estado haciendo pruebas en mi MySQL 5.6.35 y veo que cuando se actualiza un valor auto_increment usando UPDATE el contador interno que usa MySQL no se actualiza y se queda como estaba, luego de intentar INSERT un nuevo registro da un error ya que el contador se quedo atrás, sin embargo el contador se actualiza luego del error y permite insertar el nuevo registro en el siguiente intento:


mysql> DESCRIBE animals;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM animals;
+----+------+
| id | name |
+----+------+
|  1 | dog  |
|  3 | lax  |
|  4 | wolf |
|  7 | cow  |
|  8 | bull |
|  9 | lion |
| 10 | cat  |
+----+------+

mysql> SET @newId = ( SELECT MAX(id) + 1 FROM animals );
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE animals SET id = @newId, name = 'rat' WHERE name = 'lax';
Query OK, 1 row affected (0.14 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM animals;
+----+------+
| id | name |
+----+------+
|  1 | dog  |
|  4 | wolf |
|  7 | cow  |
|  8 | bull |
|  9 | lion |
| 10 | cat  |
| 11 | rat  |
+----+------+
7 rows in set (0.00 sec)

mysql> INSERT INTO animals VALUES ( NULL, 'parrot' );
ERROR 1062 (23000): Duplicate entry '11' for key 'PRIMARY'

mysql> INSERT INTO animals VALUES ( NULL, 'parrot' );
Query OK, 1 row affected (0.15 sec)

mysql> SELECT * FROM animals;
+----+--------+
| id | name   |
+----+--------+
|  1 | dog    |
|  4 | wolf   |
|  7 | cow    |
|  8 | bull   |
|  9 | lion   |
| 10 | cat    |
| 11 | rat    |
| 12 | parrot |
+----+--------+
8 rows in set (0.00 sec)


- Pues habrá que tener esto en cuenta y actualizar el contador a mano como dice WHK usando:

Código:
ALTER TABLE animals AUTO_INCREMENT = @newId + 1;

-- PERO no funciona, esa instrucción no soporta variables XD, al menos no en mi MySQL 5.6.35, la alternativa es usar una Sentencia Preparada, los pasos completos a continuación:


mysql> SELECT * FROM animals;
+----+--------+
| id | name   |
+----+--------+
|  4 | wolf   |
|  7 | cow    |
|  8 | bull   |
|  9 | lion   |
| 10 | cat    |
| 11 | rat    |
| 12 | parrot |
| 13 | condor |
| 14 | tiger  |
| 15 | fly    |
+----+--------+
10 rows in set (0.00 sec)

mysql> SET @newId = ( SELECT MAX(id) + 1 FROM animals );
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @newId;
+--------+
| @newId |
+--------+
|     16 |
+--------+
1 row in set (0.00 sec)

mysql> UPDATE animals SET id = @newId, name = 'gorilla' WHERE name = 'rat';
Query OK, 1 row affected (0.14 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  4 | wolf    |
|  7 | cow     |
|  8 | bull    |
|  9 | lion    |
| 10 | cat     |
| 12 | parrot  |
| 13 | condor  |
| 14 | tiger   |
| 15 | fly     |
| 16 | gorilla |
+----+---------+
10 rows in set (0.00 sec)

mysql> ALTER TABLE animals AUTO_INCREMENT = @newId + 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@newId + 1' at line 1

mysql> SET @sql = CONCAT('ALTER TABLE animals AUTO_INCREMENT = ', @newId + 1);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @sql;
+-----------------------------------------+
| @sql                                    |
+-----------------------------------------+
| ALTER TABLE animals AUTO_INCREMENT = 17 |
+-----------------------------------------+
1 row in set (0.00 sec)

mysql> PREPARE st FROM @sql; EXECUTE st;
Query OK, 0 rows affected (0.00 sec)
Statement prepared

Query OK, 0 rows affected (0.13 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> INSERT INTO animals VALUES ( NULL, 'mouse' );
Query OK, 1 row affected (0.13 sec)

mysql> SELECT * FROM animals;
+----+---------+
| id | name    |
+----+---------+
|  4 | wolf    |
|  7 | cow     |
|  8 | bull    |
|  9 | lion    |
| 10 | cat     |
| 12 | parrot  |
| 13 | condor  |
| 14 | tiger   |
| 15 | fly     |
| 16 | gorilla |
| 17 | mouse   |
+----+---------+
11 rows in set (0.00 sec)
En línea

Leguim


Desconectado Desconectado

Mensajes: 720



Ver Perfil
Re: [Pregunta]: Update en un ID AUTO_INCREMENT
« Respuesta #9 en: 27 Julio 2019, 09:36 am »

Hola EDE!

Digamos no sirve poner a la columna "id" NOT_NULL y luego ponerlo NULL o sería mejor usar ese método que me mostraste?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines