Base de Datos – LSI y PI Lic. Paola Daniela Budán – Lic. Federico Rosenzvaig Motores de Bases de Datos MySQL (Oracle) SQL Server (Microsoft) PostgreSQL Oracle (Oracle) DB2 (IBM) Informix (IBM) Instalación Descargar el motor de http://www.mysql.com Ir a Downloads y seleccionar MySQL Community Server Elegir la plataforma y el entorno adecuado y descargar Descargar el MySQL WorkBench (GUI Tool) de la misma url Ir a Download y seleccionar la plataforma y el entorno adecuado y descargar. Elegir el servidor más cercano, descargar e instalar. Administración del Servidor Crear Backup Restaurar Base de Datos Lenguaje SQL SQL (Structure Query Language) Lenguaje estructurado de Consulta DML (Data Manipulation Language) Lenguaje de Manipulación de Datos DDL (Data Definition Language) Lenguaje de Definición de Datos DCL (Data Control Language) Lenguaje de Control de Datos Instrucciones SQL DDL: Create; Alter; Drop DML: Insert; Update; Delete; Select; DCL: Grant; Revoke Crear una Base de Datos CREATE DATABASE <nombre_base_datos>; Ejemplo: CREATE DATABASE inmobiliaria; Borrar una Base de Datos DROP DATABASE <nombre_base_datos>; Ejemplo: DROP DATABASE inmobiliaria; Comandos Varios (1) USE <nombre_base_datos>; Permite seleccionar la base de datos con la que se va a trabajar. Ejemplo: USE inmobiliaria; SHOW DATABASES; Muestra las bases de datos existentes; SHOW TABLES; Muestra las tablas de la base de datos seleccionada. Comandos Varios (2) DESCRIBE <nombre_tabla>; Muestra la estructura de la tabla, o sea el nombre y el tipo de dato de cada uno de los campos. SHOW CREATE TABLE <nombre_tabla>; Muestra la sentencia create table utilizada para la tabla. Creación de Tablas CREATE TABLE [nombreTabla] ( <nombreColumna_1> <tipoDato>, <nombreColumna_2> <tipoDato>, …, <nombreColumna_n> <tipoDato> ); Ejemplo: CREATE TABLE barrio ( IdBarrio int, DescBarrio varchar(40) ); Tipo de Datos (1) MYSQL INT o INTEGER BIGINT Números enteros DECIMAL(P , [S] ) NUMERIC(P , [S] ) Número con una precisión de P dígitos. Cuando se especifica S decimales se toman de los P dígitos. FLOAT DOUBLE Número de punto flotante CHAR(n) Se puede especificar la cantidad de caracteres que se desean almacenar. Si se almacenan menos del los permitidos, el RDBMs le agrega espacios para completarlos. VARCHAR(n) Igual que CHAR excepto que la longitud es variable. Solo utiliza memoria para la cantidad de caracteres almacenados. Tipo de Datos (2) MYSQL DATETIME DATE Permite almacenar una fecha como año, mes, día, hora, min, seg. Ej: ‘2011-05-21 02:46:35’ TIME Permite almacenar una hora como hora, minuto y segundo TIMESTAMP Igual que DATETIME, solo que permite especifiacar un valor default Create Table CREATE TABLE <nombre tabla> ( < nombre columna> <tipo> [<default value>] [<column constraints>], ::: < nombre columna> <tipo> [<default value>] [<column constraints>], <restricciones de tabla>, ::: <restricciones de tabla> ); Default Esta clausula permite asignar un valor por omisión cuando se inserta una fila y la columna no tiene un valor especificado. DEFAULT <valor de expresión> Valor de expresión es una expresión simple de literales, funciones y valore. Este valor debe poder ser evaluado a un tipo de dato que concuerde o pueda ser convertido implícitamente al tipo de dato de la columna. Ejemplos: direccion VARCHAR(30) DEFAULT ‘-’ inventario INT DEFAULT 0 Constraint Hay dos tipos de especificación de restricciones: Restricciones de columna: declaradas y aplicadas a una columna en particular. Restricciones de tabla: declaradas separadamente y puede ser aplicada a una o más columnas. Null y UNIQUE NOT NULL: indica que no puede contener valores nulo la columna. Si no se especifica asume que acepta valores nulos. UNIQUE: no permite valores repetidos por columna. Null y UNIQUE CREATE TABLE propietarios ( propId INT NOT NULL, propNombre VARCHAR(30) UNIQUE, propApellido VARCHAR(30) ); CREATE TABLE propietarios ( propId INT NOT NULL, propNombre VARCHAR(30), propApellido VARCHAR(30), UNIQUE (propNombre,propApellido) ); Primary Key Define la clave primaria de una tabla. CREATE TABLE propiedad ( proId INT PRIMARY KEY, prodimension FLOAT(5,2) ); CREATE TABLE propiedad_propietario ( proId INT, propId INT, PRIMARY KEY (proId, propId) ); Integridad Referencial CREATE TABLE <nombre_tabla> ( < nombre columna> <tipo> [<default value>] [<column constraints>], [CONSTRAINT [identificador]] FOREIGN KEY (nomcol, … ,nomcol) REFERNCES <nombre_tabla> (nomcol, … ,nomcol) ON DELETE [CASCADE | SET NULL | NO ACTION] ON UPDATE [CASCADE | SET NULL | NO ACTION] ); Integridad Referencial CREATE TABLE propiedad_propietario ( proId INT, propId INT, PRIMARY KEY (proId, propId), FOREIGN KEY (proId) REFERENCES propiedad (proId), FOREIGN KEY (propId) REFERENCES propietario (propId), ); Alter Table ¿Como funciona ALTER TABLE? ALTER TABLE funciona creando una copia temporal de la tabla original. La alteración se realiza en la copia, luego la tabla original se borra y se renombra la nueva. Mientras se ejecuta ALTER TABLE la tabla original es legible por otros clientes. Las actualizaciones y escrituras en la tabla se esperan hasta que la nueva tabla esté lista, luego se redirigen automáticamente a la nueva tabla sin ninguna actualización fallida. Alter Table Permite modifica la estructura de una tabla existente en la Base de datos. ALTER TABLE <nombre_tabla> <acción> <nombre_tabla>: Nombre de la tabla a la que se desea modificar su estructura. <acción>: tipo de modificación que se aplicará a la tabla. Puedens ser algunas de las siguientes acciones: ADD [COLUMN] <nombre_col> <definicion_de_columna> ALTER [COLUMN] <nombre_col> DROP [COLUMN] <nombre_col> ADD [CONSTRAINT] <restriccion_de_tabla> DROP CONSTRAINT <nombre_restriccion> [CASCADE | RESTRICT] Alter Table ADD [COLUMN] <definición_de_columna> Agrega una nueva columna a la Tabla. <definición_de_columna>: puede ser una definición similar a la que se utiliza con CREATE TABLE que contiene <nombre_columna-1> <tipo> [<valor por defecto>] [<restricciones de columna>] Ejemplo: ALTER TABLE propietario ADD COLUMN FechaNacimiento DATE DEFAULT ‘1963-06-25’ NOT NULL; . Alter Table ALTER [COLUMN] <nombre_columna> [SET DEFAULT <valor expresión> | DROP DEFAULT] Cambia o elimina el valor especificado por defecto de la columna. Ejemplo: ALTER TABLE propietario ALTER COLUMN FechaNacimiento DROP DEFAULT; ALTER TABLE propietario ALTER COLUMN FechaNacimiento SET DEFAULT ‘2001-01-01’; Alter Table DROP [COLUMN] <nombre_columna> [CASCADE | RESTRICT] Elimina la columna <nombre_columna> de la tabla. Si hay alguna dependencia externa en esta columna, la eliminación será rechazada. Si se especifica CASCADE, el DBMS intenterá eliminar primero todas las dependencias externas que posea la columna antes de eliminarla. EL valor por defecto es RESTRICT, si se especifica este valor no se eliminará la columna si esta posee referencias externas. Ejemplo: ALTER TABLE propiedad DROP COLUMN FechaNacimiento; ALTER TABLE barrio DROP COLUMN barrioId CASCADE; Alter Table ADD [CONSTRAINT] <restriccion_de_tabla> Permite agregar una nueva restricción a la tabla, se aplican las mismas restricciones que se utilizan con CREATE TABLE. Ejemplo: ALTER TABLE barrio ADD CONSTRAINT indiceunico UNIQUE (nombreBarrio); Alter Table DROP CONSTRAINT <nombre_restriccion> [CASCADE | RESTRICT] Elimina una restricción que ha sido creada con el nombre <nombre_restriccion> Si hay entidades externas que dependen de esta restricción, la eliminación podría invalidar la entidad. Si se especifica RESTRICT y la entidad podría ser invalidad, el DBMS no quitará la restricción. Este es el comportamiento predeterminado. Si se especifica CASCADE, el DBMS intentará eliminar todas las restricciones de las entidades que potencialmente este violando antes de eliminar la restricción Ejemplo; ALTER TABLE barrio DROP CONSTRAINT indiceunico; Alter Table ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] UNIQUE [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] | CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name] | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name] | DROP FOREIGN KEY fk_symbol Alter Table CHANGE [COLUMN] <nombre_columna> <nueva_definicion_de_columna> Permite cambiar el nombre y el tipo a una columna. Ejemplo: ALTER TABLE barrio CHANGE direccion domicilio VARCHAR(40) NOT NULL Alter Table Puede renombrar una columna usando CHANGE <viejo_nom_col> <nuevo_nom_col> <definicion_columna>. Para ello, especifique el nombre de columna viejo y nuevo y el tipo de la columna actual. Por ejemplo para renombrar una columna INTEGER de ‘a’ a ‘b’ puede hacer: ALTER TABLE producto CHANGE a b INTEGER; Si quiere cambiar el tipo de una columna pero no el nombre, la sintaxis CHANGE necesita un nombre viejo y nuevo de columna, incluso si son iguales. Por ejemplo: ALTER TABLE producto CHANGE b b BIGINT NOT NULL; Puede usar MODIFY para cambiar el tipo de una columna sin renombrarla: ALTER TABLE producto MODIFY b BIGINT NOT NULL; Borrar una tabla Cuando se borra una tabla se borran los datos y la estructura de la tabla de la base de datos. Esta es una operación que no se puede deshacer. Se puede borrar una o varias tablas. DROP TABLE <nombre_tabla> [, <nombre_tabla>]; DML - Insert INSERT INTO <nom_tabla> (<col1>,…,<coln>) VALUES (<exp1>,…,<expn>) [, (<exp1>,…,<expn>)]; INSERT INTO tipoPropiedad (tipoproId, tipoproDesc) VALUES (1,’casa’),(2,’departamento’); DML - Insert Agrega filas a partir de una consulta. Los tipos de los atributos de ambas listas de atributos deben ser compatibles. INSERT INTO <nom_tabla> (<col1>,…,<coln>) (sentencia SELECT); INSERT INTO alumno (aluDoc, aluNom, aluDir) (SELECT doc, nom, dir FROM ingresante WHERE comision = 3) DML - DELETE DELETE FROM <nombre_tabla> [WHERE <condicion>]; Si no se especifica la cláusula WHERE, se eliminan todos los registros de la tabla. DELETE FROM propiedad WHERE tipoproId = 2; DELETE FROM barrio; DML - UPDATE UPDATE <nombre_tabla> SET <atributo1> = <valor1>, …, <atributo1> = <valor1> WHERE <condición>; Si no se especifica la cláusula WHERE, la modificación de los datos afecta a toda la tabla. DML - UPDATE UPDATE mascotas SET masNom = ‘Tom’ , mascolor = ‘marron’ WHERE masId = 2; Ejemplo: Aumentar un 5% el precio de los productos del rubro 45; UPDATE productos SET proPrecio = proPrecio * 1,05 WHERE proRubro = 45; DML - SELECT SELECT <select_exp> [, <select_exp>] FROM <nombre_tabla> WHERE <condición> ORDER BY <nomCol> [ASC | DESC] ,…, <nomCol> [ASC | DESC]; DML - SELECT Ejemplo SELECT masId, masNom, razaId FROM mascotas WHERE razaId = 3 ORDER BY masNom DESC; SQL – ALIAS de Columna de Tabla SQL permite que se definan alias de columna y de tabla Precedencia de Operadores (MySQL) Lista de menor a mayor precedencia. Consultas combinadas - JOIN La información en la Base de Datos se encuentra repartida en varias tablas. Las consultas combinadas permiten resolver este problema accediendo a varias tablas para obtener la información necesaria. Las consultas combinadas pueden ser de dos tipos: Combinación interna (INNER JOIN) Combinación externa (OUTER JOIN) Consultas combinadas - JOIN El formato modificado de la cláusula FROM de la sentencia SELECT es la siguiente: Formato general: FROM <tabla1> <operador_join> JOIN <tabla2> ON <condicion_join> <operador_join> = {INNER | LEFT [OUTER] | RIGHT [OUTER] } Formato detallado: FROM <tabla1> {INNER | LEFT [OUTER] | RIGHT [OUTER] } JOIN <tabla2> ON <tabla1.columna1> = <tabla2.columna2> Consultas combinadas - JOIN Combinación interna: INNER JOIN: se muestran solo los registros en los cuales coinciden los campos de la unión (deben existir en las dos tablas) Combinación externa: LEFT OUTER JOIN: se muestran todos los registros de la tabla de la izquierda (tabla1); si hay valores coincidentes en los campos de la unión de la segunda tabla se muestran, caso contrario se dejan en blanco. La tabla a la izquierda de la palabra JOIN se denomina tabla preservada y la de la derecha no preservada. RIGHT OUTER JOIN: se muestran todos los registros de la tabla de la derecha (tabla2); si hay valores coincidentes en los campos de la unión de la primera tabla se muestran, caso contrario se dejan en blanco. La tabla a la derecha de la palabra JOIN se denomina tabla preservada y la de la izquierda no preservada. Ejemplo de Combinación Interna SELECT Cli_Nombre, Cli_Apellido, Veh_Patente, Veh_Descripcion FROM Cliente c JOIN Vehiculo_Cliente vc ON c.Cli_Id = vc.Cli_Id JOIN Vehiculo v ON v.Veh_Id = vc.Veh_Id; Ejemplo de Combinación Externa SELECT * FROM Cliente c LEFT JOIN vehiculo_cliente vc ON c.Cli_Id = vc.Cli_Id; SELECT Cho_CUIL, Cho_Nombre, Cho_Apellido, Veh_Patente, Veh_Descripcion FROM Chofer RIGHT JOIN Vehiculo v ON Chofer.Veh_Id = v.Veh_Id; SQL - VISTAS Una vista es una consulta (tabla virtual), que refleja el contenido de una o más tablas. Es una tabla derivada de otras tablas (básicas o virtuales). Las tablas consultadas en una vista se denominan tablas base . Una vista se caracteriza porque: Se considera que forma parte del esquema externo. Una vista es una tabla virtual (no tiene una correspondencia a nivel físico) Se puede consultar como cualquier tabla básica. Las actualizaciones se transfieren a la/s tabla/s original/es (con ciertas limitaciones). Ventajas de las Vistas Centrar el interés en los datos de los usuarios. Centrarse sólo en los datos importantes o adecuados Limitar el acceso a los datos confidenciales Enmascarar la complejidad de la base de datos. Ocultar el diseño de la base de datos compleja Simplificar las consultas complejas, incluyendo las consultas distribuidas a datos heterogéneos Simplificar la administración de los permisos de usuario. Mejorar el rendimiento Organizar los datos para exportarse a otras aplicaciones. Aplicaciones de las Vistas USOS: Para la especificación de tablas con información que se accede con frecuencia pero no posee existencia física: Información derivada de la relación entre varias tablas. Información derivada de la formación de grupos de tuplas (p.ej. para la obtención de estadísticas). En general: información derivada de consultas complejas a la que se accede con frecuencia. Como mecanismo de seguridad: creación de vistas con, únicamente, los atributos de las tablas a los cuales se desea permitir acceder a determinados usuarios. Para la creación de esquemas externos Create View Una vista es una consulta (tabla virtual), que refleja el contenido de una o más tablas. CREATE VIEW <nombre_vista> [(<columnas>)] AS <sentencia _SELECT> Los nombres de las columnas de la vista seran los devueltos por la sentecia Select. [(<columnas>)]: se utiliza si se desea dar un nombre de columna distinto al devuelto por la sentencia Select. Ejemplo: CREATE VIEW vistaCliente (‘Nombre del Cliente’, ‘Direccion del Cliente’) AS SELECT Nombre, Direccion FROM Cliente WHERE estado Like ‘Activo’; Alter View Modificar una vista existente. ALTER VIEW <nombre_vista> [(<columnas>)] AS <sentencia _SELECT> Conserva los permisos asignados. Hace que la instrucción SELECT y las opciones reemplacen la definición existente. La sintaxis es similar a CREATE VIEW. Ejemplo: ALTER VIEW vistaCliente AS SELECT Nombre, Direccion , Mail FROM Cliente WHERE estado Like ‘Inactivo’; Drop View Eliminar una vista existente. DROP VIEW <nombre_vista> ; Permita eliminar una vista. Ejemplo: DROP VIEW vistaAlumnos;