MySQL és un sistema de gestió de bases de dades relacional (anglès RDBMS - Relational DataBase Management System) multi-fil (multithread) i multiusuari, que usa el llenguatge SQL (Structured Query Language).

MySQL ha esdevingut molt popular gràcies a la seva velocitat en executar consultes i el seu suport de forma nativa per part del llenguatge PHP (fins a la versió 4.X d'aquest llenguatge, ja que a partir de la versió 5 deixa d'estar-ho), en l'elaboració d'aplicacions web, en l'entorn del programari lliure.

Es pot fer ús de MySQL en aplicacions de tota mena (web, d'escriptori o d'altres) de forma lliure i gratuïta sota les condicions de la llicència GPL. Si es vol integrar MySQL com a part d'un producte privatiu cal adquirir una llicència d'ús específica per a aquest propòsit.

MySQL és un dels components de l'arquitectura LAMP (de Linux - sistema operatiu) i la WAMP (de Windows - sistema operatiu). Les tres sigles que segueixen (A,M i P) fan referència al conjunt format per Apache (servidor web), MySQL (base de dades) i PHP (llenguatge de programació). Una plataforma per a la construcció de llocs web utilitzant programari lliure.

Al contrari d'altres projectes com el servidor d'HTTP Apache, MySQL pertanyia a, i estava esponsoritzat per, l'empresa sueca MySQL AB. La companyia desenvolupava i mantenia el programari en la versió lliure i la comercial. Fins que el 16 de gener del 2008, Mysql AB fou adquirida per Sun Microsystems. I el 20 d'abril del 2009, Oracle Corporation adquirí Sun Microsystems i, per tant, MySQL.

Història del projecte SQL (Llenguatge de Consulta Estructurat) va ser comercialitzat per primera vegada en 1981 per IBM, el qual va ser presentat a ANSI i des de llavors ha estat considerat com un estàndard per les bases de dades relacionals. Des de 1986, l'estàndard SQL ha aparegut en diferents versions com per exemple: SQL:92, SQL:99, SQL:2003. MySQL és una idea originària de l'empresa opensource MySQL AB establerta inicialment a Suècia en 1995, els fundadors de la qual són David Axmark, Allan Larsson, i Michael "Monty" Widenius. L'objectiu que persegueix aquesta empresa és que MySQL compleixi l'estàndard SQL, però sense sacrificar velocitat, fiabilitat o usabilitat.

Michael Widenius en la dècada dels 90 va tractar d'usar mSQL per connectar les taules usant rutines de baix nivell ISAM, no obstant això, mSQL no era ràpid i flexible per a les seves necessitats. Això ho va portar a crear una API SQL denominada MySQL per a bases de dades molt similar a la de mSQL però més portable.

La procedència del nom de MySQL no és clara. Des de fa més de 10 anys, les eines han mantingut el prefix My. També, es creu que té relació amb el nom de la filla del cofundador Monty Widenius qui es diu My.

D'altra banda, el nom del dofí de MySQL és Sakila i va ser seleccionat pels fundadors de MySQL AB en el concurs ?Name the Dolphin?. Aquest nom va ser enviat per Ambrose Twebaze, un desenvolupador de programari de codi obert africà, derivat de l'idioma SiSwate, l'idioma local de Swazilàndia i correspon al nom d'una ciutat en Arusha, Tanzània, prop d'Uganda la ciutat origen d'Ambrose.

Llenguatges de programació Existeixen diverses APIs que permeten, a aplicacions escrites en diversos llenguatges de programació, accedir a les bases de dades MySQL, incloent C, C++, C#, Pascal, Delphi (via dbExpress), Eiffel, Smalltalk, Java (amb una implementació nativa del driver de Java), Lisp, Perl, PHP, Python, Ruby, Gambes, REALbasic (Mac i Linux), (x)Harbour (Eagle1), FreeBASIC, i Tcl; cadascun d'aquests utilitza una API específica. També existeix una interfície ODBC, anomenat MyODBC que permet a qualsevol llenguatge de programació que suporti ODBC comunicar-se amb les bases de dades MySQL. També es pot accedir des del sistema SAP, llenguatge ABAP.

