{"id":25,"date":"2024-06-09T22:56:43","date_gmt":"2024-06-10T02:56:43","guid":{"rendered":"https:\/\/elvincallisaya.com\/?p=25"},"modified":"2024-08-09T00:13:59","modified_gmt":"2024-08-09T04:13:59","slug":"bug-mysql-5-7-reutilizacion-de-ids-autoincrementables","status":"publish","type":"post","link":"https:\/\/elvincallisaya.com\/?p=25","title":{"rendered":"BUG MySQL 5.7, Reutilizacion de IDs autoincrementables"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"530\" src=\"https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/word-image-20505-2.png\" alt=\"\" class=\"wp-image-26\" style=\"width:412px;height:auto\" srcset=\"https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/word-image-20505-2.png 1024w, https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/word-image-20505-2-300x155.png 300w, https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/word-image-20505-2-768x398.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>En esta ocasi\u00f3n les quiero compartir acerca de este bug presente actualmente en Mysql 5.7 y al mismo tiempo mi experiencia al encontrarme con dicho bug.<\/p>\n\n\n\n<p>En terminos generales el problema se debe a que Mysql 5.7 (InnoDB) no persiste el ID siguiente a asignar para los campos autoincrementales, sino que cada vez que la BD inicia &#8220;mira&#8221; cual es el ultimo ID asignado y en base a este empieza a asignar los siguientes, esto puede acarrear problemas serios de consistencia de datos. Veamos un ejemplo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"773\" height=\"381\" src=\"https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/image-1.png\" alt=\"\" class=\"wp-image-30\" srcset=\"https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/image-1.png 773w, https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/image-1-300x148.png 300w, https:\/\/elvincallisaya.com\/wp-content\/uploads\/2024\/08\/image-1-768x379.png 768w\" sizes=\"auto, (max-width: 773px) 100vw, 773px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-8cf370e7 wp-block-group-is-layout-flex\">\n<p><strong>Tenemos el siguiente escenario:<\/strong><\/p>\n\n\n\n<p>2 BDs, cada una con una sola tabla, la tabla point_of_sales tiene referencia en sale_id a la tabla sales de la BD1. Si vemos estas 2  tablas de arriba (ignorando las lineas rojas) vemos un escenario &#8220;normal&#8221;, 2 tablas relacionadas sin llave for\u00e1nea.<\/p>\n\n\n\n<p>Siguiendo la imagen, ahora eliminamos de la tabla sales los registros 44 y 45, hasta este punto esperariamos que si insertamos otro registro este se haga con el ID 46, <strong>PEROOO<\/strong>, vamo a reiniciar la BD, por el motivo que sea: a proposito, el server al detectar que este se cay\u00f3, si lo tenemos bajo docker el famoso restart: always, etc.<\/p>\n\n\n\n<p>Se reinicia la BD, insertamos 2 registros nuevos y que nos encontramos? Los nuevos registros se insertaron con los mismos IDs que habiamos eliminado! Ahora la tabla point_of_sales a quedado con registros apuntando a IDs de la tabla sales que no corresponden, generando una inconsistencia critica en los datos.<\/p>\n\n\n\n<p><strong>Que pas\u00f3?<\/strong> Cuando la BD reinici\u00f3 vio el ultimo registro con ID asignado, el 43 (ya que eliminamos el 44 y 45) entonces en base a eso el guard\u00f3 en sus registros para que el siguiente registro a insertar sea el 44 y as\u00ed sucesivamente.<\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-text-align-center\">Espero les guste este contenido, si tienen algun comentario no duden en dejar abajo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Bug Mysql 5.7 - Reutilizacion de IDs autoincrementables\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/J04Z_XGZXUU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>En esta ocasi\u00f3n les quiero compartir acerca de este bug presente actualmente en Mysql 5.7 y al mismo tiempo mi experiencia al encontrarme con dicho bug.<\/p>\n<p>En terminos generales el problema se debe a que Mysql 5.7 (InnoDB) no persiste el ID siguiente a asignar para los campos autoincrementales, sino que cada vez que la BD inicia &#8220;mira&#8221; cual es el ultimo ID asignado y en base a este empieza a asignar los siguientes, esto puede acarrear problemas serios de consistencia de datos. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[7,8],"class_list":["post-25","post","type-post","status-publish","format-standard","hentry","category-base-de-datos","tag-bug","tag-mysql"],"_links":{"self":[{"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=\/wp\/v2\/posts\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=25"}],"version-history":[{"count":1,"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=\/wp\/v2\/posts\/25\/revisions"}],"predecessor-version":[{"id":31,"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=\/wp\/v2\/posts\/25\/revisions\/31"}],"wp:attachment":[{"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elvincallisaya.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}