Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: NOT NULL nie daje efektów
Forum PHP.pl > Forum > Bazy danych > MySQL
olszam
Mam dziwny problem, otóż sprawdzałem sobie teraz sqla z dodawaniem rekordów, wszystkie kolumny są ustawione na NOT NULL, ale mimo tego gdy wywołam jakieś zapytanie typu że wszystkie pola są puste albo kilka z nich to i tak zapytanie zadziała i wrzuci te puste rekordy.
Pyton_000
pusty != Null

lbo musisz ustawić NULL albo nie wrzucać tego pola w zapytaniu.
olszam
Czyli nie ma wyboru i muszę się bawić z warunkami.

A w mysql była może taka możliwość by dodawać wartości nie mniejsze niż dany znak, czy to sprawdzanie muszę raczej dać w php?
markonix
Cytat(olszam @ 5.03.2015, 23:34:39 ) *
Mam dziwny problem, otóż sprawdzałem sobie teraz sqla z dodawaniem rekordów, wszystkie kolumny są ustawione na NOT NULL, ale mimo tego gdy wywołam jakieś zapytanie typu że wszystkie pola są puste albo kilka z nich to i tak zapytanie zadziała i wrzuci te puste rekordy.


Z ciekawości - a jakiego efektu się niby spodziewałeś? Liczyłeś, że MySQL zwróci coś w stylu "nie wypełniono wszystkich pól"? smile.gif

Cytat(olszam @ 6.03.2015, 00:23:50 ) *
Czyli nie ma wyboru i muszę się bawić z warunkami.

A w mysql była może taka możliwość by dodawać wartości nie mniejsze niż dany znak, czy to sprawdzanie muszę raczej dać w php?

Oczywiście w PHP. I pisz poprawniej bo co ma niby znaczyć "wartości nie mniejsze niż dany znak". MySQL nie waliduje danych, ma jedynie typy danych + ewentualnie długość pola. Ale to ponownie- nie służy walidacji, a optymalizacji przechowywania tych danych.
olszam
Cytat
Z ciekawości - a jakiego efektu się niby spodziewałeś? Liczyłeś, że MySQL zwróci coś w stylu "nie wypełniono wszystkich pól"?

No coś w tym stylu biggrin.gif.

Dzięki za pomoc, bo już myślałem że mysql mi ześwirował na lapku a tu się okazuje że ja mam łeb do bani biggrin.gif
viking
Nie do końca wink.gif Pytania masz słuszne tylko Mysql to tandeta w której od lat podstawowych rzeczy brakuje. To o co pytasz w każdej normalnej bazie występuje i nazywa się ograniczeniem sprawdzającym (CHECK CONSTRAINT). Czyli np definiujesz że w kolumnie wiek mogą się znaleźć wartość od 1 do najdłużej żyjący na ziemi człowiek. W Mysql można to zasymulować przez wyzwalacze (o ile oczywiście masz do nich dostęp). Kolejną bzdurą jest połączenie unique z not null. Mysql chyba ponownie jako jedyny dopuszcza ładowanie ile wejdzie powtarzalnych wartości.
Pyton_000
Cytat
Kolejną bzdurą jest połączenie unique z not null. Mysql chyba ponownie jako jedyny dopuszcza ładowanie ile wejdzie powtarzalnych wartości.

Ja nie widzę w tym nic głupiego. Null to wartość nieokreślona więc nie można stwierdzić czy jest unikalna czy nie.
viking
Przy określonej strukturze w pewnym momencie zaczyna leżeć integralność danych, zaczynasz zapychać tabele zdublowanymi rekordami które nic nie wnoszą i są wbrew założeniom. A z nulla i tak nic nie wywnioskujesz. Dlaczego w takim razie tylko w mysql można taki numer zrobić?

Prszykład dyskusji: http://stackoverflow.com/questions/3712222...que-constraints
Pyton_000
Wszystko możemy zastosować do stwierdzenia "Przy określonej strukturze w pewnym momencie"
To że Unique pozwala na Null to nie oznacza że musimy się rzucić na to i wszędzie gdzie się da upychać Null bo przecież można.
Żeby Null z Unique miał sens trzeba na prawdę mocno się zastanowić czy na prawdę potrzebujemy takiego rozwiązania.

Dla mnie jednym z takich rozwiązań gdzie mogę zastosować Null jest tabela z relacją 1:1 gdzie nie wywalamy kaskadowo a zamiast tego on delete set null. Dlaczego? Bo nie potrzebna mi informacja do kogo ten rekord należał, ważne jest jego istnienie. Mógłbym niby zostawić ID ale po co skoro null ułatwia sprawę i widać które rekordy są "archiwalne" bez właściciela bez zbędnego łączenia tabel.

Reasumując Null ma też swoje zalety jak i wady. Wszystko ma swoje wady i zalety i trzeba umieć myśleć. Kropka smile.gif
mmmmmmm
https://www.youtube.com/watch?v=emgJtr9tIME
Pyton_000
Dobre smile.gif
markonix
Cytat(mmmmmmm @ 6.03.2015, 14:13:29 ) *

Co do dzielenia przez zero to odpowiedź jest prosta:
https://dev.mysql.com/doc/refman/5.0/en/sql...ivision_by_zero

Co do reszty to już dłuższa dyskusja wink.gif (korzystam tylko z MySQL więc się w nią nie wdam bo nie mam porównania smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.