Base de datos sakila
¿Cómo importarlo?
Tenemos dos sql
schema y data
Primero importamos el esquema. Opciones:
Workbench copiar sql pegarlo en una consulta y ejecutar
Workbench Server->data Import->self-contained-file->Seleccionar archivo
PhpMyAdmin copiar sql pegarlo en ventana SQL
PhpMyadmin->importar->Seleccionar archivo Deshabilitar revisión claves foráneas
Resumen SQL modificar datos
-- LMD Lenguaje de manipulación de datos -- CRUD --> Create Read Update Delete Operaciones básicas sobre datos -- Mantenimiento de una tabla: Altas bajas modificaciones y consultas -- Create: insert into nombre_tabla (lista_de_campos) values (lista_de_valores) insert into autor (nombre,email,pais_nacimiento) values ('eva','eva@eva.com','Francia'); insert into autor (nombre,email) values ('eva','eva@eva.com'),('eva','eva@eva.com'); insert into musico (nombre, descripcion) values ('Johann Sebastian Bach','Un excelente músico renacentista'), ('Evaristo García','Representante del nuevo sonido manchego'); -- UPdate update nombre_tabla set campo=nuevo valor[, campo2=nuevo valor] [where condicion] -- Aunque el where es opcional casi siempre será obligatorio -- Aunque la condición puede ser cualquiera es muy frecuente id=numero update musico set nombre='Juanito Prime', descripcion='hola' where id_musico=1; update musico set descripcion='Músico muy competente' where id_musico=10; update musico set descripcion='Músico muy competente' where descripcion='qqqqq'; -- Delete delete from tabla [where condicion] delete from musico where id_musico=12; delete from musico where descripcion='eeee'; delete from musico where nombre='Juanito'; -- Vaciar una tabla truncate tabla truncate musico;
Ejercicio LMD
Tengo la siguiente tabla:
CREATE TABLE `autor` ( `idautor` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(150) NOT NULL, `email` varchar(100) DEFAULT NULL, `pais_nacimiento` varchar(25) DEFAULT NULL, PRIMARY KEY (`idautor`) )
Realizad lo siguiente utilizando lenguaje de manipulación de datos
Insertar los siguientes registros: Ana, ana@gmail.com, España; Eva, eva@gmail.com,España;John, john@gmail.com,Francia;Rose, rose@gmail.com,Francia
Modificar el registro de JOhn (buscar el id para que sea exacto) y cambiar el mail a john.f@gmail.com
Eliminar a Eva (buscar el id para que sea exacto)
Seleccionar todos los autores con un id mayor de 2
Ejercicio DML Musicos
Insertar los siguiente músicos:
‘Johann Sebastian Bach’, ‘Músico renacentista muy bueno’
‘Evaristo García’, ‘Representante de los nuevos sonidos manchegos’
Modificar el músico con la primera id (1) cambiar la descripción a: ‘Músico excelente’
Eliminar el músico con id 1
Ejercicio DDL
Crear una base de datos con las siguientes tablas:
musico
id int auto pk
nombre varchar(100)
descripcion text
disco
id int auto pk
titulo varchar(100)
precio decimal(6,2)
Hay una relación entre disco y musico n-N
Crear con DDL las tablas necesarias con sus foreignkeys
</pre> CREATE DATABASE musica; use musica; CREATE TABLE musico ( id_musico INT AUTO_INCREMENT, nombre VARCHAR(100), descripcion TEXT, PRIMARY KEY (id_musico) ); CREATE TABLE disco ( id_disco INT AUTO_INCREMENT, titulo VARCHAR(100), precio DECIMAL(6,2), PRIMARY KEY (id_disco) ); CREATE TABLE musico_disco ( id_musico_disco INT AUTO_INCREMENT, id_musico INT, id_disco INT, PRIMARY KEY (id_musico_disco), key (id_musico), key (id_disco), FOREIGN KEY fk_musico (id_musico) REFERENCES musico(id_musico), FOREIGN KEY fk_disco (id_disco) REFERENCES disco(id_disco) ); <pre>
Sql sentencias creación de datos (DDL)
Crear BD:
https://www.w3schools.com/sql/sql_create_db.asp
Crear tabla:
http://www.mysqltutorial.org/mysql-create-table/
http://www.mysqltutorial.org/mysql-foreign-key/
http://www.mysqltutorial.org/mysql-index/mysql-create-index/
CREATE TABLE [IF NOT EXISTS] table_name( lista_columnas ) ENGINE=storage_engine -- Formato de las columnas: nombre_columna tipo_columna(length) [NOT NULL] [DEFAULT value] [AUTO_INCREMENT] PRIMARY KEY (columna) -- De las dos maneras se puede: INDEX nombre_indice (nombre_columna) KEY (nombre_columna) FOREIGN KEY nombre_clave_foranea(columna) REFERENCES tabla_referenciada(columna_tabla_referrenciada) ON DELETE action ON UPDATE action; -- Crear un índice después de crear la tabla CREATE INDEX index_name ON table_name (column1, column2, ...); CREATE TABLE IF NOT EXISTS tasks ( task_id INT AUTO_INCREMENT, employee_id INT NOT NULL, title VARCHAR(255) NOT NULL, start_date DATE, due_date DATE, status TINYINT NOT NULL, priority TINYINT NOT NULL, description TEXT, PRIMARY KEY (task_id), INDEX ix_title (title), FOREIGN KEY fk_employee(employee_id ) REFERENCES employee (employee_id ) ON DELETE RESTRICT ON UPDATE CASCADE ) ENGINE=INNODB;
Solucionar estadísticas
Solución 1:
Copiar el mysql dump de xampp\mysql a c:\Archivos de Programa\Mysql\Mysql workbench 8.0
Solución 2:
Abrir el archivo c:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\wb_admin_export.py:
Y cambiar la siguiente línea a esto:
skip_column_statistics = True
Solución 3:
Exportar desde el phpmyadmin (super sencillo)
Solución 4:
Exportar cada tabla individualmente con botón derecho ->Send to sql editor->create statement
Ejercicio global
Queremos hacer una base de datos para una tienda de pasteles. Los pasteles están clasificados en diferentes categorías de las que queremos saber el nombre y una descripción. Cada pastel tiene un nombre, una foto, un precio, si es apto para celíacos y una descripción.
Los clientes pueden comprar los pasteles. Del cliente queremos almacenar el nombre, el teléfono y la dirección. Un cliente puede comprar muchos pasteles y un pastel puede ser comprado por muchos clientes.
Crear el modelo Entidad-Relación.
A partir de ahí, el modelo lógico.
Escoged bien los tipos de datos para cada campo.
Una vez tengamos el modelo lógico, lo implementamos en nuestra base de datos.
Añadid las foreign keys necesarias.
Añadis un índice único al nombre de la categoría y un índice normal al nombre del pastel y al nombre del cliente.
Ejercicio índices y foreign keys
Crear la base de datos siguiente:
revista
id_revista int AI PK
titulo VARCHAR(100)
issn CHAR(8)
numero: varchar(20)
anyo_publicacion: year
articulo
id_articulo int AI PK
titulo varchar(200)
pagina_inicio: int
pagina_fin: int
id_revista int (NO AI)
autor
id_autor int AI PK
nombre: varchar(150)
email: varchar(100)
pais_nacimiento: varchar(25)
autor_articulo
id_autor_articulo int AI PK
id_articulo int (NO AI)
id_autor int (NO AI)
posición: tinyint
Añadir las fk, un índice normal en título revista y único en issn y un índice normal en título artículo y nombre autor