Null mező mysql

belépés

Gyakran a fórumokon, és még a tankönyvekben írja, hogy jobb, ha nem használja a NULL mező MySQL. Ezek a kijelentések zavarba az a tény, hogy senki sem zavar, hogy miért NULL - gonosz. Ez a cikk célja, hogy kiderítse, mi is NULL MySQL és így nem az ördög szörnyű, mint amilyennek festik.







Mi NULL?

Egy példa. oldalak táblázat tartalmazza területen PR INT aláíratlan NULL. PR - egész érték, mely lehet nulla. Mi az értéke, hogy helyezze be, amikor a PR nem számított, ezért az ismeretlen? NULL.

Mennyire veszélyes a NULL?

Összehasonlítás NULL bármely más érték, még egy rokon (a legtöbb programozási nyelvek, különösen a PHP null, 0, hamis egy és ugyanaz, ha nem használják szigorú összehasonlítás, amely magában foglalja összehasonlítjuk típus) FALSE NULL. Ebből következik az első csapda.
Tegyük fel, hogy van egy tábla:

Adjunk hozzá 2 feljegyzések azt:

INSERT INTO felhasználók (név, család) VALUES ( 'Andrew' Romanov) ( 'Ivan', NULL);

Ha azt szeretnénk, hogy összekapcsolják az első és az utolsó név, kapott egy név mező, például egy ilyen kérés:

SELECT CONCAT (név, '', család) FROM `users`

MySQL nem felnőni az Ön elvárásainak. Ön kap egy NULL helyett Ivan.

Kicsit váratlan. nem igaz?
Tény, hogy nincs semmi meglepő, ha emlékszel, hogy minden műveletet egy NULL NULL visszatérés, kivéve a különleges műveletek tervezték, hogy a NULL: IS NULL, nem nulla, IFNULL ()

Rendezés NULL

Csak azt akarom, hogy megcáfolja egyes kifejezések a magyar MySQL kézikönyv, hogy amikor a rendezés az oszlopokat, amelyek a NULL érték NULL znachiniya ezek leggyakrabban fordul a tetején. Ez nem így van.

SELECT név, családi FROM `users` ORDER BY családi ASC

Null mező mysql

SELECT név, családi FROM `users` ORDER BY DESC család

Null mező mysql

Mint látható, NULL kell tekinteni a legalacsonyabb érték, és a rendezés érinti őt.

Csoportok és NULL

Ez egyszerű.
MySQL csoportosítva NULL valamint bármely egyéb területen.

Mi hozzá a felhasználók táblázatoszlopra pontszám INT aláíratlan NULL;

Null mező mysql






Kiszámítjuk, hogy hány felhasználó vette fel egy bizonyos mennyiségű pontot, azaz a csoport kiválasztása a területen pontszám
SELECT COUNT (*) FROM `pontszám users` GROUP BY pontszám

Amint látható, a MySQL csoportosított sorok 2 score = NULL

Indexek és NULL

Valahol tévútra megy, hogy a MySQL indexeket használja, ha az oszlop tudja fogadni NULL értékeket.
Ez nem így van!

Töltünk néhány kísérlet.

Jelölje ki az összes rekordot, amelyre pontszám = NULL. Ne felejtsük el, hogy meg kell tennie, hogy használja a NULLA építési
EXPLAIN SELECT * FROM `users` WHERE pontszám IS NULL

Jelölje ki az összes rekordot, amelyre a pontok száma több, például öt.
EXPLAIN SELECT * FROM `users` WHERE` score`> 5

Találunk a felhasználó, aki pontosan 7 pont
EXPLAIN SELECT * FROM `users` WHERE` score` = 7

Megállapíthatjuk, hogy a valóság megtévesztő és ott.
Ez biztos, hogy használni NULL-mezőt létrehozni az index, és az indexet fog működni.

Meg kell említeni, hogy milyen típusú egyedi index.
Megvizsgáltuk a fenti, hogy a MySQL NULL csoportok mind a rendes érték és az összes sort pontszám = NULL soroltuk egyetlen tuple. Ebből követheti a hamis következtetés, hogy nem használja az egyedi index, valamint egy NULL területen. Azonban ez nem az. Mert NULL UNIQUE index meglehetősen egyedi értéket, és a MySQL akadályok nélkül lehetővé teszi, hogy helyezze be több sort NULL értékek terén képviselő egyedi index.

Mikor kell használni NULL?

Korábban adtam a példát oldalakat tartalmazó tábla a mező a PR.
PR - az egész érték, mely lehet állítani, hogy 0, sőt, lehet, hogy „nem számít”. Hogyan kell végrehajtani tárolására, ezeket a tulajdonságokat az asztalra?

Azok, akik félnek, hogy egy NULL, és hozzon létre egy pr INT aláíratlan NOT NULL DEFAULT 0; kénytelen felvenni egy másik területen a táblázat, például pr_calculated tinyint (1) DEFAULT 0. szerint, ők ellenőrizze, hogy a PR számít, vagy sem. Ennek megfelelően, ha pr = 0 és pr_calculated = 0. eszközökkel hogy a PR valójában nem egyenlő nulla, és csak a nem számít. Vannak túl sok feltételt?

Miért adja fel, hogy a nyelv kínál „out of the box”?
NULL érték ezen a területen ideális. NULL - „nincs értéke”, azaz ez nem számít. Ha az érték nulla, akkor ez tényleg nulla. Ez egyszerű.

Egy második példa a megfelelő esetben a használata NULL - ezen a területen leszármazottja.

Mező egy leszármazott-id bejegyzések egy másik (vagy ugyanazon táblázatot). Egy példa egy ilyen mező lehet PARENT_ID.

Azok, akik félnek, hogy egy NULL, hozzon létre egy oszlopban parent_id INT aláíratlan NOT NULL DEFAULT 0. Ha PARENT_ID egyáltalán nem utal - ez tartalmazza a nulla értéket. Ebben az esetben, az építész azt feltételezi, hogy a táblázat nem lesz bejegyzés id = 0. érték egyetértenek, hogy a MySQL alapértelmezésben kezdődik a növekmény egységet, de ez nem jelenti azt, hogy a tábla nem jelenik meg a felvétel id = 0. felvétel is előfordulhat, mert az adatbázis nem tiltják.

Amikor létrehozunk egy mező PARENT_ID mint INT aláíratlan NULL. akkor csökkenti annak valószínűségét, hogy a vonal eredményeként minden olyan intézkedés jelzi keresztül parent_id a valóban meglévő vonal nullára! A MySQL, akkor nem hoz létre egy rekordot id = NULL. ahol ID avtoinkrementalnym területen.

Nincs okunk félni a NULL mezőket. Meg kell érteni, hogy jól a NULL MySQL nem nulla, és nem hamis - a hiánya értékeket. Tudnunk kell, hogyan működik a MySQL NULL: árnyalatot ott, de nem sokat. A MySQL nincsenek problémák indexelés NULL mezőket.

Vezető programozó Katin Sergey

Szeretné, hogy egy ingyenes SEO helyszíni ellenőrzés?