Conalep Gustavo Baz
Modulo: Construcción de base de datos
Profesora: Lic. Edith Martínez Hernández
Alumnos: Karen Victoria Ruiz Garduño
Guadalupe Rodríguez Domingo
Nayelli Viridiana González Cruz
Isaac Erick Martínez Dolores
Leticia Navarrete Marcelino
Grupo: 403
Aula: C-3
Carrera: informática
MYSQL
MYSQL es uno de los sistemas de gestión de bases de datos más populares del mercado. Se trata de un sistema gestor de bases de datos basado en el modelo relacional, con licencia dual GPL y propietaria, desarrollado por MySQL AB, una compañía propiedad de Sun Microsystems, creadores de Java, desde Enero de 2008.
En este resumen se verán algunos comandos básicos para mysql.
Para iniciar indicando el nombre de usuario debemos colocar:
mysql -u root
Para que pida la contraseña:
mysql -u root -p
Especificar la máquina (el host) en el que se aloja el servidor MySQL:
mysql -u root -p -h localhost
Especificar la base de datos a utilizar por defecto basta añadir el nombre al final. Es equivalente a utilizar más tarde el comando USE:
mysql -u root -p -h localhost base_datos
Para ejecutar un script SQL:
mysql < archivo.sql.
O se puede hacer desde la consola de mysql:
source archivo.sql
Crear una base de datos:
create database base_datos;
Si ya existe una base de datos con ese nombre, MySQL devolverá un error. Si queremos crear una base de datos solo cuando no exista ya una del mismo nombre para no obtener este error añadimos, if not exists:
create database if not exists base_datos;
A la hora de crear la base de datos también se puede especificar el juego de caracteres y la colación. Esto se logra con default character set y default collate respectivamente. Al definir un juego de caracteres y una colación por defecto para la base de datos, las tablas usarán estos valores por defecto, a menos que se indiquen otros al crear la tabla:
*CREATE DATABASE IF NOT EXISTS base_datos
* DEFAULT CHARACTER SET utf8
*DEFAULT COLLATE utf8_general_ci;
Para comunicarnos con el servidor usando un cierto juego de caracteres se puede usar el comando set names:
SET NAMES "utf8";
Podemos ver una lista de los juegos de caracteres admitidos por MySQL mediante el comando SHOW CHARACTER SET; Algunos juegos de caracteres comúnmente utilizados son:
ascii, de American Standard Code for Information Interchange; también conocido como US-ASCII. Es una codificación de caracteres de 7 bits basados en el alfabeto inglés con 95 caracteres imprimibles.
latin1, el juego de caracteres por defecto en MySQL. Contrariamente a lo que cabría esperar se trata de la codificación ANSI / CP1252 / WinLatin1 / Windows-1252 se trata de un super conjunto de ISO 8859-1), que son los que se suelen conocer como Latin-1. Los tres son bastante parecidos, por lo que a menudo se consideran equivalentes erróneamente, y son causa de confusión habitual. En concreto CP1252 se diferencia de ISO-8859-1 en que se utiliza el rango 0×80-0x9F para representar distintos caracteres imprimibles, como el símbolo del euro o el de la libra, en lugar de caracteres de control. Son juegos de caracteres de 8 bits, por lo que permiten representar 256 caracteres distintos. Los tres incluyen los caracteres necesarios para representar textos en las lenguas de Europa occidental.
utf8, de 8-bit Unicode Transformation Format. Unicode es un acrónimo de código universal y es un juego de caracteres con el que podemos representar textos escritos en la mayoría de los alfabetos del planeta: latino, árabe, hebreo, griego, japonés, chino, coreano, cirílico, UTF-8 en concreto utiliza de 1 a 4 bytes para representar los caracteres, dependiendo del símbolo.
Los nombres de las colaciones comienzan con el nombre del juego de caracteres asociado y terminan con _ci (case insensitive) si la comparación no tiene en cuenta mayúsculas y minúsculas, _cs (case sensitive) en caso contrario y _bin si es binaria (también case sensitive). Por tanto se pueden consultar las distintas colaciones disponibles para un juego de caracteres con un comando similar a: SHOW COLLATION LIKE "utf8%";
Ver las bases de datos en nuestro servidor mysql:
SHOW DATABASES;
Borrar una base de datos:
DROP DATABASE base_datos;
Usar una base de datos para trabajar:
USE base_datos;
Ver las bases de datos:
SHOW TABLES;
Observar las columnas de una tabla:
SHOW COLUMNS FROM tabla;
Ver el atajo de una tabla:
DESCRIBE tabla;
Ver una tabla:
DESC tabla;
Ver también la colación, los privilegios que tenemos o los comentarios de las columnas añadiremos la palabra clave FULL a SHOW COLUMNS:
SHOW FULL COLUMNS FROM tabla;
Crear una tabla nueva se usa el comando CREATE TABLE tabla al que se le pasa la definición de las columnas, las posibles restricciones y las opciones de la tabla y de partición.
Ejemplo:
CREATE TABLE usuario ( id_usuario INT PRIMARY KEY AUTO_INCREMENT nombre VARCHAR(50) NOT NULL, direccion VARCHAR(50) NOT NULL, ciudad VARCHAR(20) NOT NULL, edad TINYINT NOT NULL );
CREATE TABLE blog ( id_blog INT PRIMARY KEY AUTO_INCREMENT, id_usuario INT REFERENCES usuario(id_usuario), titulo VARCHAR(30) NOT NULL );
Los tipos de las columnas pueden ser números enteros, números decimales, fechas, horas, cadenas.
Tipos numéricos:
*BIT: Representación en binario de un número. es un número binario de 1 bit por lo que su valor puede ser 0 o 1.
*TINYINT: Para representar enteros muy pequeños, de -128 a 127. Se puede utilizar la palabra clave UNSIGNED para que almacene solo números positivos, el rango va de 0 a 255. si se utiliza la palabra clave ZEROFILL el valor se rellenará con ceros a la izquierda hasta completar el número de dígitos indicado. Esto es así para el resto de tipos enteros, pero se obviará por considerarse de poca utilidad.
*BOOL: Sinónimo de TINYINT(1). El valor 0 se considera falso, el resto verdadero.
*BOOLEAN: Sinónimo de TINYINT(1). El valor 0 se considera falso, el resto verdadero.
*SMALLINT: Un entero pequeño, de -32768 a 32767. Si se utiliza UNSIGNED el rango va de 0 a 65535.
*MEDIUMINT: Un entero de tamaño medio, de -8388608 a 8388607. Si se usa UNSIGNED, de 0 a 16777215.
*INT: Un entero, con rango de -2147483648 a 2147483647 y de 0 a 4294967295 si es UNSIGNED.
*INTEGER: Sinónimo de INT.
*BIGINT: Un entero grande, de -9223372036854775808 a 9223372036854775807 y de 0 a 18446744073709551615 para los UNSIGNED
*SERIAL: Alias Para BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.
*FLOAT: Un número decimal en coma flotante. Los valores permitidos son el 0 y los valores de -3.402823466E+38 a -1.175494351E-38 y de 1.175494351E-38 a 3.402823466E+38 aunque el rango puede ser menor dependiendo de la máquina y el sistema operativo utilizado. También podemos encontrarnos con algo como
*DOUBLE: Un número en coma flotante de precisión doble. Los valores permitidos van de -1.7976931348623157E+308 a -2.2250738585072014E-308 y de 2.2250738585072014E-308 a 1.7976931348623157E+308, además del 0, aunque el rango puede ser menor dependiendo de la máquina y el sistema operativo utilizado. Como FLOAT, los valores DOUBLE no son exactos.
*REAL: Sinónimo de DOUBLE, a menos que esté activado el modo REAL_AS_FLOAT, en cuyo caso funciona como sinónimo de FLOAT.
*DOUBLE PRECISION: Sinónimo de DOUBLE.
*DECIMAL: Para representar números decimales de forma más precisa que FLOAT y DOUBLE.
*DEC: Sinónimo de DECIMAL
*NUMERIC: Sinónimo de DECIMAL.
Los tipos relativos a fechas y horas son los siguientes:
*DATE: Para representar una fecha en formato YYYY-MM-DD (año-mes-día).
*DATETIME: fecha y hora en formato YYYY-MM-DD (año-mes-dia) y HH:MM: SS. (Hora-minuto-segundo).
*TIMESTAMP: Si se asigna el valor NULL a un TIMESTAMP se almacenará la fecha y hora actual, por lo que puede ser útil para saber cuándo se realizó la última inserción o actualización.
*TIME: Una hora. El valor se muestra en formato HH:MM:SS, (Hora-minuto-segundo).
*YEAR: Un año en formato YYYY, Año.
Por último, los tipos de texto son los siguientes:
*CHAR: Cadenas de longitud fija cuyo número de caracteres se especifica entre paréntesis y si no se especifica es 1. Este mecanismo de indicar el tamaño entre paréntesis es común para el resto de los tipos.
*VARCHAR: Cadena de longitud variable. Opcionalmente se puede indicar el tamaño máximo de la cadena con un número entre paréntesis, Varchar (45).
*BINARY: Las cadenas se almacenan como binarias.
*VARBINARY: Similar a VARCHAR pero en este caso las cadenas se almacenan como binarias.
*BLOB: Un Binary Large OBject (gran objeto binario), para almacenar datos binarios como imágenes. El tamaño máximo es de 65.535 bytes.
TINYBLOB: Un BLOB de pequeño tamaño (un máximo de 255 bytes).
MEDIUMBLOB: Un BLOB de tamaño medio (un máximo de 16.777.215 bytes; cerca de 16MB)
LONGBLOB: Un BLOB de gran tamaño (un máximo de 4GB bytes)
*TEXT: Un texto con un máximo de 65.535.
TINYTEXT: Un texto pequeño, con un máximo de 255 caracteres.
MEDIUMTEXT: Un texto de longitud media, con un máximo de 16.777.215 caracteres.
LONGTEXT: Un texto largo, con un máximo de 4.294.967.295 caracteres.
*ENUM: Enumerado, un tipo cuyo valor puede ser una cadena de entre las indicadas entre paréntesis.
*SET: Similar a ENUM, pero en este caso el campo puede tener cero o más valores de entre los indicados entre paréntesis.
Para cada columna, además del tipo, podemos definir otras propiedades:
*NOT NULL: No se puede introducir valores nulos.
*DEFAULT valor: Para definir un valor por defecto
*AUTO_INCREMENT: Para cada tupla añadida a la tabla el valor del campo crecerá en una unidad. Solo puede existir una columna con AUTO_INCREMENT en cada tabla.
*UNIQUE KEY: Los valores no se pueden repetir. Si puede existir varias tuplas con valor NULL para la columna.
*PRIMARY KEY: La clave primaria de la relación. Los valores deben ser únicos y no nulos. Una tabla, como es lógico, sólo puede tener una clave primaria.
*COMMENT "comentario": Comentarios varios sobre el campo.
*REFERENCES tabla (campo): Para crear una clave foránea o ajena. De esta forma indicamos este valor toma valores de claves de otra tabla, implementando así una relación 1:N
Las restricciones posibles para la tabla son:
*PRIMARY KEY (campo1, campo2,...): Para indicar el campo o campos que conforman la clave primaria.
*KEY (campo1, campo2,...): Para crear una clave no primaria ni única. Esto creará un índice para el campo.
*INDEX (campo1, campo2,...): Sinónimo de KEY.
*FOREIGN KEY (campo1, campo2,...) REFERENCES tabla (campo3, campo4,...): Para crear una clave foránea o ajena. Sigue el mismo formato que REFERENCES para las columnas.
*CHECK (expresión): En teoría, para definir otras restricciones.
Eliminar una tabla:
DROP TABLE tabla;
Añadir columnas:
ALTER TABLE tabla ADD COLUMN valor INT;
Eliminar columnas:
ALTER TABLE tabla DROP COLUMN valor;
Renombrar la tabla:
ALTER TABLE tabla RENAME TO tabla2;
Insertar varias tuplas con un solo INSERT:
INSERT INTO usuario VALUES
(3, "Marta Marsopa", "Calle Italia 4", "Madrid", 58), (4, "Jaime Torres", "Avenida de Barcelona 12", "Valladolid", 37), (10, "Juan Martero", "Calle Madrid 12", "Barcelona", 26);
Borrar tuplas:
DELETE FROM usuario
WHERE id = 2;
Borrar todas las tuplas de una tabla:
DELETE FROM usuario;
TRUNCATE usuario;
Seleccionar todos los campos podemos usar (*) como atajo:
SELECT * FROM usuario;
LOWER, que transforma una cadena en minúsculas:
SELECT LOWER(nombre), LOWER(direccion) FROM usuario;
Seleccionar sólo las tuplas que cumplan una determinada condición:
SELECT * FROM usuario WHERE edad < 18;
Agrupar las tuplas por un determinado campo:
SELECT ciudad, COUNT(ciudad) FROM usuario
Ordenar las tuplas según los valores de un campo:
SELECT * FROM usuario ORDER BY nombre;
GROUP BY, se ordena de forma ascendente, a menos que se utilice la palabra clave DESC:
SELECT * FROM usuario ORDER BY nombre DESC;
Limitar el número de tuplas que queremos que devuelva SELECT se utiliza LIMIT:
SELECT * FROM usuario LIMIT 2;
JOIN
Crear una selección de tuplas combinadas de varias tablas se utiliza la sentencia JOIN.
SELECT * FROM usuario JOIN blog;
ON para añadir una condición que especifique cuándo combinar las tablas:
SELECT nombre, titulo FROM usuario JOIN blog ON usuario.id_usuario = blog.id_usuario;
El NATURAL JOIN es un tipo especializado de equi-join en el que no hace falta especificar la sentencia ON, sino que se combinan las tuplas para las que las columnas del mismo nombre de ambas tablas tengan el mismo valor.
SELECT nombre, titulo FROM usuario NATURAL JOIN blog;
Especificar qué campo o campos de igual nombre en ambas tablas queremos comparar, podemos usar USING en lugar de NATURAL JOIN:
SELECT nombre, titulo FROM usuario JOIN blog USING (id_usuario);
RIGHT JOIN ocurriría algo semejante con las tuplas de la tabla derecha:
SELECT nombre, titulo FROM usuario RIGHT JOIN blog ON usuario.id_usuario = blog.id_usuario;
Escribir poco: para los OUTER JOIN también podemos utilizar NATURAL
SELECT nombre, titulo FROM usuario NATURAL LEFT JOIN blog;
UNION ALL (UNION se utiliza para combinar los resultados de varios SELECT; la palabra clave ALL tiene el efecto de que no se eliminen las tuplas duplicadas, como sería el caso del comportamiento de UNION por defecto).
SELECT nombre, titulo FROM usuario LEFT JOIN blog ON usuario.id_usuario = blog.id_usuario
UNION
SELECT nombre, titulo FROM usuario RIGHT JOIN blog ON usuario.id_usuario = blog.id_usuario WHERE usuario.id_usuario IS NULL;
No hay comentarios:
Publicar un comentario