NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Jazyk SQL - nefunguje modifikátor DEFAULT a výčtový typ ENUM

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš Sladký:9.3.2017 11:37

Zdravím,

chtěl bych se zeptat, proč mi v konzoli při práci s MySQL databází hlási tento příkaz pro vytvoření tabulky chybu u modifikátoru DEFAULT:

CREATE TABLE uzivatele(
ID int AUTO_INCREMENT PRIMARY KEY,
jmeno varchar(60),
prijmeni varchar(60),
Skupina char(1) default('A')
);

Pokud tabulku vytvořím bez modifikátoru DEFAULT, vše funguje tak, jak má. Pokud pak chci upravit sloupec Skupina na výčtový datový typ, aby bylo možné zadávat pouze určité hodnoty, konzole hlásí také chybu:

alter table uzivatele modify Skupina char(1) enum ('A', 'B', 'C');

Mohl by mi někdo poradit, jak příkazy upravit tak, aby to fungovalo? S MySQL se teprve učím, ale při hledání na internetu jsem našel, že takto by to mělo fungovat, ale možná jsem něco špatně pochopil...

Díky moc za vysvětlení a upravení příkazů :)

 
Odpovědět
9.3.2017 11:37
Avatar
Odpovídá na Tomáš Sladký
Neaktivní uživatel:9.3.2017 12:02

Zkusil jsi jen DEFAUL 'A' bez závorek?

Nahoru Odpovědět
9.3.2017 12:02
Neaktivní uživatelský účet
Avatar
Odpovídá na Tomáš Sladký
Matúš Petrofčík:9.3.2017 12:05
CREATE TABLE uzivatele(
        ID int AUTO_INCREMENT PRIMARY KEY,
        jmeno varchar(60),
        prijmeni varchar(60),
        skupina char(1) default 'A'
);

U rôznych DB sa to môže mierne líšiť, pozri trebárs na https://www.w3schools.com/…_default.asp aké sú rozdiely.

Ten enum si pamätám zo školy, že sme nemali nejako extra používať ale myslím že sa to definuje takto:

alter table uzivatele modify skupina enum ('A', 'B', 'C'); -- bez toho char(1)

Na stackowerflow som našiel niečo takéto už pri vytváraní tabuľky:

CREATE TABLE enum_test (
    enum_fld ENUM('Yes', 'No') DEFAULT 'No' -- všimni si že sa neudáva typ stĺpca
);
Nahoru Odpovědět
9.3.2017 12:05
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Tomáš Sladký
Neaktivní uživatel:9.3.2017 12:05

A ten druhý příkaz nejspíš neprochází proto, že tam používáš dva typy - char a enum. Takže správně nejspíš

CREATE TABLE uzivatele(
ID int AUTO_INCREMENT PRIMARY KEY,
jmeno varchar(60),
prijmeni varchar(60),
Skupina ENUM('A','B','C') DEFAULT 'A'
);

https://dev.mysql.com/…en/enum.html

Nahoru Odpovědět
9.3.2017 12:05
Neaktivní uživatelský účet
Avatar
Odpovídá na Matúš Petrofčík
Neaktivní uživatel:9.3.2017 12:06

Tak on se udává typ, to je ten enum :) A předběhl jsi mě :D

Nahoru Odpovědět
9.3.2017 12:06
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Matúš Petrofčík:9.3.2017 12:07

Aha, vidíš, tak som sa aj ja niečo naučil :D Ale lepšie si mu to napísal.

Nahoru Odpovědět
9.3.2017 12:07
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Tomáš Sladký:9.3.2017 14:56

Díky moc, co se týká ENUM, mělo mě to napadnout - vím, že ENUM je zvláštní datový typ, ale jak jsem do toho koukal dlouho a stále dokola a s MySQL začínám, vůbec mi nedošlo, že tam mám vlastně dva datové typy....

Co se týká default bez závorek, zkouším to a funguje to, i když si myslím, že bez zárovek už jsem to zkoušel ještě než jsem sem psal a nešlo to, ale to nevadí, hlavní je, že to již funguje...

Díky moc všem za rychlé reakce a za rady, které pomohly :)

 
Nahoru Odpovědět
9.3.2017 14:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.