Nauka SQL - błąd zapytania a typy danych

Odpowiedz Nowy wątek
2016-08-12 18:35
Krzywy Mleczarz
0

Witam,

Uczę się z książki "Rusz głowa SQL", natrafiłem na pewien problem, mam stworzyć tabele z informacjami o drinkach.

Mam tabele z wratoścami przykładowo:

Nazwa Blackthorn
Cena 8.75
Weglowodany 8.4
Kolor zolty
Lod T
Kalorie 33

No więc chce stworzyć zapytanie tworzące tabele (MySQL)

CREATE TABLE drinki_informacje
(
ID INT,
Nazwa VARCHAR(20), <-- same pola tekstowe
Cena NUMERIC(1,2), <-- liczba dziesiętna 2 miejsca po przecinku
Weglowodany NUMERIC(1,1), <-- liczba dziesiętna 1 miejsce po przecinku
Kolor VARCHAR(20), <-- pole tekstowe
Lod CHAR(1), <-- Wartość TAK (T) albo NIE (N), jedna litera
Kalorie INT <-- pole tekstowe
);

Gdzie tutaj jest błąd ? wyskakuje mi cały czas informacja o błędzie ale nie podaje gdzie. Pomożecie ?

Pozostało 580 znaków

2016-08-12 19:01
1

Podaje dokładnie gdzie i co:
For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'Cena').

Natomiast sama tabela może wyglądać tak:


CREATE TABLE drinki_informacje
(   ID INT,
    Nazwa VARCHAR(80), 
    Cena NUMERIC(6,2), 
    Weglowodany NUMERIC(6,2),
    Kolor VARCHAR(20),
    Lod Bool,
    Kalorie INT
)

Poza tym dla wartości logicznych nie char(1) tylko dedykowany typ Bool
Nie ma pojęcia co to za książką, ale wyrzuć ja ;-)

Pozostało 580 znaków

2016-08-12 19:07
Krzywy Mleczarz
0

Dzieki wielkie tylko pytanie,

dlaczego wartość np 7.50 zapisywać jako NUMERIC(6,2) wydawało mi się że podaje wartość NUMERIC(Liczba przed przecinkiem, liczba po przecinku), a nie mam 6 miejsc przed przecinkiem.

Rusz głową! Doczytaj sobie w manualu MySQL o typach numeryczny stało (decimal, numeric) i zmienno (single, real, double, itd.) przecinkowych, a nie w tej książce... - wloochacz 2016-08-12 19:10

Pozostało 580 znaków

2016-08-13 01:51
0

masz problem z typem Numeric(p,s) tutaj p - Precision oznacza ilość cyfr w całym znaku, s -Scale - liczbę cyfr po przecinku.
Przykładowo dla Twojego Numeric(6,2) max wartością będzie 9999,99 - próba wstawienia 10000 spowoduje błąd.

Dla 7,50 powinieneś zastosować Numeric(3,2) z założeniem, że wartość w kolumnie będzie zawsze < 10,

Oczywiście kolumna cena też do poprawy jak już słusznie napisał poprzednik, kalorie też bym zrobił w typie Numeric powiedzmy Numeric(3,0) bo raczej drink nie będzie miał więcej niż 1000 kcal:)

Raczej nie przekroczy 1000 kcal, ale... Dlatego już lepiej imo dać SMALLINT, który podobnie jak numeric(3,0) zajmie 2 bajty, a przechowa wartość znacznie większą. - wloochacz 2016-08-13 09:11

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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