Titorial MySQL

Feito o :9 Maio 2010

– Que é MySQL?.
– Instalación.
– Configuración e GUI.
– Crear Usuarios e BBDD.
– Primeira ollada ao SQL.
– Táboas. Seguindo con MySQL
– Tipos de datos e Funcións.

Que é MySQL?.- MySQL é un dos servidores de bases de datos máis usados, que segue o esquema cliente/servidor e ao que se pode acceder a través dunha rede, é un sistema xestor de bases de datos relacionais (SGBDR) capaz de atender o mesmo tempo a varias aplicacións ou usuarios. E tamén é, Open Source(Código Aberto).
Unha base de datos é unha estrutura de datos complexos, está formada por táboas, rexistros, campos e as relacións entre eles. Pode ir dende unha simple axenda de teléfonos ata tódolos arquivos da policía ou da Seguridade Social.
Coma exemplo sinxelo de base de datos pode servir o DNI. O armario que garda o DNI podería corresponderse cunha base de datos, cada departamento do armario sería unha táboa, cada DNI viría sendo un rexistro e cada un dos datos que contén o DNI, un campo.

Instalación.-Imos facela a instalación de MySQL 5.0 sobre Debian, pero todo o que imos facer vale para Ubuntu. O xeito recomendado por MySQL para instalar en Linux é utilizando paquetes RPM Podémolos baixar dende aquí. Os RPMs de MySQL están xerados en SuSE Linux 7.3, pero deberían funcionar con calquera versión de Linux que soporte rpm e o uso de glibc. O xeito de instalalos en Debian é co paquete alien dende os repositorios oficiais, primeiro instalamos alien:
#aptitude install alien
E despois convertemos os rmp a deb:
#alien -d paquete.rpm
Ou ben directamente:
#alien -i paquete.rpm
Máis doado é facelo dende os repositorios de Debian, so temos que facer:
# aptitude install mysql-server mysql-client
Na maioría dos casos abonda para conseguir que funcione.
Moi importante: Durante a instalación, imos ter que dar un contrasinal, mentres non o troquemos, será o contrasinal de root para MySQL. Nada que ver co contrasinal do superusuario do sistema. Tampouco estaría de máis comprobar que existen o usuario e o grupo mysql, se fai falta, podémolos crear así:
#groupadd mysql
#useradd -g mysql mysql
Aquí hai unha relación dos sistemas operativos que soportan MySQL.

Configuración e GUI.-MySQL dispón de varias ferramentas con entorno gráfico que axudan na administración e configuración da base de datos. unha das máis sinxelas é MySQL-Administrator, é parte do MySQL e para instalalo so temos que facer:
#aptitude install mysql-admin
Se o executamos dende o menú ou a liña de comandos accedemos a todas estas opcións:

Tamén dispón dun editor chamado MySQL Query Browser que permite crear bases de datos, táboas e facer operacións cos datos almacenados nelas. Instálase así:
#aptitude install mysql-query-browser
O resultado de executalo é:

Hai outros ámbitos gráficos de administración que aínda que non pertencen a MySQL teñen unha gran popularidade. Entre eles imos subliñar:
phpMyAdmin.-É unha ferramenta feita en PHP para administrar MySQL a través de páxinas web. Na actualidade pode crear e eliminar bases de datos, crear, modificar e eliminar táboas, borrar, editar e engadir campos, executar sentenzas SQL, administrar claves, administrar privilexios, exportar datos en varios formatos e está dispoñible en 50 idiomas. É licenza GPL.

Pódese descargar dende aquí ou dende os repositorios Debian.
E como alternativa:
phpMinAdmin.-Ten unhas características semellantes a phpMyAdmin, tamén está feito en PHP, so que é un so módulo e é de uso libre baixo licenza Apache.

