MySQL - Alterar la tabla para colocar automáticamente un UUID


14

Ok, sé que he hecho esto antes. Pero no puedo por mi vida resolverlo. Creé una mesa. Una de las columnas está etiquetada "LogID", también es la clave principal.

¿Cómo lo modifico para que esta columna genere un UUID para cada nueva entrada?

Gracias

Respuestas:


17

Simplemente cree un activador para ejecutar antes de insertar para generar el UUID para la columna dada.

CREATE TRIGGER before_insert_mytable
  BEFORE INSERT ON mytable
  FOR EACH ROW
  SET new.LogID = uuid();

3

La expresión UUID () genera un UUID cuando se llama.

Desafortunadamente (AFAIK de todos modos) MySQL no permitirá expresiones como un valor predeterminado para un campo. Como solución alternativa, siempre puede establecer el campo en nulo predeterminado y tener un activador que actualice el campo con un UUID en la inserción.


2

Estoy bastante seguro de que todavía no puedes , en realidad. Consideraría seriamente no usar un UUID como clave principal, sino un tipo de datos más delgado y agradable como INT. Puede agregar su UUID como una columna separada y actualizarlo a través de un TRIGGER, si eso le conviene.


Los enteros se desglosan si necesita que los registros sean únicos en su base de datos.
Cfreak

1
Sospecharía que hay un diseño de modelo más grande o un problema de herramienta elegida si los requisitos dictan el patrón de almacenamiento del motor a ese nivel. Tener el UUID como una columna separada es en realidad la mejor solución de ambos mundos en este caso.
Avarkx

UUID se hincha una vez formateado para humanos. Si desea utilizar un UUID como clave principal, elimine los guiones y descomprímalo. Si necesita la versión con formato humano, puede agregar una columna generada a la tabla. SELECT LENGTH(UNHEX(REPLACE(UUID(),'-','')))= Binario de 16 bytes. Todavía más grande INTpero mucho mejor queVARCHAR(36)
miknik

Mal consejo, miknik. Su base de datos se escalará terriblemente si usa un UUID como clave principal. También podría tener 16 columnas enteras separadas como clave primaria compuesta. Y la fragmentación del índice en abundancia! Su clave principal ahora es aleatoria. Si lo hace, no use claves foráneas. Las uniones cambian de O (n) a O (n ^ 2). Dos uniones de O (n log10 (n)) a O (n ^ 3). Reemplace n con 100,000 y reste la diferencia.
TamusJRoyce

2

Simplemente decidí incluir el comando UUID () en el inserto desde mi aplicación.

Gracias a todos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.