lunes, 21 de mayo de 2012

enlaces


MYSQL



Es un sistema de gestión de base de datos basado en un modelo racional se mencionaran los comandos básicos para trabajar con Mysql.

Al iniciar nos pedirá una contraseña para especificar la maquina en el que se aloja el servidor de mysql. Hay que especificar la base de datos y después se utilizara el comando USE

Y para crear una base de datos se utiliza

CREATE DATABASE base_datos;

Si existe una base llamada igual el programa nos mandara un mensaje de error. Solo podemos crear una base cuando no exista una con el mismo nombre para esto se puede agregar el

IF NOT EXISTS:

CREATE DATABASE IF NOT EXISTS base_datos;

Cuando creamos una base de datos también podemos especificar los caracteres y colación a utilizar para esto se pude usar CREATE DATABASE IF NOT EXISTS base_datos;

Cuando c















DEFAULT CHARACTER SET y DEFAULT COLLATE según sea el caso al terminar de definir las bases de datos se otorgaran valores a las tablas a menos que se indiquen otros.

Para comunicarnos con el servidor podemos usar el comando SET NAMES: SET NAMES "utf8";

Podemos ver una lista de caracteres admitidos por el programa usando el comando SHOW CHARACTER SET;

Los juegos de caracteres más usados son:

v  Ascii: se conoce como US-ASCII. Es una codificación de caracteres de 7 bits con 95 caracteres imprimibles.

v  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, IANA ISO-8859-1 ISO 8859-1. Los tres se parecen mucho y por ello se confunden con continuidad. A diferencia de ASCII, CP1252, y por lo tanto ISO 8859-1 e ISO-8859-1, son juegos de caracteres de 8 bits, y permiten representar 256 caracteres distintos. Los tres representan textos en las lenguas de Europa: afrikaans, alemán, aragonés, asturiano, catalán, danés, escocés, español, feroés, finés, francés, gaélico, gallego, inglés, islandés, italiano, neerlandés, noruego, portugués, sueco y vasco.

v  utf8, de 8-bit es un acrónimo de “Universal Code” (código universal) y es como el nombre lo indica, caracteres con los que podemos representar textos escritos en la mayoría de los alfabetos, utiliza de 1 a 4 bytes para representar los caracteres, dependiendo del símbolo.

Para ascii la colación por defecto es ascii_general_ci, para latin1 latin1_swedish_ci y para utf8 utf8_general_ci.

Los nombres para las colaciones comienzan con el nombre de caracteres asociado y terminan con _ci si la comparación no tiene en cuenta mayúsculas y minúsculas, _cs  en caso contrario y _bin si es binaria

SHOW COLLATION LIKE "utf8%";

Para ver las distintas bases de datos disponibles en nuestro servidor MySQL:

SHOW DATABASES;

SHOW DATABASES;

Para borrar una base de datos:

DROP DATABASE base_datos;

DROP DATABASE base_datos;

Para seleccionar la base de datos con la que queremos trabajar:

USE base_datos;

USE base_datos;

Para ver las tablas de la base de datos:

SHOW TABLES;

SHOW TABLES;

Para ver las columnas de la tabla:

 SHOW COLUMNS FROM tabla;

SHOW COLUMNS FROM tabla;

O si lo que buscamos es un atajo usaremos :

DESCRIBE tabla;

DESCRIBE tabla;

oooO también:

DESC tabla;

DESC tabla;

Si necesitamos ver tambié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;

Para crear una tabla nueva se usa el comando CREATE TABLE tabla al que se le pasa la definición de las columnas, las restricciones (constraints) y las opciones

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 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 );

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 columnas pueden ser enteros, n decimales, fechas, horas, cadenas.

Los tipos numéricos son:

v  BIT: Representación en binario de un número. Por defecto es un número binario de 1 bit por lo que su valor puede ser 0 o 1.

v  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. También se puede indicar el número mínimo de dígitos que queremos utilizar para mostrar el valor encerrando esta cantidad entre paréntesis; 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.

