EN QUE CONSISTE MySQL Server?
MySQL es un sistema de gestión de base de datos (SGBD) relacional, multihilo y multiusuario. MySQL AB desarrolla MySQL como software libre en un esquema de licenciamiento dual: por un lado se ofrece bajo la licencia GNU GPL, pero aquellas empresas que quieran incorporarlo en productos privativos deben comprar una licencia específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C.
MySQL es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual GPL/Licencia comercial por Oracle Corporation y está considerada como la base datos open source más popular del mundo,1 2 y una de las más populares en general junto a Oracle y Microsoft SQL Server, sobre todo para entornos de desarrollo web.
MySQL fue inicialmente desarrollado por MySQL AB (empresa fundada por David Axmark,Allan Larsson y Michael Widenius). MySQL A.B. fue adquirida por Sun Microsystems en 2008, y ésta a su vez fue comprada por Oracle Corporation en 2010, la cual ya era dueña desde 2005 de Innobase Oy, empresa finlandesa desarrolladora del motor InnoDB para MySQL.
Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad pública y los derechos de autor del código están en poder del autor individual, MySQL es patrocinado por una empresa privada, que posee el copyright de la mayor parte del código. Esto es lo que posibilita el esquema de doble licenciamiento anteriormente mencionado. La base de datos se distribuye en varias versiones, una Community, distribuida bajo la Licencia pública general de GNU, versión 2, y varias versionesEnterprise, para aquellas empresas que quieran incorporarlo en productos privativos. Las versiones Enterprise incluyen productos o servicios adicionales tales como herramientas demonitorización y soporte oficial. En 2009 se creó un fork denominado MariaDB por algunos desarrolladores (incluido algunos desarrolladores originales de MySQL) descontentos con el modelo de desarrollo y el hecho de que una misma empresa controle a la vez los productos MySQL y Oracle Database.3
Está desarrollado en su mayor parte en ANSI C y C++.4 Tradicionalmente se considera uno de los cuatro componentes de la pila de desarrollo LAMP y WAMP.
MySQL es usado por muchos sitios web grandes y populares, como Wikipedia,5 Google6 7(aunque no para búsquedas), Facebook,8 9 10 Twitter,11 Flickr,12 y YouTube.13
IMPORTANCIA DE LAS BASES DE DATOS
Las Bases de Datos tienen una gran relevancia a nivel personal, pero más si cabe, a nivel empresarial, y se consideran una de las mayores aportaciones que ha dado la informática a las empresas. En la actualidad, cualquier organización que se precie, por pequeña que sea, debe contar con una Base de Datos, pero para que sea todo lo efectiva que debe, no basta con tenerla: hay que saber cómo gestionarlas.
En el caso de que en nuestra compañía no contemos con una persona que se encargue de esta labor, existe la posibilidad de contratar a una empresa externa que se encargue.
Las principales utilidades que ofrece una base de datos a la empresa son las siguientes:
- Agrupar y almacenar todos los datos de la empresa en un único lugar.
- Facilitar que se compartan los datos entre los diferentes miembros de la empresa.
- Evitar la redundancia y mejorar la organización de la agenda.
- Realizar una interlocución adecuada con los clientes.
Si una Base de Datos se gestiona adecuadamente, la organización obtendrá diferentes ventajas. Aumentará su eficacia, habrá trabajos que se realicen con mayor rapidez y agilidad debido a la simplificación de los mismos, podremos mejorar la seguridad de los datos que almacenamos, y con todos estos factores, maximizaremos los tiempos y por tanto, se producirá una mejora en la productividad.
Estas funcionalidades aportarán un valor añadido a la empresa, ya que con una base de datos formulada correctamente, conseguiremos que la información y el conocimiento sean los mayores activos de la compañía, lograremos sacar el máximo rendimiento a las competencias de nuestros colaboradores, así como averiguar datos de nuestros clientes potenciales. Por último, puesto que la información es poder, cuantos más datos tengamos, mayor será la competitividad de la compañía.
Tipos de datos de MySQL Server
A continuación os mostramos los tipos de datos (data types) que se pueden definir para el motor de base de datos MySQL:
| Grupo | Tipo de dato | Intervalo | Almacenamiento |
| Numéricos | TINYINT |
De -128 a 127 (signed)
De 0 a 255 (unsigned) | 1 byte |
| SMALLINT |
De -32768 a 32767 (signed)
De 0 a 65535 (unsigned) | 2 bytes | |
| MEDIUMINT |
De -8388608 a 8388607 (signed)
De 0 a 16777215 (unsigned) | 3 bytes | |
| INT INTEGER |
De -2147483648 a 2147483647 (signed)
De 0 a 4294967295 (unsigned) | 4 bytes | |
| BIGINT | De -9223372036854775808 a 9223372036854775807 (signed) De 0 a 18446744073709551615 (unsigned) | 8 bytes | |
| BIT | Equivalente a TINYINT(1) | 1 byte | |
| BOOL BOOLEAN | Equivalente a TINYINT(1) Valor 0 = False Valor 1 = True | 1 byte | |
| FLOAT [(M,D)] |
De -3.402823466E+38 a -1.175494351E-38, 0, y desde 1.175494351E-38 a 3.402823466E+38
M es el número total de dígitos y D es el número de dígitos después del punto decimal. Si se omite M y D, los valores se almacenan en los límites permitidos por el hardware (unas 7 posiciones decimales)
| 4 bytes | |
| FLOAT (p) |
p representa la precisión en bits, MySQL usa este valor sólo para determinar si se debe usar FLOAT o DOUBLE para el tipo de datos resultante.
Si p está entre 0 a 24, el tipo de datos se convierte en FLOAT (sin M ó D). Si p está entre 25 a 53, el tipo de datos se convierte a DOUBLE (sin M ó D).
En realidad este tipo de datos es proporcionado por MySQL por compatibilidad con ODBC
| 4 bytes si 0 <= p<= 24, 8 bytes si 25 <= p <= 53 | |
| DOUBLE [(M,D)] |
De -1.7976931348623157E+308 a -2.2250738585072014E-308, 0, y desde 2.2250738585072014E-308 a 1.7976931348623157E+308
M es el número total de dígitos y D es el número de dígitos después del punto decimal. Si se omite M y D, los valores se almacenan en los límites permitidos por el hardware (unas 15 posiciones decimales)
| 8 bytes | |
| REAL[(M,D)] DOUBLE PRECISION | Equivalente a DOUBLE, con la excepción de que si está activado el modo REAL_AS_FLOAT, REAL es un sinónimo de FLOAT en lugar de DOUBLE | 4 Bytes ó 8 bytes | |
| DECIMAL [(M[,D])] DEC [(M[,D])] NUMERIC [(M[,D])] FIXED[(M[,D])] |
Número en coma flotante sin empaquetar. Se comporta como una columna CHAR. El número se almacena como una cadena, usando un carácter para cada dígito del valor.
El rango máximo es el mismo que para el tipo DOUBLE
|
M+2 bytes sí D > 0
M+1 bytes sí D = 0 D+2, si M < D | |
| Fecha y hora | DATE | Fecha, con rango desde '1000-01-01' a '9999-12-31' con formato 'YYYY-MM-DD' | 3 bytes |
| DATETIME | Fecha y hora, con rango desde '1000-01-01 00:00:00' a '9999-12-31 23:59:59' con formato 'YYYY-MM-DD HH:MM:SS' | 8 bytes | |
| TIMESTAMP[(M)] | Fecha y hora, el rango va desde '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC. El formato de almacenamiento depende del tamaño del campo | 4 bytes | |
| TIME | Hora, con rango desde '-838:59:59' a '838:59:59', con el formato 'HH:MM:SS' | 3 bytes | |
| YEAR[(2|4)] | Año en dos o cuatro dígitos, para cuatro dígitos, el rango es de 1901 a 2155, para dos dígitos es de 70 a 69 (representando desde 1070 a 2069) | 1 byte | |
| Cadenas de caracteres | CHAR (M) | Almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres | M bytes (tanto si se ocupan como si no) |
| VARCHAR (M) | Almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres | Tamaño contenido del campo más 1 byte | |
| BINARY (M) | Similar a CHAR, excepto que contiene cadenas de caracteres binarias en lugar de cadenas no binarias. Es decir, que contienen cadenas de bytes en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de caracteres, y la comparación y ordenación se basa en los valores numéricos de los bytes en los valores | M bytes, 0 <= M<= 255 | |
| VARBINARY (M) | Similar a VARCHAR, excepto que contiene cadenas de caracteres binarias en lugar de cadenas no binarias. Es decir, que contienen cadenas de bytes en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de caracteres, y la comparación y ordenación se basa en los valores numéricos de los bytes en los valores | Tamaño contenido del campo más 1 byte | |
| TEXT | Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 65535 caracteres | Longitud + 2 bytes, mientras L< 216 | |
| TINYTEX | Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 255 caracteres | Longitud + 1 bytes, mientras L< 28 | |
| MEDIUMTEXT | Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 16.777.215 caracteres | Longitud + 3 bytes, mientras L< 224 | |
| LONGTEXT | Tipo de datos no binario que puede contener una cantidad variable de datos. Sirve para almacenar texto (gran cantidad). Hasta 4.294.967.295 caracteres | Longitud + 4 bytes, mientras L< 232 | |
| BLOB | Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 65535 bytes | Longitud + 2 bytes, mientras L< 216 | |
| TINYBLOB | Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 255 bytes | Longitud + 1 bytes, mientras L< 28 | |
| MEDIUMBLOB | Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 16.777.215 bytes | Longitud + 3 bytes, mientras L< 224 | |
| LONGBLOB |
Tipo de datos binario que puede contener una cantidad variable de datos. Permite almacenar ficheros (de cualquier tipo). Hasta 4.294.967.295 bytes
| Longitud + 4 bytes, mientras L< 232 | |
| ENUM (valor1, valor2, ...) | Es un tipo de datos de cadena con un valor elegido de una lista de valores permitidos que se enumeran explícitamente en la especificación de la columna al crear la tabla. Acepta hasta 65535 valores distintos | 1 ó 2 bytes, dependiendo del número de valores de ENUM | |
| SET (valor1, valor2, ...) | Es un tipo de datos de cadena que puede contener ninguno, uno ó varios valores de una lista previamente establecida (al crear la tabla). La lista puede tener un máximo de 64 valores | 1, 2, 3, 4, ó 8 bytes, dependiendo del número de miembros del conjunto | |
| Tipos de datos espaciales (Open Gis) (*) | GEOMETRY | Geometry es la clase base de la jerarquía para el modelo geométrico OpenGIS. Es una clase no instanciable, pero tiene unas cuantas propiedades que son comunes para todos los valores geométricos creados con cualquiera de las subclases de Geometry | |
| POINT | Un POINT es una geometría que representa una ubicación única en un espacio de coordenadas (valor de la coordenada X, valor de la coordenada Y) | ||
| LINESTRING | Un LINESTRING es una Curva con interpolación linear entre puntos. Un LINESTRING tiene coordenadas de segmentos, definidos por cada par consecutivo de puntos | ||
| POLYGON | Un POLYGON es una superficie planar que representa una geometría multicara. Se define por un único límite exterior y cero o más límites interiores, donde cada límite interior define un agujero en el polígono | ||
| MULTIPOINT | Un MULTIPOINT es una colección de geometrías compuesta de elementos Point. Los puntos no están conectados ni ordenados de ningún modo | ||
| MULTILINESTRING | Una MULTILINESTRING es una colección de geometrías MultiCurve compuesta de elementos LINESTRING | ||
| MULTIPOLYGON | Un MULTIPOLYGON es un objeto MultiSurface compuesto de elementos POLYGON | ||
| GEOMETRYCOLLECTION |
Una GEOMETRYCOLLECTION es una geometría que consiste en una colección de una o más geometrías de cualquier clase.
Todos los elementos en una GEOMETRYCOLLECTION deben estar en el mismo Sistema de Referencia Espacial (es decir, en el mismo sistema de coordenadas)
| ||
| CURVE | Una clase CURVE es una geometría unidimensional, normalmente representada por una secuencia de puntos. Las subclases particulares de CURVE definen el tipo de interpolación entre puntos. CURVE es una clase no instanciable | ||
| MULTICURVE | Una clase MULTICURVE es una colección de geometrías que se compone de elementos CURVE. MULTICURVE es una clase no instanciable | ||
| SURFACE | Una clase SURFACE es una geometría bidimensional. Es una clase no instanciable. Su única subclase instanciable es POLYGON |
(*) MySQL implementa extensiones espaciales siguiendo la especificación del Consorcio Open GIS (OGC), un consorcio internacional de más de 250 compañías, agencias y universidades que participan en el desarrollo de soluciones conceptuales públicamente disponibles y que pueden ser útiles para todo tipo de aplicaciones que manejan datos espaciales. MySQL implementa un subconjunto del entorno SQL con Tipos Geométricos propuesto por el OGC. Este término se refiere a un entorno SQL que ha sido extendido con un conjunto de tipos geométricos. Una columna SQL con valores geométricos se implementa como una columna que tiene un tipo geométrico. Las especificaciones describen un conjunto de tipos geométricos SQL, así como las funciones para analizar y crear valores geométricos sobre esos tipos.
Comandos del DDL
CREATE
Este comando crea un objeto dentro de la base de datos. Puede ser una tabla, vista, índice, trigger, función,
procedimiento o cualquier otro objeto que el motor de la base de datos soporte.
Ejemplo (crear una tabla)
CREATE TABLE 'TABLA_NOMBRE'
'CAMPO_1' INT,
'CAMPO_2' STRING
DROP
Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, índice, trigger, función,
procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia
ALTER.
Ejemplo
ALTER TABLE ''TABLA_NOMBRE''
(
DROP COLUMN ''CAMPO_NOMBRE1''
)
ALTER
Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar
el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.
Ejemplo (agregar columna a una tabla)
ALTER TABLE 'TABLA_NOMBRE' (
ADD NUEVO_CAMPO INT UNSIGNED meel
)
TRUNCATE
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DROP, es que si se quiere borrar
todo el contenido de la tabla, es mucho más rápido, especialmente si la tabla es muy grande. La desventaja es que
TRUNCATE sólo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la cláusula
WHERE. Si bien, en un principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en
realidad una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta
ninguna transacción.
Ejemplo
TRUNCATE TABLE ''TABLA_NOMBRE1''
Commandos DML
SELECT
La sentencia SELECT nos permite consultar los datos almacenados en una tabla de la base de datos.
Ejemplo:
SELECT "nombre_ columna" FROM "nombre_ tabla"
Para ilustrar el ejemplo anterior, suponga que tenemos la siguiente tabla:
Tabla Store_Information
store_name Sales Date
Los Angeles 1500 € 05-Jan-1999
San Diego 250 € 07-Jan-1999
Los Angeles 300 € 08-Jan-1999
Boston 700 € 08-Jan-1999
INSERT
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.
Ejemplo:
Forma básica
INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1'', [''valor2,...''])
Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el valor
por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las
restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila
y se devuelve un error.
Ejemplo
INSERT INTO agenda_telefonica (nombre, numero) VALUES ('Roberto Jeldrez', 4886850);
Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:
INSERT INTO ''tabla'' VALUES (''valor1'', [''valor2,...''])
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla 'agenda_telefonica'):
INSERT INTO agenda_telefonica VALUES ('Roberto Jeldrez', 4886850);
DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla,
Forma básica
DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''
Ejemplo
DELETE FROM My_ table WHERE field2 = 'N';
OTRO EJEMPLO DE DELETE
Delete from
store_name Sales Date
Los Angeles 1500 € 05-Jan-1999
San Diego 250 € 07-Jan-1999
Los Angeles 300 € 08-Jan-1999
Boston 700 € 08-Jan-1999
y decidimos no mantener ninguna información sobre Los Ángeles en esta tabla. Para lograrlo,
ingresamos el siguiente SQL:
DELETE FROM Store _ Information
WHERE store_ name = "Los Angeles"
Ahora el contenido de la tabla se vería,
Tabla Store_Information
Paso
Crea una base. En la línea de comandos de MySQL, introduce el comando
CREATE DATABASE <DATABASENAME>;. Remplaza <DATABASENAMEs> con el nombre de la base de datos. No puedes incluir espacios- Por ejemplo, para crear una base de datos de todos los estados de los Estados Unidos, puedes introducir
CREATE DATABASE estadoseeuu; - Nota: No es necesario introducir los comandos en mayúsculas.
- Nota: Todos los comandos de MySQL deben terminar con ";". Si olvidaste incluir el punto y coma, puedes incluir solamente ";" en la línea luego del comando.
Obtén la lista de las bases de datos disponibles. Introduce el comando
SHOW DATABASES; para listar todas las bases de datos que tengas almacenadas. Además de la base de datos que acabas de crear, también verás mysql database y test database. Puedes ignorarlas por ahora.Selecciona la base de datos. Una vez que hayas creado la base de datos, debes seleccionarla para comenzar a editarla. Introduce el comando
USE estados;. Verás el mensaje Database changed, que indica que la base de datos activa es ahora estados.Crea una tabla. Una tabla alberga la información en la base de datos. Para crear una tabla, tendrás que introducir todo el formato de la tabla en el comando inicial. Para crear una tabla, introduce el comando siguiente:
CREATE TABLE estadoseeuu (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, estado CHAR(25), población INT(9));. Esto creará una tabla llamada "estados" con tres campos: id, estado y población.- El comando
INThace que el campoidcontenga solo números (enteros). - El comando
NOT NULLgarantiza que el campoidno pueda quedar en blanco. PRIMARY KEYdesigna el campoidcomo campo clave de la tabla. El campo clave debe ser un campo que no contenga duplicados.- El comando
AUTO_INCREMENTasignará de manera automática valores crecientes en el campoid, lo que básicamente numera cada entrada. - Los comandos
CHAR(caracteres) yINT(enteros) designan el tipo de información permitida en estos campos. El número al lado de los comandos indica cuántos caracteres o enteros caben en el campo.
Crea una entrada en la tabla. Ahora que has creado la tabla, es hora de comenzar a introducir la información. Usa el comando siguiente para introducir la primera entrada:
INSERT INTO estados (id, estado, población) VALUES (NULL, ‘Alabama’, ‘4822023’);- Esto esencialmente le dice a la base de datos que ingrese la información proporcionada en los tres campos correspondientes de la tabla.
- Debido a que el campo
idcontiene los comandosNOT NULL, introducirNULLcomo valor forzará a que aumente a 1, gracias al comandoAUTO_INCREMENT.
Crea más entradas. Puedes crear múltiples entradas con un solo comando. Para introducir los siguientes tres estados, usa el comando siguiente:
INSERT INTO estados (id, estado, población) VALUES (NULL, ‘Alaska’, ‘731449’), (NULL, ‘Arizona’, ‘6553255’), (NULL, ‘Arkansas’, ‘2949131’);.
Realiza una consulta en la nueva base de datos. Ahora que has creado la base de datos básica, puedes introducir consultas para obtener resultados específicos. Primero, introduce el comando
SELECT * FROM estadoseeuu;. Esto arrojará la base datos entera como resultado, indicado por el comando "*", que significa "todo".- Para hacer una consulta más avanzada, introduce el comando siguiente:
SELECT estado, población FROM estadoseeuu ORDER BY población;Esto arrojará una tabla con los estados ordenados por población en lugar de orden alfabético. El campoidtampoco se mostrará, pues solo pediste las entradasestadoypoblación. - Para listar los estados por población en orden invertida, introduce el comando siguiente:
SELECT estado, población FROM estadoseeuu ORDER BY población DESC;. El comandoDESClos listará en orden descendente, es decir de mayor a menor en lugar de menor a mayor.