sql >> Database >  >> RDS >> Mysql

Wat is deze operator <=> in MySQL?

TL;DR

Het is de NULL veilig gelijk telefoniste.

Zoals de gewone = operator, worden twee waarden vergeleken en het resultaat is ofwel 0 (niet gelijk aan) of 1 (Gelijk); met andere woorden:'a' <=> 'b' levert 0 op en 'a' <=> 'a' levert 1 op .

In tegenstelling tot de gewone = operator, waarden van NULL hebben geen speciale betekenis en geven dus nooit NULL als mogelijke uitkomst; dus:'a' <=> NULL levert 0 op en NULL <=> NULL levert 1 op .

Nut

Dit kan handig zijn wanneer beide operanden NULL . kunnen bevatten en je hebt een consistent vergelijkingsresultaat tussen twee kolommen nodig.

Een andere use-case is met voorbereide verklaringen, bijvoorbeeld:

... WHERE col_a <=> ? ...

Hier kan de tijdelijke aanduiding een scalaire waarde zijn of NULL zonder iets aan de zoekopdracht te hoeven veranderen.

Verwante operators

Naast <=> er zijn ook twee andere operatoren die kunnen worden gebruikt om te vergelijken met NULL , namelijk IS NULL en IS NOT NULL; ze maken deel uit van de ANSI-standaard en worden daarom ondersteund door andere databases, in tegenstelling tot <=> , wat MySQL-specifiek is.

Je kunt ze zien als specialisaties van MySQL's <=> :

'a' IS NULL     ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)

Op basis hiervan kan uw specifieke zoekopdracht (fragment) worden geconverteerd naar de meer draagbare:

WHERE p.name IS NULL

Ondersteuning

De SQL:2003-standaard introduceerde hiervoor een predikaat, dat precies werkt als MySQL's <=> operator, in de volgende vorm:

IS [NOT] DISTINCT FROM 

Het volgende wordt universeel ondersteund, maar is relatief complex:

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 1
     ELSE 0
END = 1


  1. Best practice:importeer mySQL-bestand in PHP; gesplitste zoekopdrachten

  2. Een afbeelding invoegen in de postgresql-database

  3. Het probleem met verloren updates bij gelijktijdige transacties

  4. Gebruik een trigger om een ​​invoeging of update te stoppen