Sì, MySQL offre la possibilità di farlo.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Non so che cosa si sta utilizzando questa tabella per, ma suona come questa chiave unica potrebbe essere un candidato forte per la chiave primaria della tabella. Anche una chiave primaria è automaticamente una chiave univoca. Se si decide di farne la chiave primaria, quindi effettuare le seguenti invece:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(. Se si riceve un messaggio di errore che v'è già una chiave primaria, quindi emettere ALTER TABLE MyTable DROP PRIMARY KEY
e quindi ripetere il comando precedente)
Edit: In risposta al commento all'utente
non si può avere più righe con identiche NULL
valori non per le colonne coperti dalla chiave univoca. Quindi non puoi avere due righe dove, per esempio, group_id = 0 AND user_id = 5
. 0 è un valore. Ma se rendi una o entrambe le colonne nullable, puoi avere più righe identiche fino al posizionamento di NULL
s. Quindi potresti avere due (o più) righe dove group_id IS NULL AND user_id = 1234
.
Proviso: quanto sopra vale per entrambi i motori di archiviazione MySQL di uso comune (MyISAM e InnoDB). MySQL ha motori di archiviazione in cui NULL
è considerato come un valore univoco, ma probabilmente non li stai utilizzando.
Se si rende nullable una o entrambe le colonne, la chiave univoca non può essere la chiave primaria - una chiave primaria deve essere sulle colonne che sono NOT NULL
.
Supponiamo che tu abbia fatto di questa chiave la tua chiave primaria e ora vuoi consentire NULL
nella colonna group_id
. Non so quale tipo di dati è group_id
al momento; Suppongo che sia attualmente INT UNSIGNED NOT NULL
, ma dovrai modificare il seguente se non è questo. Non saresti più in grado di utilizzare questa chiave come chiave primaria. Ecco un comando da eseguire per apportare le modifiche desiderate:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)
C'è qualche ragione per cui group_id e user_id non sono le chiavi primarie per questa tabella? – Gus
Sono impostati come indici, ma l'impostazione su primaria fa la differenza per il tentativo di eseguire l'attività? Se è così, posso renderli principali. – user396404