Condizionale chiave composita in MySQL?
-
20-09-2019 - |
Domanda
Quindi ho questa tabella con una chiave composita, in fondo 'userID' - 'data' deve essere univoco (vedere la mia altra domanda tabella SQL -? fila semi-unico )
Comunque, mi chiedevo se era possibile per rendere questo entra in vigore solo quando userID non è pari a zero? Con questo voglio dire, 'userID' - 'data' deve essere univoco per userids diversi da zero
?O sono abbaiare contro l'albero sbagliato?
Grazie
Mala
Soluzione
vincoli SQL si applicano ad ogni riga della tabella. Non si può fare di loro condizione in base a determinati valori di dati.
Tuttavia, se si potesse utilizzare NULL
invece di zero, è possibile aggirare il vincolo unico. Un vincolo univoco consente a più voci che si sono NULL
. La ragione è che l'unicità significa nessuna due possono esistere valori uguali. Uguaglianza significa value1 = value2
deve essere vero. Ma in SQL, NULL = NULL
è sconosciuto , non è vero.
CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));
INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo');
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
Fin qui tutto bene, ora si potrebbe pensare le seguenti dichiarazioni violerebbe il vincolo univoco, ma non è così:
INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');