68
1 MySQL MySQL Duomen Duomen ų ų baz baz ė ė s s kūrimas kūrimas Telekomunikacijų Telekomunikacijų informacinės informacinės technologijos technologijos ( ( 2 2 dalis) dalis)

MySQL Duomen ų baz ė s kūrimas

  • Upload
    vonda

  • View
    74

  • Download
    0

Embed Size (px)

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 Presentation

Citation preview

Page 1: MySQL Duomen ų  baz ė s  kūrimas

11

MySQLMySQL

DuomenDuomenųų baz bazėės s kūrimaskūrimas

Telekomunikacijų Telekomunikacijų informacinės technologijosinformacinės technologijos

((22 dalis) dalis)

Page 2: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 3: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 4: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 5: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 6: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 7: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 8: MySQL Duomen ų  baz ė s  kūrimas

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

Page 9: MySQL Duomen ų  baz ė s  kūrimas

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ę

Page 10: MySQL Duomen ų  baz ė s  kūrimas

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.

• …

Page 11: MySQL Duomen ų  baz ė s  kūrimas

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ą

Page 12: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 13: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 14: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 15: MySQL Duomen ų  baz ė s  kūrimas

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 |+------------+-------+---------+--------+------------------+

Page 16: MySQL Duomen ų  baz ė s  kūrimas

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 |+----------+-------------------+------------------+

Page 17: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 18: MySQL Duomen ų  baz ė s  kūrimas

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 |+------------+----------+

Page 19: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 20: MySQL Duomen ų  baz ė s  kūrimas

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

Page 21: MySQL Duomen ų  baz ė s  kūrimas

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>)

Page 22: MySQL Duomen ų  baz ė s  kūrimas

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

Page 23: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 24: MySQL Duomen ų  baz ė s  kūrimas

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

Page 25: MySQL Duomen ų  baz ė s  kūrimas

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 ...

Page 26: MySQL Duomen ų  baz ė s  kūrimas

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)

Page 27: MySQL Duomen ų  baz ė s  kūrimas

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 - \\

Page 28: MySQL Duomen ų  baz ė s  kūrimas

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 ...

Page 29: MySQL Duomen ų  baz ė s  kūrimas

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ų)

Page 30: MySQL Duomen ų  baz ė s  kūrimas

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

Page 31: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 32: MySQL Duomen ų  baz ė s  kūrimas

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”.

Page 33: MySQL Duomen ų  baz ė s  kūrimas

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 .

Page 34: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 35: MySQL Duomen ų  baz ė s  kūrimas

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).

Page 36: MySQL Duomen ų  baz ė s  kūrimas

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ą.

Page 37: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 38: MySQL Duomen ų  baz ė s  kūrimas

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);

Page 39: MySQL Duomen ų  baz ė s  kūrimas

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

Page 40: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 41: MySQL Duomen ų  baz ė s  kūrimas

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,

Page 42: MySQL Duomen ų  baz ė s  kūrimas

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);

Page 43: MySQL Duomen ų  baz ė s  kūrimas

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:

Page 44: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 45: MySQL Duomen ų  baz ė s  kūrimas

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)

Page 46: MySQL Duomen ų  baz ė s  kūrimas

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

Page 47: MySQL Duomen ų  baz ė s  kūrimas

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

Page 48: MySQL Duomen ų  baz ė s  kūrimas

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>

Page 49: MySQL Duomen ų  baz ė s  kūrimas

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>

Page 50: MySQL Duomen ų  baz ė s  kūrimas

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);

Page 51: MySQL Duomen ų  baz ė s  kūrimas

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);

Page 52: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 53: MySQL Duomen ų  baz ė s  kūrimas

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šą.

Page 54: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 55: MySQL Duomen ų  baz ė s  kūrimas

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)

Page 56: MySQL Duomen ų  baz ė s  kūrimas

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

Page 57: MySQL Duomen ų  baz ė s  kūrimas

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)

Page 58: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 59: MySQL Duomen ų  baz ė s  kūrimas

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)

Page 60: MySQL Duomen ų  baz ė s  kūrimas

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

Page 61: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 62: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 63: MySQL Duomen ų  baz ė s  kūrimas

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)

Page 64: MySQL Duomen ų  baz ė s  kūrimas

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 #]

Page 65: MySQL Duomen ų  baz ė s  kūrimas

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.

Page 66: MySQL Duomen ų  baz ė s  kūrimas

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

Page 67: MySQL Duomen ų  baz ė s  kūrimas

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

Page 68: MySQL Duomen ų  baz ė s  kūrimas

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)