mysql duomen ų baz ė s kūrimas
DESCRIPTION
MySQL Duomen ų baz ė s kūrimas. Telekomunikacijų informacinės technologijos ( 2 dalis). Duomen ų bazės. Duomenų bazė (DB) – tai visuma tam tikru būdu organizuotos informacijos, kuriai tvarkyti ir išrinkti naudojamos specialios priemonės – duomenų bazės valdymo sistema (DBVS). - PowerPoint PPT PresentationTRANSCRIPT
11
MySQLMySQL
DuomenDuomenųų baz bazėės s kūrimaskūrimas
Telekomunikacijų Telekomunikacijų informacinės technologijosinformacinės technologijos
((22 dalis) dalis)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 22
DuomenDuomenų bazėsų bazės
Duomenų bazė (DB) – tai visuma tam tikru būdu organizuotos informacijos, kuriai tvarkyti ir išrinkti naudojamos specialios priemonės – duomenų bazės valdymo sistema (DBVS).
Duomenų bazėje:• duomenys apjungiami į lenteles,• kiekvieną lentelę sudaro tam tikras eilučių ir stulpelių
skaičius,• lentelės eilutė vadinama DB įrašu,• kiekvieną įrašą sudaro tam tikras informacijos vienetų
skaičius; kiekviename lentelės stulpelyje būna vienas toks vienetas.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 33
DuomenDuomenų bazėsų bazės
Duomenų bazė vadinama reliacine (relation - sąryšis), jei vienos lentelės įrašams tam tikru būdu atitinka įrašas ar įrašai kitoje lentelėje.
Reliacinės DB jėga slypi tame, kad tokios DB įgalina pagal užklausą iš susietų lentelių išrinkti duomenis ir juos pateikti reikiama forma.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 44
MySQLMySQL
DBVS kūrime pagrindinį vaidmenį vaidina trys firmos: • Oracle, kurios DBVS skirtos labai didelėms DB
(panaudojant Web’ą), kurti; jos pradinio lygio Standard Edition variantas 2003 m. gale kainavo 5995 USD;
• IBM, kurios DBVS DB2 skirta ir atskiriems kompiuteriams, ir serveriams; 2003 m. gale DB2 Express kainavo apie 4000 USD vienam procesoriui;
• Microsoft, kurios DBVS Microsoft SQL Server 2003 m. gale kainavo apie 5000 USD.
IBM ir Oracle yra įgijusios aukštą reputaciją stambiose kompanijose, o Microsoft - nedidelėse firmose ar didelių kompanijų skyriuose.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 55
MySQLMySQL
MySQL patraukli tuo, kad ji jos Unix versija yra nemokama. Ją galima gauti adresu http://www.mysql.com/. MySQL dirba ne tik Unix, bet ir Windows platformose.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 66
MySQLMySQL
MySQL kildinama iš DBVS UNIREG, sukurtos švedų kompanijos TcX užsakymu (1979 m.) ir mSQL, kuri neatitiko aukštų kompanijos TcX reikalavimų. Todėl 1995 metais buvo sukurta MySQL.
1995 metais pasirodžiusi MySQL versija 3.11.1 buvo skirta Linux ir Solaris operacinėms sistemoms, o šiandien MySQL dirba daugelyje platformų ir platinama ne tik dvejetainių kodų pavidalu, bet ir kartu su išeities tekstais.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 77
MySQL privalumaiMySQL privalumai
• Sparta. Laikoma, kad šiuo atžvilgiu MySQL yra viena iš sparčiausiai dirbančių DBVS, kurias galima sutikti rinkoje. http://www.mysql.com/information/benchmarks.html puslapyje galima rasti spartos testų rezultatus.
• Naudojimo paprastumas. Tai naši ir paprastai tvarkoma DBVS, kurią (lyginant su kitomis DBVS) žymiai paprasčiau įdiegti ir administruoti.
• Kaina. DBVS MySQL asmeniniams ir nekomerciniams poreikiams platinama nemokamai.
• Užklausų kalbos palaikymas. MySQL „supranta“ užklausų kalbą SQL (Structured Query Language), kuri naudojama praktiškai visose šiuolaikinėse DBVS.
• Galimybės. MySQL serveris leidžia prisijungti praktiškai neribotam vartotojų skaičiui.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 88
MySQL privalumaiMySQL privalumai
• Kreipimuisi į DBVS interaktyviu režimu galima naudoti įvairias sąsajas – tiek komandų eilutę naudojančias kliento programas, tiek Web naršykles arba kliento programas, dirbančias X Window sistemoje. Be to, MySQL galima naudoti ir įvairių programavimo kalbų (C, Perl, Java, PHP) programines sąsajas
• Pernešamumas. MySQL puikiai dirba valdant ne tik įvairioms Unix versijoms, bet ir Windows ar OS/2. Ją galima naudoti ir asmeniniuose kompiuteriuose, ir galinguose serveriuose
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 99
MySQL privalumaiMySQL privalumai
• Sąveika ir sauga. DBVS MySQL skirta
darbui tinkle, į ją galima kreiptis per
Internetą. Ji aprūpinta išvystyta apsugos
nuo nesankcionuotos kreipties sistema
• Atviras platinimas. MySQL distributyvai
prieinami naudojant Web naršyklę
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1010
MySQL privalumaiMySQL privalumai
Dar keletas vartotojui svarbių MySQL savybių:
• Ryšių optimizavimas, vienu metu sutvarkant didelį duomenų kiekį.
• Fiksuoto ir kintamo ilgio įrašai.
• Lanksti privilegijų ir slaptažodžių sistema.
• Iki 16 raktų lentelėje. Kiekvienas raktas gali turėti iki 15 laukų.
• Raktinių ir specialių laukų palaikymas operatoriuje CREATE.
• Įvairaus ilgio skaičių (nuo 1 iki 4 baitų - ints, float, double, fixed) ir kintamo ilgio eilučių palaikymas.
• …
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1111
MySQL privalumaiMySQL privalumai
• …
• Programavimo kalbų C ir Perl sąsajos [interfeisai]
• Sparti darbo su atmintimi sistema
• Lentelės patikrinimo ir „remonto“galimybė
• Apdorojant eilutes nekreipiama dėmesio į simbolių registrą
• Visi laukai turi reikšmes pagal nutylėjimą
• INSERT galima naudoti bet kokiam laukų skaičiui
• Lengva tvarkyti lenteles, įskaitant laukų ir raktų pridėjimą bei naikinimą
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1212
Ko reikia Ko reikia MySQLMySQL
Norint naudoti MySQL, reikia turėti tokius programinius produktus:
• SQL serverį. Ši programa realizuoja prieigą prie DB.
• Kliento programas kreipimuisi į serverį. Šios programos skirtos interaktyviam darbui su DB bei darbui su Web mazgu (serverio valdymui, kreipties teisėms nustatyti ir pan.).
• Kliento programas, skirtas savoms programoms kurti. Šios programos gali būti rašomos naudojant C (nes pati biblioteka parašyta naudojant C), taip pat ir kitas programavimo kalbas.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1313
DuomenDuomenų bazės kūrimasų bazės kūrimas
[MySQL] duomenų bazė kuriama tokia tvarka:
1. Sukuriama (inicializuojama) duomenų bazė.
2. Sukuriamos duomenų bazės lentelės.3. Lentelės užpildomos reikiama informacija,
naudojant įterpimo, išrinkimo (iš kitos duomenų bazės), modifikavimo ir pašalinimo operacijas.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1414
Pavyzdys ir komentaraiPavyzdys ir komentarai
Kiekvieną duomenų bazę sudaro viena (retai) ar kelios lentelės. Lentelėje mes išskiriame eilutes ir stulpelius, pavyzdžiui:
+------------+-------+---------+--------+------------------+
| kliento_id | vardas| pavard | tel | adresas |
+------------+-------+---------+--------+------------------+
| 1 | Jonas | Kuzma | 234567 | Daukanto 1 - 1 |
| 2 | Kostas| Kuzma | 373728 | Daukanto 12 - 10 |
| 3 | Ignas | Klimas | 449373 | Kanto 2 - 10 |
| 4 | Santa | Klausas | 799999 | Siaures polius 1 |
+------------+-------+---------+--------+------------------+
Viena lentelės eilutė - tai įrašas. Įrašą sudaro keli langeliai (laukai). Lauko turinys - atributas.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1515
Pavyzdys ir komentaraiPavyzdys ir komentarai
MySQL priklauso vadinamųjų reliacinių DB kategorijai. Reliacinę DB sudaro kelios lentelės, kuriose esanti informacija yra tam tikru būdu susijusi (relation - ryšys, sąryšis, tarpusavio priklausomybė).
SQL leidžia kombinuoti visose lentelėse esančius duomenis, sudarant ir analizuojant duomenų sąryšius.
Turėtąją lentelę+------------+-------+---------+--------+------------------+| kliento_id | vardas| pavard | tel | adresas |+------------+-------+---------+--------+------------------+| 1 | Jonas | Kuzma | 234567 | Daukanto 1 - 1 || 2 | Kostas| Kuzma | 373728 | Daukanto 12 - 10 || 3 | Ignas | Klimas | 449373 | Kanto 2 - 10 || 4 | Santa | Klausas | 799999 | Siaures polius 1 |+------------+-------+---------+--------+------------------+
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1616
Pavyzdys ir komentaraiPavyzdys ir komentarai
papildykime tokia:+----------+-------------------+------------------+| video_id | filmas | autorius |+----------+-------------------+------------------+| 1 | Star Wars | George Lucas || 2 | ET | Ignas Spielberg || 3 | Charlie's Angels | McG || 4 | Any Given Sunday | Oliver Stone || 5 | Hollow Man | Paul Verhoeven || 6 | Woman On Top | Fina Torres |+----------+-------------------+------------------+
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1717
Pavyzdys ir komentaraiPavyzdys ir komentarai
ir dar tokia:+------------+----------+| kliento_id | video_id |+------------+----------+| 2 | 6 || 4 | 2 || 1 | 1 || 1 | 2 || 1 | 3 |+------------+----------+
Kaip matome, pastaroji lentelė suriša dvi pirmąsias. Joje nurodyta, kuris asmuo kurią vaizdajuostę turi paėmęs.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1818
LenteliLentelių sąryšisų sąryšis+------------+-------+---------+--------+------------------+| kliento_id | vardas| pavard | tel | adresas |+------------+-------+---------+--------+------------------+| 1 | Jonas | Kuzma | 234567 | Daukanto 1 - 1 || 2 | Kostas| Kuzma | 373728 | Daukanto 12 - 10 || 3 | Ignas | Klimas | 449373 | Kanto 2 - 10 || 4 | Santa | Klausas | 799999 | Siaures polius 1 |+------------+-------+---------+--------+------------------+
+----------+-------------------+------------------+| video_id | filmas | autorius |+----------+-------------------+------------------+| 1 | Star Wars | George Lucas || 2 | ET | Ignas Spielberg || 3 | Charlie's Angels | McG || 4 | Any Given Sunday | Oliver Stone || 5 | Hollow Man | Paul Verhoeven || 6 | Woman On Top | Fina Torres |+----------+-------------------+------------------+
+------------+----------+| kliento_id | video_id |+------------+----------+| 2 | 6 || 4 | 2 || 1 | 1 || 1 | 2 || 1 | 3 |+------------+----------+
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 1919
MySQL iškvietimasMySQL iškvietimas
MySQL iškviečiama taip: $ mysql –u vartot -pTuomet reikia įvesti vartotojo slaptažodį.
Prisijungus prie programos, pasirodo maždaug toks pranešimas:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 80 to server version: 3.23.24-beta-debug
Type 'help;' or '\h' for help.
mysql>Dabar sistema laukia komandos.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2020
Duomenų bazėsDuomenų bazės sukūrimassukūrimas
Kadangi visos MySQL lentelės laikomos duomenų bazėje, reikia pradėti nuo jos sukūrimo, pavyzdžiui:
mysql> CREATE DATABASE katalogas;
Query OK, 1 row affected (0.05 sec)
Duomenų bazė, kurią tvarkysime, nurodoma komanda USE:
mysql> USE katalogas;Database changed
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2121
LenteliųLentelių sukūrimassukūrimas
Duomenų bazės lentelių sąrašą galoma pamatyti nurodžius komandą SHOW TABLES:
mysql> SHOW TABLES; Empty set (0.00 sec)
Duomenų bazės lentelės sukuriamos komanda CREATE TABLE.
CREATE TABLE komandos sintaksė:CREATE TABLE <table_name> (<field_name_1> <field_type_1> <modifiers>, <field_name_2> <field_type_2>
<modifiers>, ... , <field_name_n> <field_type_n> <modifiers>)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2222
CREATE TABLECREATE TABLE komandakomanda
Stulpelio aprašas: <field_name_1> <field_type_1> <modifiers>
Čia:<field_name_1> - stulpelio pavadinimas<field_type_1> - stulpelio tipas<modifiers> - papildoma informacija apie
stulpelį – parametraiarba PRIMARY KEY index_col_name,...- stulpelis indeksuojamas duomenų
paieškai paspartinti
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2323
SStulpelio tulpelio tiptipasas
Nurodoma:• kokio tipo reikšmės jame saugomos;• koks jų dydis (ilgis);• kaip to tipo reikšmės palyginamos ir rikiuojamos;• ar jame gali būti saugomos “tuščios” reikšmės;• ar to tipo reikšmės gali būti indeksuojamos.
Duomenų tipai: • skaičiai, • simbolių eilutės, • data ir laikas.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2424
Pagrindiniai Pagrindiniai žžymymėėjimaijimai
Laužtiniai skliaustai [ elem ] žymi nebūtiną informaciją (elemento elem gali ir nebūti)
length – maksimalus galimas simbolių skaičius vaizduojant informaciją
decimals – dešimtainių skaitmenų skaičius po kablelio
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2525
Pagrindiniai stulpelio Pagrindiniai stulpelio tiptipaiai
INT[(length)] [UNSIGNED] [ZEROFILL] arba INTEGER[(length)][UNSIGNED] [ZEROFILL]
arba FLOAT[(length,decimals)][UNSIGNED] [ZEROFILL]
arba DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
arba CHAR(length) [BINARY] arba VARCHAR(length) [BINARY] arba ...
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2626
Pagrindiniai Pagrindiniai skaitiniaiskaitiniai tiptipaaii
Pagrindiniai skaitinių duomenų tipai:
• INT (M), INTEGER(M) (sinonimai) – sveikieji skaičiai nuo -231 iki 231-1 (be ženklo - nuo 0 iki 232-1)
• FLOAT(M,D) – slankaus kablelio skaičiai: nuo -1038 iki 1038
• DECIMAL(M,D) – dešimtainiai skaičiai; priklauso nuo M ir D• CHAR(M) – M simbolių eilutė (fiksuoto ilgio: M<256;
trumpesnės eilutės gale pridedami “tarpai”)• VARCHAR(M) – M simbolių eilutė (kintamo ilgio: 0-M;
M<256)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2727
Simbolių eilutėsSimbolių eilutės
Simbolių eilutės ilgis M<256; užrašant eilutė iš abiejų galų “įrėminama” paprastomis arba dvigubomis kabutėmis: “Tai yra eilutė”.
Jei prisireikia naudoti specialiuosius simbolius, jų užrašymui tenka naudoti simbolių sekas:
• paprastai kabutei - \’• dvigubai kabutei - \”• naujai eilutei - \n
• tabuliacijai - \t• pasviram brūkšniui - \\
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2828
PaPapildompildomi stulpelio i stulpelio tiptipaiai
TINYINT[(length)] [UNSIGNED] [ZEROFILL] arba SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
arba BIGINT[(length)] [UNSIGNED] [ZEROFILL]
arba DOUBLE[(length, decimals)] [UNSIGNED] [ZEROFILL]
arba DATE
arba TEXT
arba SET(value1,value2,value3,...)
arba ...
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 2929
Papildomi Papildomi stulpeliostulpelio tiptipaaii
• TINYINT – nuo -128 iki 127 (be ženklo - nuo 0 iki 256)
• SMALLINT – nuo -32768 iki 32767 (be ženklo - nuo 0 iki 65535)
• BIGINT – nuo -263 iki 263-1 (be ženklo - nuo 0 iki 264-1)• DOUBLE(M,D) – dvigubo ilgio slankaus kablelio skaičiai;
nuo -10308 iki 10308 • DATA – data, vaizduojama formatu YYYY-MM-DD• TEXT – eilutė, kurią sudaro atitinkamo ilgio tekstas
(TINYTEXT – iki 28 baitų, …, LONGTEXT – iki 232 baitų)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3030
Duomenų Duomenų apimtisapimtis
• TINYINT – 1 baitas
• SMALLINT – 2 baitai
• INT – 4 baitai
• BIGINT – 8 baitai• FLOAT(M,D) – 4 baitai • DOUBLE(M,D) – 8 baitai • DECIMAL(M,D) – M baitų (MySQL < 3.23) arba M+2
baitai (MySQL >= 3.23); pvz., DECIMAL(4,2) diapazonas MySQL < 3.23 yra nuo -9,9 iki +9,9, o MySQL >= 3.23 - nuo -999,9 iki +999,9
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3131
SStulpelio tulpelio tiptipaaii
Kai kurie kiti duomenų tipai:• ENUM(“value1”, “value2”,…) – eilutės tipo
duomenų rinkinys; galima tik viena reikšmė iš šio sąrašo;
• SET(“value1”, “value2”,…) – eilutės tipo duomenų rinkinys; galimas bet koks reikšmių rinkinys iš šio sąrašo;
• DATA – nuo “1000-01-01” iki “9999-12-31”;• YEAR – nuo 1901 iki 2155.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3232
SStulpelio tulpelio tipo parinkimastipo parinkimas
Dažniausiai sutinkamas duomenų tipas – simbolių eilutės. Tai gana universalus tipas, nes į tokio tipo stulpelius galima įrašyti ne tik tekstą, bet ir skaičius, datas, telefono numerius.
Gal galima ir nenaudoti skaitinių ar datų tipo stulpelių?
Skaitiniai duomenys efektyviau laikomi kompiuterio atmintyje, kitaip interpretuojami rikiuojant. Pavyzdžiui, skaičius 3<12, tačiau eilutė “3”>”12”.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3333
SStulpelio tulpelio tipo parinkimastipo parinkimas
Parenkant stulpelio duomenų tipą, reikia atsižvelgti į tokius dalykus:
1. Kokio tipo duomenys (skaitiniai, tekstiniai, datos, ...) reikalingi konkrečiu atveju?
2. Koks duomenų reikšmių diapazonas (skaičiams, eilučių ilgiams, ...)? Ar skaitiniai duomenys bus tik teigiami (parametras UNSIGNED)? Jei simbolių eilutės – ar reikšmių aibė fiksuota (tipas SET)?
3. Apdorojimo spartą ir efektyvumą: skaitiniai duomenys apdorojami sparčiau nei simbolių eilutės, trumpesnės simbolių eilutės palyginamos sparčiau nei ilgesnės, lentelės su fiksuoto ilgio eilutėmis apdorojamos sparčiau nei lentelės su kintamo ilgio eilutėmis .
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3434
SStulpelio tulpelio tipo parinkimastipo parinkimas
Dar pora dalykų:4. Kaip bus palyginamos reikšmės? Ar simbolių eilutėse
reikės skirti mažąsias raides nuo didžiųjų?
5. Ar duomenys bus rikiuojami (rikiavimas atliekamas naudojant palyginimą)?
6. Ar duomenys bus indeksuojami? Reikia atminti, kad BLOB ir TEXT tipo duomenys nėra indeksuojami. Ankstesnėse versijose indeksuojami stulpeliai turi būti paskelbti NOT NULL.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3535
SStulpelio tulpelio ppaarametrairametrai
Priklauso nuo duomenų tipo:• sveikieji skaičiai gali būti tik teigiami (UNSIGNED) arba su
ženklu;• ZEROFILL nurodo, kad skaičiai iš kairės papildomi nuliais;• AUTO_INCREMENT nurodo, kad stulpelis užpildomas
nuosekliai didėjančiais skaičiais; toks stulpelis būtinai sveikųjų skaičių tipo, vienintelis lentelėje ir turi būti paskelbtas kaip pirminis raktas (PRMARY KEY);
• NULL nurodo, kad stulpelis užpildomas nuliais (kai neįvestos kitos reikšmės);
• NOT NULL nurodo, kad stulpelis privalo būti užpildytas (įvestos kokios nors reikšmės).
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3636
CREATE TABLECREATE TABLE komandakomandaPavyzdys:create table uzsakymai( -> uzs_nr int(4) NOT NULL auto_increment,
-> tel_id int(5) NOT NULL, -> kiekis int(3) NOT NULL, -> data varchar (10) NOT NULL, -> uzsakovas varchar (20) NOT NULL);Atkreipkime dėmesį į įvedamos komandos “sukapojimą”
į 6 eilutes: įvedus create table uzsakymai( ir paspaudus <Enter>, naujoje eilutėje pasirodo kvietimas -> tęsti komandą.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3737
CREATE TABLECREATE TABLE komandakomanda
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
• Sukuriant lentelę, galima naudoti TEMPORARY raktą. Tokia lentelė bus automatiškai pašalinta, nutraukus ryšį su serveriu. Tai reiškia, kad skirtingi prisijungimai gali naudoti tą patį vardą ir nebus konfliktų.
• MySQL 3.22 ar paskesnėse versijose galima naudoti raktus IF NOT EXISTS, tada nebus fiksuojama klaida, jei tokiu vardu lentelė jau egzistuoja.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3838
Klaidos ir jų taisymasKlaidos ir jų taisymas
Tarkime, padarėme klaidą – įvesdami komandą, praleidome “L”:
create table uzsakymai(
-> uzs_nr int(4) NOT NULL auto_increment,
-> tel_id int(5) NOT NUL,
-> kiekis int(3) NOT NULL,
-> data varchar (10) NOT Null,
-> uzsakovas varchar (20) NOT NULL);
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 3939
Klaidos ir jų taisymasKlaidos ir jų taisymas
Ekrane pasirodė toks pranešimas:
ERROR 1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NUL,
kiekis int(3) NOT NULL,data varchar (10) NOT Null,uzsako
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4040
Klaidos ir jų taisymasKlaidos ir jų taisymas
Tai reiškia, kad įvedant padaryta klaida. Klaidą apibūdinantis tekstas sako, kad reikia
patikrinti sintaksę maždaug toje vietoje, kur yra tekstas „NUL,
-> kiekis int(3) NOT NULL, ...“. Atidžiai pažiūrėję pastebime, kad turi būti NULL,
o ne NUL.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4141
Klaidos ir jų taisymasKlaidos ir jų taisymas
Pataisome: spaudžiame klavišą <>, iki pasirodys pirmoji eilutė create table uzsakymai( po to - <Enter> (kadangi jos taisyti nereikia), po to vėl spaudžiame klavišą <>, iki pasirodys antroji eilutėuzs_nr int(4) NOT NULL auto_increment, po to - <Enter> (kadangi ir jos taisyti nereikia), po to vėl
spaudžiame klavišą <>, iki pasirodys trečioji eilutė tel_id int(5) NOT NUL, dabar ją pataisome, žymiklį stumdydami rodyklių klavišais ir
:
tel_id int(5) NOT NULL,
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4242
Klaidos ir jų taisymasKlaidos ir jų taisymas
Taip tęsiame iki pabaigos, iškviedami likusias eilutes ir patvirtindami klavišu <Enter>:
mysql> create table uzsakymai( -> uzs_nr int(4) NOT NULL auto_increment,
-> tel_id int(5) NOT NULL, -> kiekis int(3) NOT NULL, -> data varchar (10) NOT Null, -> uzsakovas varchar (20) NOT NULL);
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4343
Klaidos ir jų taisymasKlaidos ir jų taisymas
Ekrane pasirodė kitoks pranešimas:
ERROR 1075: Incorrect table definition; There can only be one auto column and it must be defined as a key
Jis sako, kad automatiškai pildomas didėjimo tvarka stulpelis turi būti paskelbtas kaip pirminis raktas.
Pataisome:
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4444
Klaidos ir jų taisymasKlaidos ir jų taisymas
mysql> create table uzsakymai( -> uzs_nr int(4) NOT NULL auto_increment,
-> tel_id int(5) NOT NULL, -> kiekis int(3) NOT NULL, -> data varchar (10) NOT Null, -> uzsakovas varchar (20) NOT NULL,
-> primary key (uzs_nr) );Ekrane pasirodė toks pranešimas:
Query OK, 0 rows affected (0.01 sec)
Jis rodo, kad lentelė sukurta teisingai.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4545
Klaidos ir jų taisymasKlaidos ir jų taisymas
Pasitikriname:
mysql> show tables;
+-----------–-----+| Tables_in_stama |+-----------------+| uzsakymai |+-----------------+1 row in set (0.01 sec)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4646
Lentelės modifikavimasLentelės modifikavimas
Dažnai prisireikia modifikuoti lentelę:• keisti lentelės pavadinimą;• pridėti naują stulpelį;• keisti stulpelio pavadinimą;• išmesti stulpelį;• keisti anksčiau sukurto stulpelio tipą;• pridėti indeksą.
Tam tikslui skirta komanda ALTER TABLE
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4747
ALTER komandaALTER komanda
ALTER TABLE tbl_name alter_spec [, alter_spec ...]
alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER
col_name ]arba ADD INDEX [index_name]
(index_col_name,...)arba ADD PRIMARY KEY (index_col_name,...)arba CHANGE [COLUMN] old_col_name
create_definitionarba MODIFY [COLUMN] create_definitionarba DROP [COLUMN] col_namearba DROP PRIMARY KEYarba DROP INDEX index_namearba RENAME [AS] new_tbl_name
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4848
ALTER komandaALTER komanda
Jei prisireikia modifikuoti lentelę, komandą ALTER TABLE naudokite taip:
• jei keičiate lentelės pavadinimą:
ALTER TABLE <table_name> RENAME AS <new_table_name>
• jei pridedate naują stulpelį :
ALTER TABLE <table_name> ADD <new_field_name> <new_field_type>
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 4949
ALTER komandaALTER komanda
Jei prisireikia modifikuoti stulpelį:
• jei modifikuojate anksčiau sukurtą stulpelį:
ALTER TABLE <table_name> MODIFY <old_field_name> <new_field_type> <modifiers>
• jei modifikuojate kartu pervardydami anksčiau sukurtą stulpelį:
ALTER TABLE <table_name> CHANGE <old_field_name> <new_field_name> <new_field_type> <modifiers>
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5050
ALTER komandALTER komandos pavyzdos pavyzdžžiaiiai
Turime lentelę lent1, sukurtą tokiu būdu:
mysql> CREATE TABLE lent1 (a INTEGER,b CHAR(10));
Pakeisime jos pavadinimą iš lent1 į lent2:
mysql> ALTER TABLE lent1 RENAME lent2;
Pakeisime stulpelio tipą iš INTEGER į TINYINT NOT NULL (nekeisdami pavadinimo), o b tipą pakeisime iš CHAR(10) į CHAR(20), kartu pakeisime jo pavadinimą iš b į c:
mysql> ALTER TABLE lent2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5151
ALTER komandALTER komandos pavyzdos pavyzdžžiaiiai
Pridėsime naują TIMESTAMP stulpelį d:
mysql> ALTER TABLE lent2 ADD d TIMESTAMP;
Pridėsime stulpelio d indeksavimą ir stulpelį a padarysime pirminiu raktiniu:
mysql> ALTER TABLE lent2 ADD INDEX (d), ADD PRIMARY KEY (a);
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5252
ALTER komandALTER komandos pavyzdos pavyzdžžiaiiai
Panaikinsime stulpelį c: mysql> ALTER TABLE lent2 DROP COLUMN c;
Pridėsime naują AUTO_INCREMENT sveikųjų skaičių stulpelį c:
mysql> ALTER TABLE lent2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD INDEX (c);
Indeksavome c, nes AUTO_INCREMENT stulpeliai turi būti indeksuoti, be to, indeksuoti stulpeliai negali buti NULL.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5353
Informacijos apie DB gavimasInformacijos apie DB gavimas
Sukūrę DB ir jos lenteles, katrais jas užpildome ne iš karto. Jei pamiršome, kokie lentelių pavadinimai, kokie stulpelių pavadinimai ir jų tipai, galima informaciją apie visa tai pasitikslinti, naudojant įvairius komandos SHOW variantus.
Numatyta galimybė gauti tokią informaciją:•mysql> SHOW DATABASES; Pateikia
serveryje laikomų DB sąrašą.•mysql> SHOW TABLES; Pateikia
naudojamoje DB esančių lentelių sąrašą.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5454
Informacijos apie lentelę gavimasInformacijos apie lentelę gavimas
• mysql> SHOW COLUMNS FROM tbl_name; Pateikia informaciją apie nurodytos lentelės stulpelius. Vietoje šios galima naudoti komandą DESCRIBE tbl_name arba komandą EXPLAIN tbl_name
• mysql> SHOW INDEX FROM tbl_name; Pateikia informaciją apie nurodytos lentelės indeksus.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5555
Informacijos apie lentelę gavimasInformacijos apie lentelę gavimas
Apie aukščiau pavyzdyje pateiktą lentelę gautume tokią informaciją:
mysql> explain uzsakymai;
+-----------+-------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+----------------+| uzs_nr | int(4) | | PRI | NULL | auto_increment || tel_id | int(5) | | | 0 | || kiekis | int(3) | | | 0 | || data | varchar(10) | | | | || uzsakovas | varchar(20) | | | | |+-----------+-------------+------+-----+---------+----------------+5 rows in set (0.00 sec)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5656
Lentelės užpildymasLentelės užpildymas
Sukūrus lentelę, reikia ją užpildyti. Tai galima padaryti keliais būdais:
• Pridedant naujus įrašus, kai nurodomas kiekvieno stulpelio (ar tik nurodytų stulpelių) turinys;
• Pridedant naujus įrašus, kurie paimami iš kitos lentelės;
• Importuojant įrašus iš kito failo.
Tam tikslui skirta komanda INSERT
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5757
INSERT komandaINSERT komanda
INSERT komandos sintaksė pirmuoju atveju:
INSERT INTO <table_name> (field_name_1, field_name2, field_name_n) VALUES (value_1, value_2, value_n)
Čia išvardyti stulpelių pavadinimus reikia tik tuo atveju, jei nurodomos ne visų jų reikšmės.
Pavyzdys:mysql> INSERT INTO nariai (kliento_id, vardas, pavard, tel, adresas) VALUES
(NULL, ‘Jonas', 'Kuzma', '1234567', 'Daukanto 1 - 1');
Query OK, 1 row affected (0.06 sec)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5858
INSERT komandaINSERT komanda
INSERT komandos sintaksė antruoju atveju:
INSERT INTO <table_name> (field_name_1, field_name2, field_name_n) SELECT ...
Čia SELECT nurodo iš kitos lentelės išrenkamus duomenis.
Apie įrašų importavimą iš kito failo (trečiąjį atvejį) kalbėsime vėliau.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 5959
SELECT komandaSELECT komanda
Jei norime pažiūrėti, kaip atrodo sukurtoji lentelė, reikia panaudoti SELECT komandą, kuri išrinktų visus lentelės "nariai" įrašus:
mysql> SELECT * FROM nariai;+------------+-------+---------+---------+------------------+| kliento_id | vardas| pavard | tel | adresas |+------------+-------+---------+---------+------------------+| 1 | Jonas | Kuzma | 1234567 | Kampo 132-15 || 2 | Kostas| Kuzma | 8373728 | Daukanto 12 - 10 || 3 | Ignas | Klimas | 7449373 | Kanto 2 - 10 || 4 | Santa | Klausas | 9999999 | Siaures polius 1 |+------------+-------+---------+---------+------------------+
4 rows in set (0.00 sec)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6060
Lentelės turinio modifikavimasLentelės turinio modifikavimas
Įvedant informaciją į lentelę, dažnai įsivelia viena kita klaida, todėl prisireikia jas ištaisyti.
Tai galima padaryti dviem būdais:• išmesti eilutes, kuriose yra klaidos, ir jas
įvesti iš naujo;• pakeisti tik to stulpelio turinį, kuriame yra
neteisingi duomenys.
Taisymo būdo pasirinkimas, aišku, priklausys nuo klaidos ar klaidų kiekio ir pobūdžio
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6161
Eilučių išmetimasEilučių išmetimas
Eilutės išmetamos naudojant komandą DELETE.Šios komandos sintaksė:
DELETE FROM tbl_name [WHERE where_definition] [LIMIT rows]
DELETE iš lentelės tbl_name pašalina eilutes, kurios tenkina nurodytą salygą where_definition, ir nurodo pašalintų irašų numerius.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6262
Eilučių išmetimasEilučių išmetimas
Pateikus DELETE komandą be WHERE dalies, bus pašalintos visos eilutes.
MySQL lentele tampa tuščia, ir tai žymiai greičiau, nei išmestume eilutes po vieną. Tokiu atveju DELETE parodo, kad pašalinta 0 eilučių.
Kol egzistuoja lentelę aprašantis failas `tbl_name.frm', lentelė gali būti atkurta, nors duomenų ar indekso failai ir sugadinti.
DELETE opcija LIMIT rows serveriui nurodo maksimalu skaičių eiluciu, kurias pašalinus gražinamas valdymas klientui. Tai daroma norint isitikinti, kad DELETE komanda neužima per daug laiko. DELETE komanda galima tuomet vel pakartoti.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6363
Eilučių išmetimasEilučių išmetimas
Pavyzdys:mysql> DELETE FROM nariai;Query OK, 0 rows affected (0.06 sec)
Bus pašalinti visi lentelės "nariai" įrašai.
Jei reikia pašalinti tik tuos lentelės "nariai" įrašus, kuriuose kliento_id = 16:
mysql> DELETE FROM nariai WHERE kliento_id = 16;
Query OK, 1 row affected (0.06 sec)
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6464
EiluEilutės turinio modifikavimastės turinio modifikavimas
Eilutės turiniui modifikuoti skirta komanda UPDATE.
Jos sintaksė:UPDATE [LOW_PRIORITY] tbl_name SET col_name1=expr1,col_name2=expr2,...
[WHERE where_definition] [LIMIT #]
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6565
EiluEilutės turinio modifikavimastės turinio modifikavimas
UPDATE atnaujina anksčiau sukurtos lentelės stulpelių reikšmes.
SET dalis nurodo, kurie stulpeliai turi būti pakeisti ir kokias reikšmes jie įgys.
WHERE dalis (jei ji yra) nurodo, kurios eilutės turi buti keičiamos. Jei WHERE dalies nera - atnaujinamos visos eilutės.
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6666
Eilutės turinio modifikavimasEilutės turinio modifikavimas
Pavyzdys: Jei reikia pakeisti Jono Kuzmos adresą
nauju:mysql> UPDATE nariai SET adresas = 'Kampo 132-15' WHERE kliento_id = 1;
Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6767
Eilutės turinio modifikavimasEilutės turinio modifikavimas
UPDATE komanda gali modifikuoti kelių įrašo stulpelių reikšmes:
mysql> UPDATE SET adresas = 'Kampo 12-1 , pavard= 'Kazokas’
WHERE kliento_id = 2;Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
2004-2012004-20111 S.MaciuleviS.Maciulevičiusčius 6868
Eilutės turinio modifikavimasEilutės turinio modifikavimas
Tuomet lentelė atrodys taip:
mysql> SELECT * FROM nariai;+------------+-------+-------------+---------+------------------+| kliento_id | vardas| pavard | tel | adresas |+------------+-------+-------------+---------+------------------+| 1 | Jonas | Kazokas | 1234567 | Kampo 12-1 || 2 | Kostas| Kuzma | 8373728 | Daukanto 12 - 10 || 3 | Ignas | Klimas | 7449373 | Kanto 2 - 10 || 4 | Santa | Klausas | 9999999 | Siaures polius 1 |+------------+-------+-------------+---------+------------------+
4 rows in set (0.00 sec)