Set Default no funciona en Mysql

27 01 2010

Al utilizar tablas InnoDb (para exigir integridad referencial), los SGBD suelen ofrecer cuatro (o cinco) comportamientos ante el borrado/actualización de los registros referenciados:

  • CASCADE / en cascada.- Borrando o actualizando el registro referenciado (en la tabla padre), se borra/actualiza el registro en la tabla hija. Access avisa de que se van a borrar datos. Mysql no.
  • NO ACTION /sin acción .- No deja borrar/actualizar si existen registros en la tabla hija que hagan referencia al registro a borrar (en Mysql es equivalente a RESTRICT)
  • SET NULL/ poner a nulo.- Pone a null el registro que hace referencia
  • SET DEFAULT/poner al valor por defecto.- Pone al valor por defecto el registro que hace referencia

Pues bien, MySQL no permite la última opción, el SET DEFAULT.

Cuesta encontrar un ejemplo claro en el que sea útil esta opción pero podría ser algo como una tabla de coches con un campo conductor (clave ajena de la tabla conductor), con default ‘Libre’ y con null indicando lo que debe (que no se conoce o no es aplicable ningún valor).

Al borrar un conductor, se sabe que está libre y se debería poner a DEFAULT.

Este ejemplo no es correcto, ya que obliga a añadir un conductor fantasma, el Libre. Una solución más correcta sería añadir un booleano que indique si está libre o no el coche.

A ver si se me ocurre algún ejemplo.

Claro, en internet se dan ejemplos para ver cómo funciona pero estoy interesado en un ejemplo “real” en el que sea útil.

Advertisement

Acciones

Información

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.