Dodaj do kolumny ograniczenie NOT NULL


Używam PHPMyAdmin i próbuję dodać ograniczenie NOT NULL do kolumny w mojej tabeli.
PHPMyAdmin akceptuje moje następne żądanie:
ALTER TABLE `wall` MODIFY `token_message` varchar(40) NOT NULL;

Ale nadal mogę wstawiać puste wiersze (= NULL), nie rozumiem dlaczego.
PS: jeśli masz zamiar podać mi inne zapytania, aby dodać to ograniczenie, pamiętaj, że wypróbowałem te 3, które nie działają w moim PHPMyAdmin (rodzaj błędu: # 1064 - masz błąd w składni SQL; sprawdź instrukcja):
ALTER TABLE `wall` ALTER COLUMN `token_message` SET NOT NULL;
ALTER TABLE `wall` ALTER COLUMN `token_message` varchar(40) NOT NULL;
ALTER TABLE `wall` MODIFY `token_message` CONSTRAINTS token_message_not_null NOT NULL;

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Napisałeś „Nadal mogę wstawiać puste ciągi (= NULL)”, co brzmi jak nieporozumienie. W SQL pusty łańcuch nie jest obliczany na NULL i odwrotnie. Spróbuj wstawić pustą linię i wykonaj
SELECT na ścianie, na której token_message ma wartość NULL
. Powinieneś odzyskać ciągi zerowe. Następnie spróbuj wykonać wstawkę, w której określasz
NULL
(bez cudzysłowów) jako wartość dla swojej kolumny, a powinieneś otrzymać oczekiwany błąd.
Jeśli te testy działają zgodnie z oczekiwaniami, wszystko jest w porządku, a Twój problem polega na tym, że chcesz zapobiec wstawianiu pustych wierszy. Czek

to pytanie
https://coderoad.ru/2514178/
sugestii lub po prostu sprawdź puste wiersze podczas weryfikacji przed żądaniem.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Składnia zmiany kolumny MySQL wymaga całkowitego przedefiniowania kolumny. Nie możesz po prostu zmienić jednego atrybutu kolumny, musisz całkowicie zmienić jego definicję:
ALTER TABLE wall MODIFY token_message varchar(40) NOT NULL default ''

Jedyną dozwoloną wersją „SET” jest zmiana wartości domyślnej.
połączyć:

http://dev.mysql.com/doc/refma ... .html
http://dev.mysql.com/doc/refma ... .html
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że to kwestia oczyszczenia twojego wkładu. Jak wspomniałem octern, pusty ciąg (") nie ma wartości NULL w sql. Najlepszym sposobem na rozwiązanie tego problemu jest zezwolenie na aktualizacje tylko przez procedurę magazynu, która usuwa puste wiersze, nawet spacje:
CREATE PROC InsertIntoMyDb (@MyVarChar VARCHAR(2000)) ASSET @MyVarChar = NULLIF(RTRIM(LTRIM(@MyVarChar)), '')INSERT INTO [TBL] (MyVarChar)
VALUES @MyVarChar

Spowoduje to obcięcie dowolnej liczby spacji do pustego ciągu, zmianę pustego ciągu na NULL, a następnie zapobiegnie wstawianiu NULL na podstawie ograniczenia, które już masz.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj użyć tego zapytania

Alter table table_name 
change column_name column_name datatype(length) definition

te.,

Alter table wall 
change tocken_message tocken_message varchar(40) NOT NULL DEFAULT

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się