Jak wyświetlić ilość

0
mysql> select count(ido) from oceny where imie is not null;

wypsuje mi 1021 czemu? dałem warunek imie jest != od NULL więc powinno nie zliczać tych ostatnich wierszy
oceny2.jpg
a mam jeszcze pytanie, jeśli wpisze komende

insert into oceny values(1018,'','','',0,0);

to okazuje się że kolejną wartościa klucza jest 1022 a nie 1018
czemu tak się dzieje? czemu nie dopisało kolejnego wolnego klucza tylko randomowy? jak zrobić aby dopisało kolejny wolny

0

Wydaje mi się, że tam powinna być wartość null a ty masz wartość ''

0
 select count(ido) from oceny where not imie='';

Hihhihiih racja, teraz działa

0

Staraj się nie używać "NOT" na poczatku nauki SQL.

0

Ale jeszcze jest podpunkt b tego pytania, czekający na odpowiedz :]]]

0
bartek164 napisał(a):

a mam jeszcze pytanie, jeśli wpisze komende

insert into oceny values(1018,'','','',0,0);

to okazuje się że kolejną wartościa klucza jest 1022 a nie 1018
czemu tak się dzieje? czemu nie dopisało kolejnego wolnego klucza tylko randomowy? jak zrobić aby dopisało kolejny wolny

bo pole jest autoincrement i olewa to co tam próbujesz wstawić. Wstawia po prostu kolejną wartość z numeratora

0

A przepraszam, żle napsiałem
chodzziło mi o to że wpisałem takie coś

INSERT INTO oceny VALUES(NULL,'','','',0,0);

i nie dostałem kolejnego numeru tylko trzeci po nim

0

"jakiego numeratora? następną wartośćią jest 1018, bo ostatni rekord to 1017, ale on wpisuje 1022"
aby na pewno? możesz sobie sam odpowiedzieć szukając największej wartości z ido lub sprawdzając, czy rzeczywiście nie ma rekordu o ido = 1018.
zresztą masz 1021 rekordów z ido, skoro każdy ma id i są numerowane po kolei, to następny automatycznie wygenerowany klucz będzie równy co najmniej 1022.
ps. pozdrawiam krakowski UP (? :P)

0
bartek164 napisał(a):

i nie dostałem kolejnego numeru tylko trzeci po nim

i oczywiście nie czytałeś nic z linka, który Ci dałem a jak czytałeś to nie zrozumiałeś. Numerator (sekwencja, sequence) to takie magiczne coś co się tworzy automatycznie, jest przypięte do pola autoinc, startuje od 1 i zwiększa się za każdym razem jak wstawiasz rekord do tabeli. Nie ma znaczenia czy insert się powiódł, czy zatwierdziłeś transakcję, czy potem ten rekord usunąłeś. Baza widzi polecenie INSERT... i pobiera wartość numeratora, zwiększa go o 1 i próbuje wstawić rekord. Dlatego możesz wstawić rekord z id=1, potem dwa razy możesz próbować dodać kolejny ale nie wyjdzie (np. wartość null dla pola not null) i przy czwartej próbie wstawienia dostaniesz id=4 a nie id=2 bo każda PRÓBA wstawienia rekordu powoduje zwiększenie numeratora o 1.

Można oczywiście ustawić ręcznie wartość bieżącą numeratora, w niektórych bazach można mu ustawić krok - np. kolejna wartość nie będzie się zwiększała o 1 a o 10 i inne jeszcze manewry na nim wykonać ale to są dodatkowe rzeczy, które trzeba samemu zrobić - domyślnie działa to tak jak opisałem wyżej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1