Sì, MySQL offre la possibilità di farlo.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
Non so per cosa stai usando questa tabella, ma sembra che questa chiave univoca potrebbe essere un valido candidato per la chiave primaria della tabella. Una chiave primaria è automaticamente anche una chiave univoca. Se decidi di impostarla come chiave primaria, procedi come segue:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(Se ricevi un messaggio di errore che indica che esiste già una chiave primaria, emetti ALTER TABLE MyTable DROP PRIMARY KEY
e quindi ripetere il comando precedente.)
Modifica: In risposta al commento dell'utente
Non puoi avere più righe con identico non NULL
valori per le colonne coperte dalla chiave univoca. Quindi non puoi avere due righe dove group_id = 0 AND user_id = 5
, Per esempio. 0 è un valore. Ma se rendi una o entrambe le colonne annullabili, puoi avere più righe identiche fino al posizionamento di NULL
S. Quindi potresti avere due (o più) righe in cui group_id IS NULL AND user_id = 1234
.
Condizione: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 un valore unico, ma probabilmente non li stai utilizzando.
Se rendi una o entrambe le colonne annullabili, la tua chiave univoca non può essere la chiave primaria:una chiave primaria deve trovarsi su colonne che sono NOT NULL
.
Supponiamo che tu abbia impostato questa chiave come chiave primaria e ora desideri consentire NULL
nel group_id
colonna. Non so quale tipo di dati group_id
è al momento; Presumo che sia attualmente INT UNSIGNED NOT NULL
, ma dovrai modificare quanto segue se non è questo. Non sarai più in grado di utilizzare questa chiave come chiave primaria. Ecco un comando che puoi 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`)