RealNerds

MySQL operacje arytmetyczne, a null

written by Maciej Górecki on 2019-10-01

Jak wiadomo wartość NULL w bazach danych jest szczególna, oznacza jej brak. Mniej powszechną wiedzą jest to, że użycie NULLa w porównywaniu przy pomocy "=, >, <" nie zwróci nam true lub false ,tylko zawsze wartość NULL. Dlatego też, żeby uzyskać rekordy, dla których nie wypełniono pola, możemy użyć sformułowania: WHERE pole IS NULL.

Na przykład, żeby uzyskać użytkowników którzy nie mają wypełnionego numeru telefonu nie możemy zrobić:


SELECT * FROM users WHERE phone = NULL;

Tylko musimy skorzystać ze sformułowania IS NULL:


SELECT * FROM users WHERE phone IS NULL;

Źródła

Jak zreindeksować tabelę w MySQL

written by Maciej Górecki on 2019-09-01

Problem: Załóżmy, że mamy tabelę w której ID (int) nie ma zachowanej ciągłości (np usuwaliśmy niektóre wpisy bo były niepotrzebne) tzn. ID wygląda przykładowo tak:


id, city
1, Kraków 
2, Warszawa
5, Pcim
10, Tarnów
3121, Katowice
4332 Poznań

Chcemy teraz zrobić tak, żeby pola ID inkrementowały się o 1 rosnąco. Tzn. chcemy np. otrzymać rekordy, jak poniżej:


1, Kraków
2, Warszawa
3, Pcim
4, Tarnów
5, Katowice
6, Poznań

Rozwiązanie:


SET @newid=0;
UPDATE miasta SET id=(@newid:=@newid+1) ORDER BY id asc;

Uwaga, przy tabeli zawierającej dużo rekordów, może potrwać to długo.