MySQL - Alterar tabela para colocar automaticamente em um UUID

14

Ok, eu sei que já fiz isso antes. Mas eu não consigo descobrir pela vida. Eu criei uma tabela. Uma das colunas está identificada como "LogID", também é a chave primária.

Como altero para que esta coluna gere um UUID para cada nova entrada?

obrigado

Matt Winer
fonte

Respostas:

17

Basta criar um gatilho para executar antes da inserção para gerar o UUID para a coluna especificada.

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

A expressão UUID () gera um UUID quando chamado.

Infelizmente (AFAIK de qualquer maneira), o MySQL não permitirá expressões como um valor padrão para um campo. Como solução alternativa, você sempre pode definir o campo como nulo padrão e ter um gatilho que atualize o campo com um UUID na inserção.

ydaetskcoR
fonte
2

Tenho certeza que você ainda não pode , na verdade. Eu consideraria seriamente não usar um UUID como chave primária, em vez disso, usar um tipo de dados mais fino e mais agradável como INT. Você pode adicionar seu UUID como uma coluna separada e atualizá-lo por meio de um TRIGGER, se for o seu caso.

Avarkx
fonte
Os números inteiros são quebrados se você precisar que os registros sejam exclusivos em seu banco de dados.
Cfreak
1
Suspeito que exista um design de modelo maior ou um problema de ferramenta escolhido se os requisitos estiverem determinando o padrão de armazenamento do mecanismo nesse nível. Ter o UUID como uma coluna separada é realmente a melhor solução dos dois mundos nesse caso.
Avarkx 14/05
O UUID fica inchado depois de formatado para humanos. Se você deseja usar um UUID como chave primária, retire os traços e prenda-o. Se você precisar da versão formatada humana, poderá adicionar uma coluna gerada à tabela. SELECT LENGTH(UNHEX(REPLACE(UUID(),'-','')))= 16 bytes binários. Ainda maior do que INTmas muito melhor do queVARCHAR(36)
miknik
Mau conselho, miknik. Seu banco de dados será muito escalável se você usar um UUID como chave primária. Também pode ter 16 colunas inteiras separadas como uma chave primária composta. E abundância de fragmentação de índice! Sua chave primária agora é aleatória. Se o fizer, não use chaves estrangeiras. As junções mudam de O (n) para O (n ^ 2). Duas junções de O (n log10 (n)) a O (n ^ 3). Substitua n por 100.000 e subtraia a diferença.
TamusJRoyce
2

Eu apenas decidi incluir o comando UUID () na inserção do meu aplicativo.

Obrigado a todos.

Matt Winer
fonte