v  BOOL: Sinónimo de TINYINT(1). El valor 0 se considera falso, el resto verdadero.

v  BOOLEAN: Sinónimo de TINYINT(1). El valor 0 se considera falso, el resto verdadero.

v  SMALLINT: Un entero pequeño, de -32768 a 32767.

v  MEDIUMINT: Un entero de tamaño medio, de -8388608 a 8388607.

v  INT: Un entero, con rango de -2147483648 a 2147483647 y de 0 a 4294967295 si es UNSIGNED.

v  INTEGER: Sinónimo de INT.

v  BIGINT: Un entero grande, de -9223372036854775808 a 9223372036854775807

v  SERIAL: Alias para BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE.

v  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

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

v  REAL: Sinónimo de DOUBLE, a menos que esté activado el modo REAL_AS_FLOAT, en cuyo caso funciona como sinónimo de FLOAT.

v  DOUBLE PRECISION: Sinónimo de DOUBLE.

v  DECIMAL: Para representar números decimales de forma más precisa que FLOAT y DOUBLE.

v  DEC: Sinónimo de DECIMAL

v  NUMERIC: Sinónimo de DECIMAL.

Los tipos relativos a fechas y horas son los siguientes:

v  DATE: Para representar una fecha en formato YYYY-MM-DD.

v  DATETIME: Una combinación de fecha y hora en formato YYYY-MM-DD HH:MM:SS. El rango soportado va desde 1000-01-01 00:00:00 a 9999-12-31 23:59:59.

v  TIMESTAMP: Un timestamp. El rango va desde 1970-01-01 00:00:01 UTC a 2038-01-09 03:14:07 UTC. Si se asigna el valor NULL a un TIMESTAMP se almacenará la fecha y hora actual

v  TIME: Una hora. El valor se muestra en formato HH:MM:SS

v  YEAR: Un año en formato YYYY. Los valores admitidos son 0000 y los valores de 1901 a 2155.

Los tipos de texto son los siguientes:

v  CHAR: Cadenas de longitud fija cuyo número de caracteres se especifica entre paréntesis (si no se especifica es 1 por defecto)..

v  VARCHAR: Cadena de longitud variable.

v  BINARY: Similar a CHAR pero las cadenas se almacenan como binarias.

v  VARBINARY: Similar a VARCHAR pero las cadenas se almacenan como binarias.

v  BLOB: Un Binary Large OBject, para almacenar datos binarios como imágenes. El tamaño máximo es de 65.535 bytes.

v  TINYBLOB: Un BLOB de pequeño tamaño

v  MEDIUMBLOB: Un BLOB de tamaño medio

v  LONGBLOB: Un BLOB de gran tamaño

v  TEXT: Un texto con un máximo de 65.535 caracteres

v  TINYTEXT: Un texto pequeño, con un máximo de 255 caracteres.

v  MEDIUMTEXT: Un texto de longitud media.

v  LONGTEXT: Un texto largo, con un máximo de 4.294.967.295 caracteres.

v  ENUM: Enumerado, un tipo cuyo valor puede ser una cadena

v  SET: Similar a ENUM, pero en este caso el campo puede tener cero o más valores

Para cada columna, además del tipo, podemos definir otras propiedades

v  NOT NULL: No se puede introducir valores nulos.

v  DEFAULT valor: Para definir un valor por defecto

v  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, y debe tratarse de una clave.

v  UNIQUE KEY: Los valores no se pueden repetir.

v  PRIMARY KEY: La clave primaria de la relación. Los valores deben ser únicos y no nulos.

v  COMMENT: Comentarios varios sobre el campo.

v  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:

v  PRIMARY KEY: Para indicar el campo o campos que conforman la clave primaria.

v  KEY: Para crear una clave no primaria ni única. Esto creará un índice para el campo.

v  INDEX: Sinónimo de KEY.

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

