Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Potrzebna Modyfikacja Tabeli
Czatowicz
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.02.2013

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


Jestem nowy w MySQL'u więc napewno mój kod ma pełno błędów, może go ktoś poprawić?

id -> id uzytkownika, nie powtarzalne
numer -> numer nie powtarzalny.
ban -> cyfra 0 lub 1, (chyba) nie moze sie powtarzac ale niewiem czy to nie zepsuje jak inni by byli zablokowani
online -> cyfra 0 lub 1
ranga -> cyfry do 10.000 od 0, moze byc puste jedyne
nick -> do 32 znakow [A-Z][a-z][0-9],
timeregister -> czas rejestracji dzieki funkcji SQL NOW().

  1. CREATE TABLE users
  2. (
  3. id TINYINT PRIMARY KEY AUTOINCREMENT NOT NULL,
  4. numer TINYINT PRIMARY KEY NOT NULL,
  5. ban TINYINT(2) PRIMARY KEY NOT NULL,
  6. online TINYINT(2) NOT NULL,
  7. ranga TINYINT(2),
  8. nick VARCHAR(32) PRIMARY KEY NOT NULL,
  9. timeregister DATETIME NOT NULL
  10. );
  11. ALTER TABLE `users`
  12. DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


id ok, ustaw tylko jako INT
numer klucz unikalny
ban bez klucza
online ok
ranga int
nick ok, bez klucza
time ok

Go to the top of the page
+Quote Post
Czatowicz
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.02.2013

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


Cytat(Pyton_000 @ 2.02.2014, 16:01:33 ) *
id ok, ustaw tylko jako INT
numer klucz unikalny
ban bez klucza
online ok
ranga int
nick ok, bez klucza
time ok


gdzieś czytałem (na forum.php.pl) że INT bierze 4bajty a TINYINT 1, robi to jakas roznice?

edit: Dziękuje za pomoc smile.gif

edit2: Zrobiłem tak jak było kazane, mam nadzieje że już dobrze

  1. CREATE TABLE users
  2. (
  3. id INT PRIMARY KEY AUTOINCREMENT NOT NULL,
  4. numer TINYINT PRIMARY KEY NOT NULL,
  5. ban TINYINT(2) NOT NULL,
  6. online TINYINT(2) NOT NULL,
  7. ranga INT(2),
  8. nick VARCHAR(32) NOT NULL,
  9. timeregister DATETIME NOT NULL
  10. );
  11. ALTER TABLE `users`
  12. DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci


ps. nick mial byc tez nie powtarzalny, dodac PRIMARY KEY?

Ten post edytował Czatowicz 2.02.2014, 16:11:36
Go to the top of the page
+Quote Post
sazian
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


a spróbuj dodać drugi PRIMARY KEY i poznasz odpowiedź wink.gif

zobacz do dokumentacji to będziesz wiedział dlaczego int http://dev.mysql.com/doc/refman/5.0/en/integer-types.html
te kilka bajtów na rekord nie zrobi żadnej różnicy
Go to the top of the page
+Quote Post
Czatowicz
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.02.2013

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


Cytat(sazian @ 2.02.2014, 22:35:52 ) *
a spróbuj dodać drugi PRIMARY KEY i poznasz odpowiedź wink.gif

zobacz do dokumentacji to będziesz wiedział dlaczego int http://dev.mysql.com/doc/refman/5.0/en/integer-types.html
te kilka bajtów na rekord nie zrobi żadnej różnicy


edit: uu, niewiedziałem że tinyint ma taki mały limit...
edit2: to "SMAILLINT" chyba będzie lepsze niż "INT" bo dane do 10.000 znaków.
ps. kod podczas dodania wywalil bledy, musialem wrecz przeciwnie skasowac primary key zeby byl tylko jeden i do tego mialbyc tam gdzie auto_increment.. glupie troche

Ten post edytował Czatowicz 2.02.2014, 22:45:32
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie ma cyfry 10000. Jest co najwyzej liczba 10000.
INT to za duzy zakres dla 10000. Dostales linka do typow, wiec wybierz wlasciwy.

I co to za typy z (2)
Kolejna lektura
http://nospor.pl/int11-kontra-int.html

Cytat
kod podczas dodania wywalil bledy, musialem wrecz przeciwnie skasowac primary key zeby byl tylko jeden i do tego mialbyc tam gdzie auto_increment.. glupie troche
No wlasnie..... moze byc tylko jeden PRIMARY.... to nie glupota, to logiczna madrosc.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Czatowicz
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 14.02.2013

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


Cytat(nospor @ 2.02.2014, 22:41:10 ) *
I co to za typy z (2)
Kolejna lektura
http://nospor.pl/int11-kontra-int.html


przeczytałem lekture, wnioski mam takie że inni programisci a konkretniej początkujący (jak ja) używaja z braku wiedzy np.
INT(5) który wg. ich "Oznacza liczby 5-cio cyfrowe" ja to troche inaczej widziałem,
a konkretniej że TINYINT(2) przyjmie wartosci 1, 01, ale nie 001. (do 2 cyfr)
a jeśli o to nie chodzi to co robi (?...?) , ? bo nie znlazłem lub nie czytam z uwagą.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




(2) ma znaczenie gdy uzywasz ZEROFILL. Wyraznie o tym napisalem w arcie, ktory jest pisany po polsku.

Cytat
Liczby w nawiasach przy typach z rodziny INT służą tylko i wyłącznie w przypadku, gdy używamy ZEROFILL....
Tak więc zapis INT(1) nie ogranicza nas w żaden sposób do maksymalnie liczby 9 i w żaden sposób taka kolumna nie będzie zajmowała jednego bajta tylko nadal 4 jak każdy INT. Jeśli chcemy ograniczyć nasze pole do jednego bajta to poprostu użyjmy TINYINT. Jeśli chcemy ograniczyć kolumnę do 50tys (a konkretnie 65535) to używamy nie INT(5) tylko SMALLINT.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Kolejna mądrość:
Jak nie trzymasz liczb ujemnych to używaj Unsigner, dostajesz 2x większy zakres

Unikalność załatwiasz poprzez klucz Unique lub nadanie Primary Key na kilka pól (co przydaje się najczęściej w tabelach do powiązań n:M lub tam gdzie wyszukuje się po obu kolumnach)

Kolejna ważna uwaga. Jeżeli użyjesz Unsigned dla kolumny z PK to podczas robienia relacji poprzez Foreign Keys każde pole dowiązywane musi być z Unsigned inaczej się wysypie.
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 Aktualny czas: 22.08.2025 - 00:31