# MySQL

MySQL datu-baseak kudeatzeko sistema bat da, MySQL AB enpresak lizentzia bikoitzpean garatzen duena. Alde batetik GPL lizentzia eskaintzen du, baina beraien produktuetan erabili nahi duten enpresentzako lizentzia erosteko aukera eskaintzen du.
Gaur egun, lau milloi ordenagailutan baino gehiagotan instalatuta aurkitu dezakegu , bai ordenagailu pertsonaletan software aske bezala erabilita edo produktu komertzialen osagai bezala enpresetako lizentziaren bidez.
Bere kodearen gehiena ANSI C programazio lengoaian idatzita dago.

## Proiektuaren historia

SQL lengoaia azaldu zenetik, estandar bezala hartu da erlaziozko datu basetan, 1986. urtean azaldu zen lehen estandarra eta horren ostean espezifikazio anitz agertu dira (SQL:92, SQL:99, SQL:2003). MySQL AB enpresaren ideia izan zen, SQL estandarra betetzea helburu zuen, arintasun, erabilgarritasun eta fidagarritasunik galdu gabe.

## Egitura logikoa

DBKS gehienek bezala MySQLek ere 3 mailatako egitura logikoa eskaintzen du.

### Programazio Lengoaiak

Aplikazio geruzan API anitz aurki daitezke, zeinek datu-baseak kudeatzeko sistema hau programazio lengoaia askoretan programatzeko aukera ematen dute. C, C++, C#, Pascal, Delphi (dbExpress bidez), Eiffel, Smalltalk, Java ( Baita ere, guztiz java lengoian programaturiko driver bat existitzen da), Lisp, Perl, PHP, Python, Ruby, REALbasic (Mac), FreeBASIC, eta Tcl bakoitza bere APIrekin.
ODBC interfaze berezi bat MySQL datubaserako ere badago, MyODBC deritzona. Honek ODBC interfazea inplementatzen duen edozein programazio lengoaiari MySQL datubasearekin komunikatzea ahalbidetzen dio.

### Motoreak

DBKS egiturarekin jarraituz, geruza logikoan biltegiratze sistemak erabiltzen ditu MySQL-ek. Hau da, MySQL-k funtzionatu ahal izateko motoreak erabiltzen ditu. Nagusiki horietako bi erabiltzen dira: MyISAM eta innoDB. Baina gehiago daude: Merge, Berkeley DB, Memory, Example, Federated, Archive, CSV, Blackhole...

#### MyISAM

Besterik ezeko biltegiratze motorea da. MyISAM-eko taula bakoitza 3 fitxategitan gordetzen da diskoan. Fitxategi hauen izenak taularen izen bera dute baina luzapena aldatzen zaie zein motakoak diren jakiteko: .frm luzapenak taularen egitura gordetzen du, datuak .myd fitxategietan gordetzen dira eta indizeek .myi luzapena dute. Datuak gordetzen diren moduagatik sistema eragileko independenteak dira. 232 errenkada onartzen ditu gehienez taula bakoitzean. 64 indize definitu daitezke gehienez taula batean. Eguneraketa konkurrenteak onartzen ditu. MyISAM tauletako indizeeek B-zuhaitza (B-tree) moduko egitura erabiltzen dute. Datu basea ondorengo egoeretan hondatu daiteke:
* Prozesuko idazketa baten erdian hiltzen bada.
* Ordenagailua itzaltzen bada
* Hardware akatsak
* Kanpoko programa batek eta zerbitzariak aldi berean datuak aldatzen badituzte
* Software akats bat

#### InnoDB

InnoDB motorra AISI transakzioak betetzeko diseinatuta dago. Commit, rollback eta crash-recovery aukerak eskaintzen ditu erabiltzailearen datuak babesteko. Datuen osotasuna bermatzeko gako arrotzen murriztapena betetzeko ahalmena du. InnoDB-k erabiltzaile datuak clustered index-etan gordetzen ditu gako nagusiko galdera orokorretan sarrera/irteerako eragiketak gutxitzeko.
InnoDB datu handiekin lan egin behar denean eraginkortasuna lortzeko diseinatuta dago. PUZaren erabilera eraginkorra ere egiten du. Datuentzako bere buffer eta cache propioak mantentzen ditu memoria nagusian. InnoDB-k taulak eta indizeak taula espazio batean gordetzen ditu hainbat fitxategi izan daitezkeelarik. Horrela taula bat 2GB baino handiagoa izan daiteke fitxategi sistema batzuetako muga gaindituz.
Ez da gomendagarria NFS fitxategi sistemarekin batera motore hau erabiltzea.
InnoDB-n erabiltzailearen edozein eragiketa transakzio baten barruan gertatzen da. Autocommit modua aktibatuta badago SQL galdera bakoitza transakzio bat bezala tratatzen da. Galdera ondo exekutatzen denean commit egiten da errorerik ez bada gertatu, bestela rollback edo commit egiten da errorearen arabera.
InnoDB-ek ere indizeak B-Zuhaitzetan gordetzen ditu non indizeen egiturak hostoetan gordetzen diren. Zuhaitzak %50-etik %93-ra beteta egon daitezke. InnoDB motorraren helburua transakzioetarako 2 fasetako sarrailak eta eraginkortasuna konbinatzea da. InnoDBk blokeaketa lerro mailan egiten ditu eta irakurketak sarrailarik erabili gabe egiten dira besterik ezean.

## Aplikazioak

Datu-baseak kudeatzeko sistema hau, sistema anitzetan erabiltzen da, bereziki LAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python) teknologiak erabilita. Adibidez Mediawiki edo Drupal proiektuak bere datu-basek MySQL bidez kudeatzen dituzte.

## Kanpo estekak

* (Ingelesez)(Frantsesez)(Italieraz) www.mysql.com, webgune ofiziala.
* (Gaztelaniaz) MySQL wiki-tutoriala.
* (Ingelesez) MySQL-ren erreferentzia eskuliburua
* (Gaztelaniaz) Datu-basea sortu con MySQL Workbench - Azaltzen duen tutorearena nola sortu datu-base batek erabiliz MySQL Workbench.
* Datuak: Q850
* Multimedia: MySQL / Q850
* MediaWiki: Manual:MySQL

## Aipamenak

* ↑ MySQL dokumentazioa. Biltegiratze motoreak