# MySQL

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

## 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/ Arxivat 2006-06-29 a Wayback Machine.).

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

El desenvolupament de MySQL es fonamenta en el treball dels desenvolupadors contractats per l'empresa MySQL AB els qui s'encarreguen de donar suport als socis comercials i usuaris de la comunitat MySQL i donar solució als problemes oposats pels usuaris. Els usuaris o membres de la comunitat MySQL poden reportar bugs revisant el manual en línia que conté les solucions a problemes oposats; l'historial de canvis Arxivat 2008-07-18 a Wayback Machine.; la base de dades bugs que conté bugs reportats i solucionats i en les llistes de correu MySQL .
A través de les llistes de correu els usuaris poden enviar preguntes i aquestes seran contestades per desenvolupadors brindant-los suport.

## Altres funcionalitats de les llistes de correu

* Anuncis: informen sobre noves versions de MySQL i programes relacionats.
* MySQL: llista principal de discussió de MySQL.
* Bugs: permet a la gent buscar i arreglar bugs.
* Temes interns: per a gent que treballa amb el codi de MySQL. És el fòrum per a discutir sobre el desenvolupament de MySQL.
* MySQLdoc: per a gent que treballa en documentació.
* Proves de rendiment: per a gent interessada en temes de rendiment no només de MySQL, sinó d'altres motors de bases de dades.
* Empaquetadores: per a discussions sobre empaquetamiento i distribució de MySQL.
* Java: discussions sobre MySQL Server i Java.
Altres llistes de correu són: MyODBC, Eines GUI, Cluster, Dotnet, PlusPlus i Perl.
Addicional a les llistes de correu, es troba el suport d'IRC de la comunitat MySQL. A més, hi ha suport a través de fòrums agrupats en categories tals com: Migració, Ús de MySQL, Connectors MySQL, Tecnologia MySQL i Negocis.

## Estructures organitzatives/associatives o de decisió

L'adreça i el patrocini dels projectes MySQL estan a càrrec de l'empresa MySQL AB qui posseeix el copyrigth del codi font MySQL, el seu logo i marca registrada. MySQL, Inc. i MySQL GmbH són exemples d'empreses subsidiàries de MySQL AB. Estan establertes als Estats Units i Alemanya respectivament. MySQL AB, compta amb més de 200 empleats en més de 20 països i funcionen sota l'estratègia de teletreball.
Al gener del 2008 Sun Microsystems anuncia la seva compra.

## Indústria relacionada

La indústria radica en la venda de productes programari i d'alguns serveis relacionats a nombroses empreses que utilitzen aquests productes.
MySQL AB classifica els productes així:
* MySQL Enterprise: inclou MySQL Enterprise Server, Monitoreo de la xarxa MySQL, serveis de consulta i suport de producció MySQL
* MySQL Cluster
* MySQL Embedded Database
* MySQL Drivers: per JDBC, ODBC i. Net
* MySQL Tools: MySQL Administrator, MySQL Query Browser, and the MySQL Migration Toolkit
* MaxDB: MaxDB és una base de dades de codi obert certificada per SAP/R3
Els ingressos d'aquesta empresa per la venda de llicències privatives dels seus productes i els serveis suma els O$12 milions.

## Llicencia

La llicència GNU GPL de MySQL obliga al fet que la distribució de qualsevol producte derivat (aplicació) es faci sota aquesta mateixa llicència. Si un desenvolupador desitja incorporar MySQL en el seu producte però desitja distribuir-ho sota una altra llicència que no sigui la GNU GPL, pot adquirir una llicència comercial de MySQL que li permet fer justament això.

## Estat actual

La sèrie en desenvolupament de MySQL Server actualment, és la 5.1 a la qual s'afegeixen noves característiques en relació a la sèrie 5.0. La sèrie de producció actual de MySQL és 5.0, la penúltima versió de la qual estable és la 5.0.26 llançada a l'octubre de 2006. Actualment, es pot descarregar la sèrie 5.0.27. La sèrie de producció anterior va ser la 4.1, la versió estable de la qual és 4.1.7 llançada a l'octubre de 2004. A aquestes versions de producció només s'arreglen problemes, és a dir, ja no s'afegeixen noves característiques. I a les versions anteriors solament se'ls corregeixen bugs crítics.

## Usuaris destacats

* Amazon.com
* Coix Communications - La quarta televisió per cable més important dels EUA, tenen més de 3.600 taules i aproximadament dos milions d'insercions cada hora.
* Craigslist
* CNET Networks
* Digg - Lloc de notícies.
* flickr, usa MySQL per gestionar milions de fotos i usuaris.
* Google - Per al motor de recerca de l'aplicació AdWords.
* Joomla!, amb milions d'usuaris.
* phpBB, Un dels més famosos llocs de fòrums, amb milers d'instal·lacions i amb milions d'usuaris.
* LiveJournal - Prop de 300 milions de pàgines servides cada dia.
* NASA
* NetQOS, usa MySQL per a la gestió d'algunes de les xarxes més grans del món com les de Chevron, American Express i Boeing.
* Nokia, usa un cluster MySQL per mantenir informació en temps real sobre usuaris de xarxes de mòbils.
* Omniture
* Sabre, i el seu sistema de reserva de viatges Travelocity
* Slashdot - amb prop de 50 milions de pàgines servides cada dia.
* Wikipedia, serveix més de 200 milions de consultes i 1,2 milions d'actualitzacions cada dia, amb pics d'11.000 consultes per segon.
* WordPress, amb centenars de blogs allotjats en ell.
* Yahoo! - per a moltes aplicacions crítiques.

## Referències

* ↑ mtop: monitoreo de càrrega en MySQL
* ↑ «B.3. Changes in Release 3.23.x (Lifecycle Support Ended)». Oracle. Arxivat de l'original el 2013-04-04. [Consulta: 24 agost 2010].
* ↑ «B.2. Changes in Release 4.0.x (Lifecycle Support Ended)». Oracle. Arxivat de l'original el 2013-04-04. [Consulta: 24 agost 2010].
* ↑ «B.1. Changes in Release 4.1.x (Lifecycle Support Ended)». Oracle. Arxivat de l'original el 2013-04-04. [Consulta: 24 agost 2010].
* ↑ «C.1. Changes in Release 5.0.x (Production)». Oracle. Arxivat de l'original el 2013-04-04. [Consulta: 24 agost 2010].
* ↑ «C.1. Changes in Release 5.1.x (Production)». Oracle. Arxivat de l'original el 2013-04-04. [Consulta: 24 agost 2010].
* ↑ «MySQL 5.5 Release Notes». Oracle. [Consulta: 20 juliol 2014].
* ↑ «MySQL 5.6 Release Notes». Oracle. [Consulta: 20 juliol 2014].
* ↑ «MySQL 5.7 Release Notes». Oracle. [Consulta: 20 juliol 2014].
* ↑ Alexa Internet - Website Information

## Vegeu també

* MariaDB
* PostgreSQL
* PHP
* Base de dades
* Bonsai cvs
* Appserv
* Firebird SQL
* phpMyAdmin
* BASAP

## Enllaços externs

* MySQL - Lloc web oficial
* http://www.openoffice.org/ (anglès) Inclou una interfície gràfica per a MySQL
* http://www.mysqldevelopment.com Arxivat 2018-11-23 a Wayback Machine. (anglès) MySQL development