Skip to Content

No te olvides de visitar:

MySQL

Presente y futuro de MySQL

Son muchos los proyectos de Software libre que usan como base de datos MySQL, y los que hayáis seguido un poco la historia de MySQL os preguntareis que va a pasar con este pedazo de sistema gestor de bases de datos.... Para los que andeis más despistados voy a poneros en antecedentes:

  • 1994: Michael Widenius and David Axmark desarrollan MySQL.
  • 26 Febrero 2008: Sun compra MySQL por 1.000 millones de dolares. Al poco tiempo MySQL se divide en dos versiones, la versión enterprise (versión de pago que incluye soporte y demás) y la community Server (versión totalmente gratuita).
  • 20 Abril 2009: Oracle anuncia la compra de Sun por 7.400 millones de dólares
  • 13 Mayo 2009: Michael Widenius (fundador de MySQL) funda la Open Database Alliance.
  • Actualidad: La comunidad de software libre se pregunta que será de MySQL.

Como veis los chavales de Oracle lo han hecho bastante bien...como Oracle no podía adquirir directamente MySQL (le hubieran denunciado por intento monopolístico) utilizan como intermediario a Sun Microsystems para hacerlo, al poco tiempo Oracle adquiere Sun acabando así con su principal competidor en el mundo de las bases de datos.

Entonces, ¿que salida le queda a MySQL? Pues la salida más lógica es un fork de MySQL...uno de sus creadores (Michael Widenius) en cuanto vio que Oracle quería acabar con MySQL fundó la Open Database Alliance para garantizar la continuación de MySQL, asegurando (al menos eso espero) el futuro de este.

Solo queda esperar al próximo movimiento por parte de Oracle...

Un saludo a todos

LAST_INSERT_ID(): Obtener el último ID insertado en MySQL

Categoría:

Hoy vamos a ver como obtener el ID del último INSERT que hemos hecho en la base de datos (muy útil sobre todo en el caso de que el ID sea un "auto increment"). Si no conocéis LAST_INSERT_ID, las 2 soluciones que tenéis son un poco cutres:

  • Hacer una consulta "SELECT max(id) FROM tabla" (así obtenedremos el ID más alto de la tabla), poco recomendable porque puede ser que alguien agrege otro registro mientras hacemos nosotros la consulta, con lo cual no estariamos obteniendo el ID del registro que queremos.
  • La otra alternativa es realizar una consulta poniendo como condiciones la información de los campos que acabamos de meter. Ejemplo: hemos agregado un usuario que se llama paco pil, ha nacido el 2000/12/12, entonces hacemos: "SELECT id FROM tabla WHERE nombre='paco' and apellidos='pil' and fechanac='2000/12/12'". Esta opción suele ser más efectiva, en caso de que no tengamos registros repetidos, pero es bastante más costosa...ya que hay que escribir mucho código.

La opción más correta es utilizar LAST_INSERT_ID, para ello nada más que tenemos que hacer la siguiente consulta:

SELECT LAST_INSERT_ID() FROM tabla

Tenéis que tener en cuenta que LAST_INSERT_ID() va asociado a la conexión actual, por tanto si cerramos la conexión, abreimos una nueva y consultamos el LAST_INSERT_ID nos devolverá 0, ya que es una conexión nueva en la que no hemos hecho ningún INSERT.

Si tenéis alguna duda, podéis obtener más información en la documentación oficial de MySQL.

Id por la sombra.

Nota: Si probais el LAST_INSERT_ID desde el Mysql Query browser siempre os devolverá 0, ya que esta aplicación crea una conexión distinta para cada consulta.

Ventajas y desventajas del uso de indices en MySQL

Categoría:

Los indices en las bases de datos se utilizan para conseguir que las "select con where" (las consultas en las que incluimos condiciones) se hagan de manera más rápida. Como veremos ahora su uso tiene sus ventajas y sus desventajas, las cuales debemos sopesar antes de decidirnos por usarlos o no.

    • Ventajas:
      • Usando indices evitamos que MySQL haga un recorrido secuencial de la tabla en la que buscamos.
      • Al no tener que recorrer toda la tabla se evita la sobrecarga de la CPU de la máquina.
      • Como hemos dicho antes agiliza mucho las consultas que incluyen condiciones (siempre que no tenga muchos registros duplicados en el campo que tenemos indexado).
    • Desventajas:
      • El uso de indices ralentizará tanto los insert como los updates, ya que debe actualizar los indices cada vez que añadimos o modificamos un registro.
      • En tablas pequeñas no merece la pena utilizar indices, ya que la ganancia será inapreciable.
      • Los indices ocupan un gran espacio en disco, ya que es información adicional la que esta guardando de cada fila.

Después de esto, que cada cual decida si le beneficia o le perjudica el uso de indices en su aplicación, programa, etc...

¡Un saludo!

Agregar campos en una posición determinada de la tabla en MySQL

Categoría:

Algunas veces queremos añadir nuevos campos a una tabla de nuestra base de datos, y si no le especificamos al "Alter Table" nada nos añadirá el campo al final. Sin embargo a partir de la versión 3.2 de MySQL podemos añadir el nuevo campo donde nosotros queramos, para ello usaremos la palabra reservada "AFTER campo" (si queremos insertarla al principio de la tabla usaremos "FIRST" en lugar de "AFTER"). Con esto le indicamos a MySQL que el nuevo campo lo añada después del campo indicado.

Para que quede más claro veremos un ejemplo. Tenemos la tabla "Usuarios" con los siguientes campos:

id -> integer
nombre -> varchar(255)
edad -> integer
direccion -> varchar (255)
localidad -> varchar (255)
pais -> varchar(255)

Ahora nos damos cuenta de que nos falta añadir el campo provincia, pero queremos meterlo entre localidad y país, para ello ejecutamos la siguiente instrucción:

ALTER TABLE Usuarios
ADD provincia varchar(255) AFTER localidad

Quedando la cosa de la siguiente forma:

id -> integer
nombre -> varchar(255)
edad -> integer
direccion -> varchar (255)
localidad -> varchar (255)
provincia -> varchar (255)
pais -> varchar(255)

Y con esto y un bizcocho ya tenemos lo que queriamos

Group_concat, esa pequeña maravilla del MySQL

Categoría:

Habitualmente trabajo con bases de datos MySQL, y al hacer agrupaciones en las select, echaba en falta un comando que me mostrara los registros que estaban agrupados en cada fila.

Por si no me he explicado bien, pondré un ejemplo. Tenemos una tabla de usuarios con su nombre y apellidos y un id de ese usuario, y queremos obtener una lista de los id's de usuario agrupados por nombre....esto que parece tan sencillo no se podría hacer si no fuera por el comando group_concat, de la siguiente manera:

select nombre, group_concat(id) from usuarios group by nombre
Nos mostraría:

nombre -> group_concat(id)
paco      -> 1,3,4,123
ramon   -> 2,7,12,45
faustino -> 74.1234,13

etc....

Como veis para algunas cosas viene muy bien. El separador que queremos que use para separar los registros lo podemos indicar nosotros mediante el atributo separator, de la siguiente forma:

select nombre, group_concat(id separator "-") from usuarios group by nombre

Posiblemente esto ya lo conocía mucha gente, ya que lleva desde MySQL 4 y pico...pero como yo no lo conocía y me parece curioso, quería compartirlo con vuesas mercedes.

¡Un saludo a todos!

Distribuir contenido