In MySQL, un indice univoco ignorerà tutti i valori NULL
. Quindi c'è un po 'di trucco che potresti usare.
Si potrebbe considerare l'aggiunta di un bit
colonna Null (che può avere solo il valore 1 o 0):
ADD COLUMN `is_default` BIT NULL;
ADD UNIQUE INDEX `is_default_UNIQUE` (`is_default` ASC);
A questo punto, una riga può essere 1 (VERO), e il tentativo di aggiungere un'altra riga che è anche vero, si tradurrà in un errore:
1062: Duplicate entry '\x01' for key 'is_default_UNIQUE'
L'unico problema è che tutte le altre righe devono essere NULL
e non possono essere false come quella sarebbe anche contare come un valore unico.
(Questo non è proprio quello che gli indici sono destinati ad essere utilizzati per se)
fonte
2017-07-13 17:54:21
Sì. E sarebbe possibile utilizzare un vincolo di controllo per garantire che esista solo una riga (utilizzando la tecnica di Celko qui http://www.sqlmonster.com/Uwe/Forum.aspx/ms-sql-server/3453/How-to-Modify-a-views-SQL-source-from-a-program) –
esattamente quello che ho scritto sul mio commento - ma non sappiamo se è possibile riprogettare lo schema SQL. Il problema è definitivamente problem-by-design. Comunque questo è già stato discusso ... – Erik
Grazie Gilbert & Erik. Cambiare schema è una possibilità, quindi vorrei seguire questo approccio. – Reddy