Aplicacions MySQL és molt utilitzat en aplicacions web, com Drupal o phpBB, en plataformes (Linux/Windows-Apatxe-MySQL-PHP/Perl/Python), i per eines de seguiment d'errors com Bugzilla. La seva popularitat com a aplicació web està molt lligada a PHP, que sovint apareix en combinació amb MySQL. MySQL és una base de dades molt ràpida en la lectura quan utilitza el motor no transaccional MyISAM, però pot provocar problemes d'integritat en entorns d'alta concurrència en la modificació. En aplicacions web hi ha baixa concurrència en la modificació de dades i en canvi l'entorn és intensiu en lectura de dades, la qual cosa fa a MySQL ideal per a aquest tipus d'aplicacions. Sigui el que sigui l'entorn en el qual va a utilitzar MySQL, és important avançar monitoreos sobre l'acompliment per detectar i corregir errors tant de SQL com de programació.mtop: monitoreo de càrrega en MySQL

Versions de MySQL

Especificacions Plataformes MySQL funciona sobre múltiples plataformes, incloent: AIX BSD FreeBSD HP-UX GNU/Linux Mac US X NetBSD Novell Netware OpenBSD US/2 Warp QNX SGI IRIX Solaris SunOS SCO OpenServer SCO UnixWare Tru64 eBD Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Vista, Windows 7 i Windows Server (2000, 2003 i 2008) Windows. OpenVMS (vegeu: http://www.pi-net.dyndns.org/anonymous/kits/ ).

Característiques de la versió 5.0.22 Un ampli subconjunt d'ANSI SQL 99, i diverses extensions. Suport a multiplataforma Procediments emmagatzemats Disparadors (triggers) Cursors Vistes actualitzables Suport a VARCHAR INFORMATION_SCHEMA Manera Strict Suport X/Open XA de transaccions distribuïdes; transacció en dues fases com a part d'això, utilitzant el motor InnoDB d'Oracle Motors d'emmagatzematge independents (MyISAM per a lectures ràpides, InnoDB per a transaccions i integritat referencial) Transaccions amb els motors d'emmagatzematge InnoDB, BDB I Cluster; punts de recuperació (savepoints) amb InnoDB Suport per a SSL Query caching Sub-SELECTs (o SELECTs niats) Rèplica amb un mestre per esclau, diversos esclaus per mestre, sense suport automàtic per a múltiples mestres per esclau. indexing i buscant camps de text complets usant el motor d'emmagatzematge MyISAM Embedded database library Suport complet per a Unicode Conforme a les regles ACID usant els motors InnoDB, BDB i Cluster Shared-nothing clustering through MySQL Cluster

Característiques addicionals Usa GNU Automake, Autoconf, i Libtool per a portabilitat Ús de multifils mitjançant fils del kernel. Usa taules en disc b-tree per a recerques ràpides amb compressió d'índex Taules hash en memòria temporals El codi MySQL es prova amb Purify (un detector de memòria perduda comercial) així com amb Valgrind, una eina GPL Complet suport per a operadors i funcions en clàusules select i where. Complet suport per a clàusules group by i order by, suport de funcions d'agrupació Seguretat: ofereix un sistema de contrasenyes i privilegis segur mitjançant verificació basada en la host i el tràfic de contrasenyes està xifrat en connectar-se a un servidor. Suporta gran quantitat de dades. MySQL Server té bases de dades de fins a 50 milions de registres. Es permeten fins a 64 índexs per taula (32 abans de MySQL 4.1.2). Cada índex pot consistir des d'1 fins a 16 columnes o parts de columnes. El màxim ample de límit són 1000 bytes (500 abans de MySQL 4.1.2). Els clients es connecten al servidor MySQL usant sockets TCP/IP en qualsevol plataforma. En sistemes Windows es poden connectar usant named pipes i en sistemes Unix usant fitxers socket Unix. En MySQL 5.0, els clients i servidors Windows es poden connectar usant memòria compartida. MySQL conté el seu propi paquet de proves de rendiment proporcionat amb el codi font de la distribució de MySQL.

Característiques (versió 4.0) Inicialment, MySQL mancava d'elements considerats essencials en les bases de dades relacionals, tals com integritat referencial i transaccions. Malgrat això, va atreure als desenvolupadors de pàgines web amb contingut dinàmic, justament per la seva simplicitat.

A poc a poc els elements dels quals mancava MySQL estan sent incorporats tant per desenvolupaments interns, com per desenvolupadors de programari lliure. Entre les característiques disponibles en les últimes versions es pot destacar:

Ampli subconjunt del llenguatge SQL. Algunes extensions són incloses igualment. Disponibilitat en gran quantitat de plataformes i sistemes. Diferents opcions d'emmagatzematge segons si es desitja velocitat en les operacions o el major nombre d'operacions disponibles. Transaccions i claus foranes. Connectivitat segura. Replicació. Recerca i indexació de camps de text.

MySQL és un sistema d'administració de bases de dades. Una base de dades és una col·lecció estructurada de taules que contenen dades. Aquesta pot ser des d'una simple llista de compres a una galeria de pintures o el vast volum d'informació en una xarxa corporativa. Per agregar, accedir a i processar dades guardades en un computador, vostè necessita un administrador com MySQL Server. Atès que els computadors són molt bons manejant grans quantitats d'informació, els administradors de bases de dades tenen un paper central en computació, com a aplicacions independents o com a part d'altres aplicacions.

MySQL és un sistema d'administració relacional de bases de dades. Una base de dades relacional arxiva dades en taules separades en comptes de col·locar totes les dades en un gran arxiu. Això permet velocitat i flexibilitat. Les taules estan connectades per relacions definides que fan possible combinar dades de diferents taules sobre comanda.

MySQL és programari de font oberta. Font oberta significa que és possible per a qualsevol persona usar-ho i modificar-ho. Qualsevol persona pot baixar el codi font de MySQL i usar-ho sense pagar. Qualsevol interessat pot estudiar el codi font i ajustar-ho a les seves necessitats. MySQL usa el GPL (GNU General Public License) per definir que pot fer i que no pot fer amb el programari en diferents situacions. Si vostè no s'ajusta al GPL o requereix introduir codi MySQL en aplicacions comercials, vostè pot comprar una versió comercial llicenciada.

Millores futures Partició de la base de dades Còpia de seguretat en línia per a tots els motors d'emmagatzematge Replicació segura Restriccions a escala de columna Planificació d'esdeveniments Funcions XML

Característiques distintives Les següents característiques són implementades únicament per MySQL: Múltiples motors d'emmagatzematge (MyISAM, Merge, InnoDB, BDB, Memory/heap, MySQL Cluster, Federated, Archive, CSV, Blackhole i Example en 5.x), permetent a l'usuari escollir la que sigui més adequada per a cada taula de la base de dades. Agrupació de transaccions, reunint múltiples transaccions de diverses connexions per incrementar el nombre de transaccions per segon.

Tipus de compilació del servidor Hi ha tres tipus de compilació del servidor MySQL:

Estàndard: Els binaris estàndard de MySQL són els recomanats per a la majoria dels usuaris, i inclouen el motor d'emmagatzematge InnoDB. Max (No es tracta de MaxDB, que és una cooperació amb SAP): Els binaris inclouen característiques addicionals que no han estat el bastant provades o que normalment no són necessàries. MySQL-Debug: Són binaris que han estat compilats amb informació de depuració extra. No ha de ser usada en sistemes en producció perquè el codi de depuració pot reduir el rendiment.

Especificacions del codi font MySQL està escrit en una barreja de C i C++. Hi ha un document que descriu algunes de les seves estructures internes en http://dev.mysql.com/doc/internals/en/ (en anglès).

Desenvolupament del projecte