Quiero hacer algo como esto:
create table app_users
(
app_user_id smallint(6) not null auto_increment primary key,
api_key char(36) not null default uuid()
);
Sin embargo, esto da como resultado un error, ¿hay alguna manera de llamar a una función para un valor predeterminado en mysql?
Gracias.
SET new.api_key = COALESCE(new.api_key, uuid())
para preservar los valores existentes.A partir de mysql v8.0.13 es posible usar una expresión como valor predeterminado para un campo:
fuente
Como ya se dijo, no puede.
Si desea simular este comportamiento, puede usar un disparador de esta manera:
Todavía tiene que actualizar filas previamente existentes, como esta:
fuente
Desafortunadamente no, MySQL 5 requiere constantes por defecto. El tema se discutió con mucho más detalle en el enlace a continuación. Pero la única respuesta es permitir null y agregar un activador de tabla.
MySQL aceptó recientemente UUID como parte de su paquete de base de datos, y no es tan rico en funciones como nos gustaría.
http://www.phpbuilder.com/board/showthread.php?t=10349169
fuente
Creo que no puedes :
fuente
getdate()
ni siquiera es una función de MySQL. El enlace en la respuesta explica la única excepción: «puede especificar CURRENT_TIMESTAMP como predeterminado para una columna TIMESTAMP» .Tenga en cuenta que los
UUID()
retornos de MySQLCHAR(36)
y el almacenamiento de UUID como texto (como se muestra en las otras respuestas) es obviamente ineficiente. En su lugar, la columna debería serBINARY(16)
, y puede usarlaUUID_TO_BIN()
al insertar datos yBIN_TO_UUID()
al leerlos.Tenga en cuenta que, dado que MySQL no sabe realmente que se trata de un UUID, puede ser difícil solucionar problemas almacenados como binarios. Este artículo explica cómo crear una columna generada que convertirá el UUID en texto según sea necesario sin ocupar espacio ni preocuparse por mantener sincronizadas las versiones binarias y de texto separadas: https://mysqlserverteam.com/storing-uuid-values-in -mysql-tables /
fuente
No estoy seguro de si las respuestas anteriores son para una versión anterior, pero vi en alguna parte que puede hacer esto usando la función unhex (). Lo probé y funciona. (maria db versión 10.2)
Tu puedes hacer
y funciona. Para ver el uuid simplemente haz hex (column_name).
fuente
En MariaDB a partir de la versión 10.2.1 puedes. Consulte su documentación .
fuente