Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Use várias colunas como identificador exclusivo para mysql


Sim, o MySQL fornece a capacidade de fazer isso.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)

Não sei para que você está usando esta tabela, mas parece que essa chave exclusiva pode ser uma forte candidata à chave primária da tabela. Uma chave primária também é automaticamente uma chave exclusiva. Se você decidir torná-la a chave primária, faça o seguinte:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)

(Se você receber uma mensagem de erro informando que já existe uma chave primária, emita ALTER TABLE MyTable DROP PRIMARY KEY e repita o comando acima.)

Editar: Em resposta ao comentário do usuário

Você não pode ter várias linhas com valores não NULL idênticos valores para as colunas cobertas pela chave exclusiva. Portanto, você não pode ter duas linhas em que group_id = 0 AND user_id = 5 , por exemplo. 0 é um valor. Mas se você tornar uma ou ambas as colunas anuláveis, você pode tem várias linhas que são idênticas até o posicionamento de NULL s. Portanto, você pode ter duas (ou mais) linhas em que group_id IS NULL AND user_id = 1234 .

Condição:O acima é verdadeiro para ambos os mecanismos de armazenamento MySQL comumente usados ​​(MyISAM e InnoDB). O MySQL possui mecanismos de armazenamento nos quais NULL é considerado um valor único, mas você provavelmente não os está usando.

Se você tornar uma ou ambas as colunas anuláveis, sua chave exclusiva não poderá ser a chave primária - uma chave primária deve estar em colunas que são NOT NULL .

Vamos supor que você fez dessa chave sua chave primária e agora deseja permitir NULL no group_id coluna. Não sei qual tipo de dados group_id está no momento; Presumo que seja atualmente INT UNSIGNED NOT NULL , mas você terá que modificar o abaixo se não for este. Você não poderá mais usar essa chave como sua chave primária. Aqui está um comando que você pode executar para fazer as alterações desejadas:
ALTER TABLE MyTable
    DROP PRIMARY KEY,
    MODIFY group_id INT UNSIGNED,
    ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)