v  CHECK (expresion): En teoría, para definir otras restricciones.

Para eliminar una tabla:

DROP TABLE tabla;

DROP TABLE tabla;

Para que no produzca un error si la tabla no existe:

DROP TABLE IF EXISTS tabla;

DROP TABLE IF EXISTS tabla;

Para modificar una tabla se utiliza ALTER TABLE que permite cosas como añadir columnas:

ALTER TABLE tabla ADD COLUMN valor INT;

ALTER TABLE tabla ADD COLUMN valor INT;

Eliminar columnas:

ALTER TABLE tabla DROP COLUMN valor;

ALTER TABLE tabla DROP COLUMN valor;

Cambiar la definición de las columnas:

ALTER TABLE tabla MODIFY COLUMN valor TINYINT;

ALTER TABLE tabla MODIFY COLUMN valor TINYINT;

O renombrar la tabla:

ALTER TABLE tabla RENAME TO tabla2;

ALTER TABLE tabla RENAME TO tabla2;

Para insertar valores en una tabla, si vamos a dar valores a todas las columnas:

INSERT INTO usuario VALUES (1, "Pablo Santander", "Calle Bolivia 18", "Madrid", 17);

INSERT INTO usuario VALUES (1, "Pablo Santander", "Calle Bolivia 18", "Madrid", 17);

Si sólo vamos a dar valores solo a algunas columnas hay que indicar a cuáles especificamente:

INSERT INTO usuario(nombre, direccion, ciudad, edad) VALUES ("Juan Marmota", "Calle Santiago 23", "Sevilla", 21);

INSERT INTO usuario(nombre, direccion, ciudad, edad) VALUES ("Juan Marmota", "Calle Santiago 23", "Sevilla", 21);

Para insertar varias tuplas con un solo INSERT solo hay que separarlas con comas:

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);

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);

INSERT INTO blog VALUES (1, 1, "El emo blog"), (2, 2, "El ego blog"), (4, 4, "Mis fotos"), (5, 5, "En Groenlandia");

INSERT INTO blog VALUES

    (1, 1, "El emo blog"),

    (2, 2, "El ego blog"),

    (4, 4, "Mis fotos"),

    (5, 5, "En Groenlandia");

Para actualizar las tuplas:

UPDATE usuario SET nombre = "Marta Marsupial", dirección = "Calle Italia 14" WHERE id = 3;

UPDATE usuario

    SET nombre = "Marta Marsupial", direccion = "Calle Italia 14"

    WHERE id = 3;

Para borrar tuplas:

DELETE FROM usuario WHERE id = 2;

DELETE FROM usuario

    WHERE id = 2;

Para borrar todas las tuplas de una tabla:

DELETE FROM usuario;

DELETE FROM usuario;

O tambien:

TRUNCATE usuario;

TRUNCATE usuario;

Para seleccionar tuplas se utiliza SELECT. Basta con especificar qué columnas queremos seleccionar de las tuplas y la tabla en la que se encuentran:

SELECT nombre, dirección FROM usuario;

SELECT nombre, direccion

    FROM usuario;

Un truco para que se muestren los resultados en vertical en lugar de en tablas

SELECT nombre, dirección FROM usuario\G

SELECT nombre, direccion

    FROM usuario\G

Si queremos seleccionar todos los campos podemos usar el caracter * como atajo:

SELECT *FROM usuario;

SELECT *

    FROM usuario;

También podemos usar funciones en las expresiones que determinan lo que estamos seleccionando. En este caso se usa LOWER, que transforma una cadena en minúsculas:

SELECT LOWER(nombre), LOWER(direccion) FROM usuario;

SELECT LOWER(nombre), LOWER(direccion)

    FROM usuario;

Para seleccionar sólo las tuplas que cumplan una determinada condición:

SELECT * FROM usuario WHERE edad < 18;

SELECT *

    FROM usuario

    WHERE edad < 18;

Para agrupar las tuplas por un determinado campo:

