MySQL

lunes, el 5. julio 2010, 09:12 por Inagotable

Estaba yo tan feliz programando un aplicación que utilizaba MySQL como base de datos cuando, de repente, al dar de alta un nuevo registro en un tabla me saltaba un error que decía:

MySQL Duplicate entry for key PRIMARY

Extrañado, comprobaba una y otra vez el hecho de que la clave principal de aquella tabla era auto-incremental, pero cuando tenía que pasar del valor 127 al 128 se le iba la pinza y siempre intentaba meter el 127 que, como ya existía, saltaba el error.

Buscando por Internet, encontré un bug muy similar a lo que me estaba pasando, pero aquello parece que quedó zanjado en 2008, aunque igualmente probé con alguna solución propuesta sin éxito. Ante tal situación y creyendo que era problema del motor interno de InnoDB, pensaba que tendría que cambiarlo pero entonces me quedaría sin las transacciones y, por tanto, sin los rollback.

Menos mal que al final di con la solución. El campo que utilizaba como clave primaria era de tipo TinyInt que sólo puede almacenar desde -128 hasta 127, por lo que cambiándolo a tipo Integer la limitación me lleva hasta 429.4967.295 registros. Ni bugs ni tonterías, una mala elección por mi parte al diseñar la base de datos.

Escrito en: Informática | Etiquetas: Etiquetas: , , , , , , ,
0 Trackbacks | 13 Comentarios »

13 Respuestas

  1. YoMisma dice:

    No es por darmelas de listilla ni nada de eso… pero cuando he visto el 127 se me ha venido esa idea a la cabeza 🙂

    Lo que no sé es porque trataba de meter el 127, se supone que debería controlar un overflow y empezar de nuevo por el valor mínimo… no?

    Saludines ^^
    YoMisma

  2. Inagotable dice:

    @YoMisma : ya, es que tardé un poco en darme cuenta de que se quedaba en el 127. Parece ser que hacía justamente lo contrario, al exceder el límite superior ponía el valor máximo.

  3. Mrs. C. dice:

    No he entendido ná xD

  4. Tuxina dice:

    Las bases de datos y las redes siempre han sido mi cruz.

    Un bico

  5. Jake dice:

    Debería apuntarme a clases de chino.

  6. Inagotable dice:

    @Tuxina : con lo bonitas que son ambas jiji

    @Jake : dicen que podría tener mucho futuro.

  7. Onir dice:

    Buuuuu, patooosooo 😛

    Si eso lo sabe hacer hasta un teleco como yo… lo que hay que ver… xD

  8. Inagotable dice:

    @Onir : que mala persona jajajaja

  9. apio dice:

    ¡Este post me ha puesto perraca!

  10. Inagotable dice:

    @apio : ya sabía yo que entre todos, alguien captaría la sensibilidad que emana este post xD

  11. The C1-B0rg dice:

    Bienvenidos al ascensor espacial, plim, nivel 1 alcanzado, …plim, nivel 2 alcanzado, ……….. plim, nivel 65530 alcanzado, ….. plim, nivel 65535 alcanzado, ….. Atención, nos dirigimos al centro de la tierra, abrochense los cinturones.

  12. Inagotable dice:

    @The C1-B0rg : si ese ascensor anuncia cada uno de los niveles por los que pasa, sus viajeros llegarán antes a su límite psicológico xD

Dejar un comentario

A tener en cuenta: Los comentarios son moderados. Esto puede retrasar la aparación de tu comentario. No hay necesidad de que lo envíes de nuevo.