Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ograniczenie CHECK
Forum PHP.pl > Forum > Bazy danych > MySQL
Rabarbar
Witam.
Mam problem z ograniczeniem CHECK.
Korzystam z MySQL'a na Ubuntu (wersja MySQL'a: 5.0.22-Debian_0ubuntu6.06.3-log ).
Biorąc za przykład:
Tworząc nową tabelę np.
CREATE TABLE xxx
(
Nazwisko varvhar(10),
Wiek int NOT NULL CHECK (Wiek>=0)
);
Następnie wstawiając nowe dane za "Wiek" np. -30 opcja check w ogole nie sprawdza tego warunku. Wpisuje poprostu do BD wartosci ujemne. Czy ktoś wie w czym problem?
dr_bonzo
Cytat
The CHECK clause is parsed but ignored by all storage engines.

http://dev.mysql.com/doc/refman/5.0/en/create-table.html


czyli

Nie da sie, to nie postgresql smile.gif
Cezar708
zawsze możesz po prostu stworzyć tabelę z INT UNSIGNED zamiast INT, i nie wpisze Ci wartości ujemnych.
nevt
co prawda MySQL nie obsługuje CHECK() ani nie ma wyzwalaczy TRIGGER(), ale w pewnych przypadkach można zmusić serwer do sprawdzania danych, czasami stosuję tą sztuczkę kiedy nie mam możliwości sprawdzenia danych przed zapisem do bazy... np. przy imporcie obcych danych z pliku ...

załóż sobie tabelkę np. _wiek, z jednym polem, powiedzmy _wiek :)
  1. CREATE TABLE `_wiek` (`_wiek` int(10) UNSIGNED NOT NULL, PRIMARY KEY (`_wiek`));

wypełnij pole _wiek kolejnymi liczbami od 1 do powiedzmy 120...
a do swojego pola Wiek w tabelce xxx dodaj klucz obcy...
  1. ALTER TABLE xxx ADD CONSTRAINT `wiek_check` FOREIGN KEY (`Wiek`) REFERENCES `_wiek` (`_wiek`) ON DELETE NO ACTION;

i teraz każda próba UPDATE lub INSERT tabeli xxx z polem Wiek o wartości nie występującej w tabelce _wiek zakończy się błędem...

powodzenia
Rabarbar
Wielkie dzięki wszystkim za odpowiedź. smile.gif
W takim razie lecę dalej z tematem.
Przerabiam sobie książkę rozdział po rozdziale więc mogę mieć więcej takich "ciekawych" pytań.
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.