SELECT ciudad, COUNT(ciudad) FROM usuario GROUP BY ciudad;

SELECT ciudad, COUNT(ciudad)

    FROM usuario

    GROUP BY ciudad;

La salida de un GROUP BY está ordenada según los valores del campo sobre el que se agrupa.

SELECT ciudad, COUNT(ciudad) FROM usuario GROUP BY ciudad DESC;

SELECT ciudad, COUNT(ciudad)

    FROM usuario

    GROUP BY ciudad DESC;

Para seleccionar solo algunas tuplas de entre el resultado de un GROUP BY se puede utilizar la cláusula HAVING:

SELECT ciudad, COUNT(ciudad) FROM usuario GROUP BY ciudad DESC HAVING COUNT(ciudad) < 1;

SELECT ciudad, COUNT(ciudad)

    FROM usuario

    GROUP BY ciudad DESC

    HAVING COUNT(ciudad) < 1;

Para ordenar las tuplas según los valores de un campo:

SELECT * FROM usuario ORDER BY nombre;

SELECT *

    FROM usuario

    ORDER BY nombre;

Como GROUP BY, se ordena de forma ascendente, a menos que se utilice la palabra clave DESC:

SELECT * FROM usuario ORDER BY nombre DESC;

SELECT *

    FROM usuario

    ORDER BY nombre DESC;

Para limitar el número de tuplas que queremos que devuelva SELECT se utiliza LIMIT:

SELECT * FROM usuario LIMIT 2;

SELECT *

    FROM usuario

    LIMIT 2;

A LIMIT se le pueden pasar dos números separados por comas, en cuyo caso el primer número indica la tupla desde la que se empieza a contar (el índice comienza en 0, no en 1

SELECT * FROM usuario LIMIT 2,2;

SELECT *

    FROM usuario

    LIMIT 2,2;

Para crear una selección de tuplas combinadas de varias tablas se utiliza la sentencia JOIN. Un JOIN, sin nada más, no hace más que combinar todas las tuplas de la primera tabla con todas tuplas de la segunda tabla

SELECT * FROM usuario JOIN blog;

Esto no suele ser muy útil. Suele ser más común el utilizar la cláusula ON para añadir una condición que especifique cuándo combinar las tablas. En esta sentencia,  nos aprovechamos de que hay una relación entre las tablas

SELECT nombre, titulo FROM usuario JOIN blog ON usuario.id_usuario = blog.id_usuario;

SELECT nombre, titulo

    FROM usuario JOIN blog ON usuario.id_usuario = blog.id_usuario;

Un INNER JOIN cuya expresión para la sentencia ON es una condición de igualdad. El NATURAL JOIN, o combinación natural, es un tipo especializado 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;

SELECT  nombre, titulo

    FROM usuario NATURAL JOIN blog;

Si queremos 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);

SELECT nombre, titulo

    FROM usuario JOIN blog USING (id_usuario);

Si usaramos un LEFT JOIN, a las tuplas del caso anterior se les sumaría un nuevo conjunto de tuplas que consistiría en las tuplas de la tabla izquierda, aunque no tengan blog asociado:

SELECT nombre, titulo FROM usuario LEFT JOIN blog ON usuario.id_usuario = blog.id_usuario;

SELECT nombre, titulo

    FROM usuario LEFT JOIN blog ON usuario.id_usuario = blog.id_usuario;

Si usaramos un 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;

SELECT nombre, titulo

    FROM usuario RIGHT JOIN blog ON usuario.id_usuario = blog.id_usuario;

Para los OUTER JOIN también podemos utilizar NATURAL

SELECT nombre, titulo FROM usuario NATURAL LEFT JOIN blog;

Para los que han adivinado la utilidad de FULL OUTER JOIN añade las tuplas de la tabla izquierda y derecha que no tengan correspondencia con la otra tabla

SELECT nombre, titulo

    FROM usuario NATURAL LEFT JOIN blog;

PPa





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;

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