Eu quero fazer algo assim:
create table app_users
(
app_user_id smallint(6) not null auto_increment primary key,
api_key char(36) not null default uuid()
);
No entanto, isso resulta em um erro, há uma maneira de chamar uma função para um valor padrão no mysql?
obrigado.
SET new.api_key = COALESCE(new.api_key, uuid())
para preservar os valores existentes.A partir do mysql v8.0.13 , é possível usar uma expressão como valor padrão para um campo:
fonte
Como já foi dito, você não pode.
Se você deseja simular esse comportamento, pode usar um gatilho desta forma:
Você ainda precisa atualizar as linhas existentes anteriormente, como este:
fonte
Infelizmente não, o MySQL 5 requer constantes para o padrão. O assunto foi discutido com muito mais detalhes no link abaixo. Mas a única resposta é permitir null e adicionar um gatilho de tabela.
O MySQL só recentemente aceitou UUID como parte de seu pacote de banco de dados e não é tão rico em recursos quanto gostaríamos.
http://www.phpbuilder.com/board/showthread.php?t=10349169
fonte
Eu acredito que você não pode :
fonte
getdate()
não é nem mesmo uma função MySQL. O link na resposta explica a única exceção: «você pode especificar CURRENT_TIMESTAMP como o padrão para uma coluna TIMESTAMP» .Observe que os
UUID()
retornos do MySQLCHAR(36)
e o armazenamento de UUIDs como texto (como mostrado nas outras respostas) é obviamente ineficiente. Em vez disso, a coluna deve serBINARY(16)
e você pode usarUUID_TO_BIN()
ao inserir dados eBIN_TO_UUID()
ao lê-los de volta.Observe que, uma vez que o MySQL não sabe realmente que este é um UUID, pode ser difícil solucionar problemas com ele armazenado como binário. Este artigo explica como criar uma coluna gerada que converterá o UUID em texto conforme necessário, sem ocupar qualquer espaço ou se preocupar em manter versões binárias e de texto separadas em sincronia: https://mysqlserverteam.com/storing-uuid-values-in -mysql-tables /
fonte
Não tenho certeza se as respostas acima são para uma versão mais antiga, mas vi em algum lugar que você pode fazer isso usando a função unhex (). Eu tentei e funciona. (maria db versão 10.2)
Você pode fazer
e funciona. Para ver o uuid apenas faça hex (column_name).
fonte
No MariaDB a partir da versão 10.2.1 você pode. Veja sua documentação .
fonte