Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ograniczenie CHECK
Rabarbar
post 6.12.2007, 13:07:42
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 5.12.2007

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
dr_bonzo
post 6.12.2007, 13:46:08
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Cezar708
post 6.12.2007, 13:48:43
Post #3





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


zawsze możesz po prostu stworzyć tabelę z INT UNSIGNED zamiast INT, i nie wpisze Ci wartości ujemnych.
Go to the top of the page
+Quote Post
nevt
post 6.12.2007, 14:59:47
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
Rabarbar
post 6.12.2007, 15:43:04
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 5.12.2007

Ostrzeżenie: (0%)
-----


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ń.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:55