Pódese descargar dende aquí.
Ademais dos ámbitos gráficos tamén temos a liña de comandos da consola, que é a que imos usar neste titorial. Abrímola como root e despois imos o MySQL, facémolo segundo a primeira liña sinalada pola frecha vermella da figura de abaixo, como vedes e obrigatorio facelo como root xa que ata de agora é o único usuario, na liña seguinte pídenos o contrasinal, temos que darlle o que lle puxemos na instalación, despois dun saúdo amósanos a liña de comandos de MySQL, xusto enriba da segunda frecha vermella, a que nos amosa o comando para saír, que é quit, tal como vemos abaixo:

Isto dinos que xa estamos dentro do SGBDR.
Para deter o servidor Mysql dende a shell:
msql> mysql.server stop
E para arrancalo:
mysql> mysql.server star
E dende a liña de comandos podemos:
 # /etc/init.d/mysql restart     (reiniciar)
# /etc/init.d/mysql stop          
(parar)
# /etc/init.d/mysql start        
(iniciar)
A seguinte táboa mostra cada un dos indicadores que poderá ver e sintetiza o que din acerca do estado en que se encontra mysql:
Prompt Significado
mysql> Listo para un novo comando.
-> Esperando a seguinte liña un comando de múltiples liñas.
‘ > Esperando a seguinte liña unha cadea que comeza con apostrofo (‘ ‘ ‘).
” > Esperando a seguinte liña unha cadea que comeza con comiñas dobres (‘ ” ‘).
‘ > Esperando a seguinte liña unha cadea que comeza con til (‘ ‘ ‘).
/* > Esperando a seguinte liña un comentario que comeza con /*.
O prompt /* > foi introducido na serie 5.0 a partir de MySQL 5.0.6.
Aí imos escribir todas as instrucións que precisamos para sacarlle partido o noso servidor de bases de datos. Imos ver de tirarlle proveito.

Crear Usuarios e BBDD..-Crear unha conta de usuario e ben doado. A seguinte liña crearía un usuario de nome trisquel e de contrasinal trisquel:
mysql>CREATE USER trisquel@localhost IDENTIFIED BY ‘trisquel’;
A sentenza CREATE USER crea novas contas. Para usala débese ter o privilexio GRANT OPTION para a base de datos. Pódeselle dar un contrasinal á conta coa cláusula opcional IDENTIFIED.
Imos deixar que poida traballar coas bases de datos. A liña seguinte daríalle o noso usuario todos os privilexios sobre tódalas bases de datos do servidor:
mysql>GRANT ALL PRIVILEGES ON * . * TO trisquel@localhost IDENTIFIED BY
->’trisquel’;

Segundo a seguinte, o noso usuario tería todos os privilexios sobre a base de datos db1234:
mysql>GRANT ALL PRIVILEGES ON db1234 . * TO trisquel@localhost
->IDENTIFIED BY ‘trisquel’;

Poño deseguido a táboa dos privilexios:

Segundo a liña de abaixo o noso usuario poderia facer uso da opción SELECT en tódalas bases de datos:
mysql>GRANT SELECT ON * . * TO trisquel@localhost IDENTIFIED BY ‘trisquel’;
Para quitarlle tódolos privilexios:
mysql>REVOKE ALL PRIVILEGES ON *.* FROM trisquel@localhost;
E para desfacernos del pa sempre:
mysql>DROP USER trisquel@localhost;
GRANT e REVOKE permítelles aos administradores do sistema crear contas de usuario MySQL e conceder e revocar dereitos desas contas.
Unha vez que temos conta de usuario imos crear a base de datos. Isto faino a sentenza CREATE:
mysql>CREATE DATABASE db1234;
E para eliminala, DROP:
mysql>DROP DATABASE db1234;
A sentenza SHOW mostranos as bases de datos que existen actualmente no servidor:
mysql>SHOW DATABASES;
Para poder traballar con ela precisamos da sentenza USE, que ao igual que QUIT, non necesita que se poña un punto e coma ao final (aínda que pode facerse). A sentenza USE ten outra particularidade: debe escribirse nunha soa liña:
mysql>USE db1234;
As bases de datos só necesitan ser creadas unha vez, pero deben ser seleccionadas cada vez que se inicia unha sesión. Pode facerse a través do comando USE como se mostra enriba, ou pode indicar a base de datos na liña de comandos ao executar MySQL. Soamente temos que indicar o nome da base de datos a continuación dos parámetros de entrada:
mysql>mysql -u user -p db1234

Primeira ollada ao SQL.-MySQL cumpre co estándar SQL. A linguaxe de consulta estructurada SQL (Structured Query Language) é unha linguaxe declarativa de acceso a bases de datos relacionais que permite especificar diversos tipos de operacións nestas. Unha das súas características é o manexo da álxebra e o cálculo relacional permitindo efectuar consultas co fin de recuperar, dunha forma sinxela, información dunha base de datos, e facer trocos sobre ela. É unha linguaxe de cuarta xeración (4GL).
Imos ver as consultas antes de crear táboas, cargar datos, e recuperalos. Aquí veremos o ingreso de comandos, empregando consultas SQL para ir familiarizándonos con mysql.
Imos empezar cun comando que ordena ao servidor que mostre o seu número de versión e a data actual. Escribímolo a continuación do prompt mysql> e prememos Enter:
mysql>SELECT VERSION(), CURRENT_DATE;

Esta consulta dinos o seguinte:
Unha sentenza SQL acaba nun punto e vírgula. (Hai excepcións coma QUIT, mencionado anteriormente).
O mysql amosa os resultados da consulta en filas e columnas. A primeira fila contén etiquetas para as columnas. O resto das filas son os resultados da consulta. Cada fila supón un rexistro e cada columna un campo.
As palabras clave poden ingresarse en calquera combinación de minúsculas e maiúsculas. Ollade para a palabra reservada SELECT.

Non así os nomes das bases de datos, táboas, etc.

O feito de por unha maiúscula provoca un erro, ese nome de táboa non existe. Isto é así porque Linux fai diferenzas.

Táboas. Seguindo con SQL.-A creación da base de datos foi unha tarefa sinxela, pero ata agora permanece baleira, a execución de SHOW ensinanolo:
mysql>SHOW TABLES;
Obteríamos -> Empty set (0.00 sec)
Imos crear unha táboa:
mysql>CREATE TABLE taboa1 ( Id INT(9) NOT NULL AUTO_INCREMENT ,
–>descri VARCHAR( 100 ) NULL,
–>precio DECIMAL( 9, 3 ) NULL,
–> data DATE NULL ,
–>PRIMARY KEY ( Id ) ) ENGINE = MyISAM;

Para verificar que a táboa foi creada na forma esperada, utilizase a sentenza DESCRIBE:
mysql> DESCRIBE taboa1;
Desfacernos dunha táboa é moi doado e para elo temos DROP:
mysql>DROP taboa1;
Moito ollo DROP borra a táboa, non o contido, iso faino DELETE.
mysql>DELETE FROM taboa1;
Unha forma de encher unha base de datos baleira é cun arquivo de texto que teña un rexistro por liña e os campos separados polo carácter de tabulación ( é o que usa MySQL por defecto ). A seguinte sentenza, se temos un arquivo chamado pepe.txt, faino:
mysql>LOAD DATA LOCAL INFILE ‘/home/anxo/pepe.txt’ INTO TABLE taboa1;
Para ler un arquivo txt delimitado con vírgulas, a sentenza é:
mysql>LOAD DATA INFILE ‘/home/anxo/pepe.txt’ INTO TABLE taboa1
->FIELDS TERMINATED BY ‘,’;
Escribir un arquivo con campos delimitados por vírgulas:
mysql>SELECT * INTO OUTFILE ‘/home/anxo/pepe.txt’
->FIELDS TERMINATED BY ‘,’ FROM taboa1;
Se queremos engadir os rexistros un a un:
mysql>INSERT INTO taboa1 VALUES(1,’Valdorras’,’2010-01-01′,NULL);
As cadeas e as datas van entre comiñas simples. O formato da data é o inglés.
Para actualizar un rexistro:
mysql>UPDATE taboa1 SET descri=’Limia’ WHERE Id=1;
Esta liña trocaría o contido do campo descri condicionado polo valor de Id grazas a cláusula WHERE.
A parte difícil é decidir como vai ser a estrutura da base de datos: que táboas necesitará, e que columnas haberá en cada táboa. Pero esa xa é outra historia.

Tipos de datos e Funcións..-MySQL soporta tipos de datos numéricos, data e hora e cadeas de caracteres. A seguinte táboa contén os enteiros e os rangos que abranguen:

   Tipo Valor Mínimo Valor Máximo
TINYINT -128 127
0 255
SMALLINT -32768 327670
0 65535
MEDIUMINT -8388608 8388607
0 16777215
INT -2147483648 2147483647
0 4294967295
BIGINT -9,2233×10^18 9,2233×10^18
0 18,4467×10^18

Para declarar un enteiro: INT(n), onde n é o número de díxitos con arranxo a táboa precedente.
Despois dos enteiros veñen os decimais, e a forma de declaralos, é:
DECIMAL(E,D)
Onde E<=64, e D<=30, o que se traduce nun número de 64 díxitos, 30 son decimais e o resto forman a parte enteira.
Os tipos de datos DOUBLE, FLOAT e REAL son de vírgula flotante. O tipo DECIMAL é de punto fixo e os cálculos son exactos ata 64 díxitos. Antes de MySQL 5.0.3 permitíanse 254 díxitos, pero a precisión é menor. Os cálculos anteriormente facíanse con punto flotante de dobre precisión, que ten unha precisión de 52 bits (15 díxitos decimais aproximadamente). Neste enderezo hai algúns exemplos de valores de vírgula flotante.
Para representar a data e a hora MySQL ten os seguintes tipos:

Tipo Valor
DATETIME ‘aaaa-mm-dd hh:mm:ss’
DATE ‘dddd-mm-aa’
TIMESTAMP 0000000000000
TIME ‘hh:mm:ss’
YEAR 0000

Todo sobre funcións data e tempo aquí.
Hai que ter en conta que MySQL fai unha validación básica das datas. Así os rangos para ano, mes e día son: 1000 a 9999. 00 a 12 e 00 a31. Isto permitiría almacenar datas coma: 2010-04-31.
Os separadores, entre outros son: ‘-‘, ‘/’, ‘.’, ‘@’, para a data, e: ‘:’, ‘+’, ‘*’, ‘^’ para o tempo.
Para o almacenamento de cadeas MySQL dispón dos seguintes tipos:

Tipo Valor
CHAR 0 a 255
VARCHAR 0 a 255
BINARY 0 a 255
VARBINARY 0 a 255
TINYBLOB, TINYTEXT L+1 byte, sendo L < 2^8
BLOB, TEXT L+2 bytes, sendo L < 2^16
MEDIUMBLOB, MEDIUMTEXT L+3 bytes, sendo L < 2^24
LONGBLOB, LONGTEXT L+4 bytes, sendo L < 2^32
ENUM(‘valor1′,’valor2’,…) 1 ou 2 bytes, segundo nº. de valores (65,535 máximo)
SET(‘valor1′,’valor2’,…) 1,2,3,4 ou 8 bytes, segundo nº. de mebros (64 máximo)

A diferenza entre CHAR e VARCHAR está na forma de almacenamento, mentres que as cadeas son de lonxitude variable en VARCHAR, almacenando só os valores necesarios máis 1 byte para a lonxitude, CHAR enche con espazos os lugares baleiros. BINARY e VARBINARY son como CHAR e VARCHAR agás que almacenan bytes en lugar de carácteres.

En MySQL temos as seguintes funcións e operadores de comparación:
OR, ||, XOR Estes operadores son de exclusión, é dabondo con que se cumpra unha das condicións.
&&, AND son de inclusión e teñen que cumprir todas as condicións.
A palabra clave WHERE serve para especificar unha condición de procura, e: =, <, =<, >, >=, <>, son operadores de comparación.
A seguinte imaxe ilustra o seu uso:
A palabra reservada SELECT permítenos seleccionar as columnas nome e vendas, da FROM táboa de nome taboa1, WHERE cuxas vendas fosen maiores > ou igual = a 3000, OR ou as que fosen menores < de 375, AND e maiores > de 120, ou o que é o mesmo comprendidas entre 120 e 375.

NOT ou !, é NOT lóxico, comproba se un valor é ou non nulo. Evaluase a 1 se o operando é 0, e 0 se o operando é diferente de 0, e NOT NULL retorna NULL. Exemplo:

BETWEEN, permite escoller unha serie dentro dun rango de valores. No noso caso tódolas datas entre o 1 e o 3 de xaneiro do 2010.

CASE, WHEN, THEN, ELSE
A sentenza CASE procura o contido dunha constante/variable nunha lista condicionada por WHEN, cando o encontra, THEN asígnalle o valor correspondente, se non, ELSE executa o default. Vémolo millor no exemplo:

IN semellante a un “=” para cada un dos valores.

IS comprobase un valor contra un valor booleano, onde o valor booleano pode ser TRUE, FALSE, ou UNKNOWN.

IN e IS combinados permiten realizar subconsultas.
Selecciona da taboa1 aqueles rexistros cuxo Id non é nulo, e ademáis, non pertenza a taboa zonas.

LIKE, REGEXP permiten o emprego de patróns para facer procuras complexas.
Atopa nomes que conteñan o “a”.

Atopa nomes que empecen por “C”. Pódense facer moreas de patróns cos dous operadores tendo en conta que:
Os patrons SQL, non son case-sensitive, permiten emplear o caracter ‘_’ para representar coincidencia cun carácter individual e ‘%’ como comodín.
Algunhas características das expresións regulares son:
~ ‘.’ Coincidencia con calquera carácter.
~ ‘[…]’ coincidencia con calquera caracter entre os corchetes. Por exemplo, ‘ [cde] ‘ coincidirá con ‘ c ‘ ‘d’, ou ‘e’. Para unha referencia a un rango de carácteres. ‘ [a-z] ‘ detecta calquera letra coincidente, do mesmo xeito que ‘ [0-9] ‘ o fai con calquera díxito.
~ ‘ * ‘ coincidencia con cero ou máis aparicións dos caracteres que o preceden. Por exemplo, ‘x*’ detecta calquera número de carácteres ‘x’, ‘ [0-9] * ‘ calquera cantidade de díxitos, e ‘.*’ coincidirá con calquera número de calquera carácter.
~ REGEXP terá éxito se o patrón encontra coincidencia en calquera parte do valor examinado (isto difire con LIKE en que este só ten éxito se o patrón concorda con todo o valor).
~ Para que un patrón detecte coincidencias soamente ao final ou o principio do valor, utilizase ‘ ^ ‘ ao principio ou ‘ $ ‘ ao final do patrón.
As operacións de comparación dan un valor de 1 (TRUE), ou 0 (FALSE), ou NULL.

Funcións de agregación de GROUP BY. Se se usa unha función de grupo sen a cláusula GROUP BY, é semellante a agrupar todos os rexistros. Imos ver as máis importantes:
AVG, MAX, MIN, SUM calculan a media, o máximo, o minimo e a suma dunha serie de valores dados e COUNT, da un contador co número de rexistros devoltos por unha consulta. Algúns exemplos:
A primeira das sentenzas devolve todas as filas e columnas contidas na táboa taboa1, a segunda, sen GROUP BY, devolve o valor das funcións agrupando todolos rexistros, e a última, aquí xa con GROUP BY, fai a mesma consulta agrupando por datas.
O comportamento de COUNT é así­ en táboas MyISAM. Para motores de almacenamento transaccionais (InnoDB, BDB), levar un contador de rexistros non é doado xa que poden acontecer múltiples transaccións e cada unha delas pode afectar ao contador.
O motor de almacenamento é a parte do SGDB encargada de crear, actualizar, reparar e borrar os datos. MySQL ten a opción de establecer que motor usar cada vez que se crea unha táboa.
A sentenza:
mysql>SHOW ENGINES;
permítenos ver os motores dispoñibles;

Referencias:
http://dev.mysql.com/doc/refman/5.0/es/index.html
Wikipedia

Licenza Creative Commons©

Tema Panorama porThemocracy