Mysql 2019
Enlaces
MySQL en Ubuntu 14.04 LTS
Desarrollo de base de datos para catalogo de biblioteca personal
Tutoriales
- Derek Banas: Intro uso MySQL: https://www.youtube.com/watch?v=yPu6qV5byu4
- DB, Intro a php: https://www.youtube.com/watch?v=7TF00hJI78Y
- DB, Intro a php+MySQL: https://www.youtube.com/watch?v=mpQts3ezPVg
- Me gustaría quizás conectarlo vía Python... y poderlo visualizar con Processing... ya veremos
Contenido
Instalación software
En Software Center de Ubuntu instalé:
- MySQL Server
- MySQL Client (no estoy seguro si necesito)
- MySQL Workbench (una aplicación con GUI...)
Salvo error de memoria (mía) al instalar el MySQL Server aparecen unos cuadros de diálogo pidiendo que se introduzca una password para el usuario root, y se confirme. Con este usario / password se accede a las aplicaciones luego, independientemente de que se creen otros más adelante.
Nuevo usuario en MySQL Workbench
Viendo el tutorial de D. Banas que no explica bien cómo empezar con usuarios de demás... Parece que el interfaz del MySQL Workbench en Ubuntu es bastante diferente del que aparece en el tutorial, quizás en Windows o Mac.
Al instalar el MYSQL Workbench me aparece un launcher en la barra principal de programas que permite arrancarlo con un click.
Aquí voy a trabajar en la propia máquina / ordenador, que se reconoce como localhost, o por su IP, 127.0.0.1
En mi Workbench, un poco a ciegas, trato de localizar el local host y crear un nuevo usuario. Voy a Database/Connect to Database - ahí creo que sale el localhost por defecto (fig 1), abriéndose una nueva ventana tras pedir el pw de root.
Crear nuevo usuario: En la nueva ventana de workbench (pestañas arriba con las diferentes ventanas abiertas, en la mía dice: Mysql@127.0.0.1:3306x - esto sale sólo, 3306 es el puerto de conexión), en Management/Users and Privileges, se abre nueva ventana; buscamos añadir nuevo usuario, se elige nombre y password, y de momento copié los parámetros del usuario root; lógicamente habrá que ver que permisos tienen los nuevos usuarios, pero eso lo haré más adelante.
Para hacerlo vía consola & MySQL: https://dev.mysql.com/doc/refman/5.5/en/create-user.html _ tendría que mirarlo mejor...
Empezar con la consola de Linux
Ahora me paso a la consola de Linux (terminal), para seguir el primer tutorial citado.
Para abrir mysql con el usuario creado; el nombre de mi nuevo usuario es test:
~$ mysql -u test -p
-u es el usuario test, el nombre del usuario con el que queremos acceder a mysql; podríamos hacerlo con root que es el otro que tenemos. -p es que pida el password
La consola responde pidiendo el password que se debe introducir.
Introducido correctamente, salen unas cuantas líneas de código deonde vemos la versión de MySQL instalada, en mi caso: Server version: 5.5.62-0ubuntu0.14.04.1 (Ubuntu)tecler
En el manual de referencia: https://dev.mysql.com/doc/refman/5.5/en/connecting-disconnecting.html
Ahora el "prompt" que aparece es así:
mysql>
La convención parece ser escribir los comandos en mayúsculas; estos se cierran siempre con ";" - punto y coma.
Para ver la versión puede teclearse el siguiente comando - la segunda parte no hace falta, claro:
mysql> SELECT VERSION(), CURRENT_DATE;
Para salir de MySQL se teclearía lo siguiente:
mysql> QUIT
Para probar que funciona.
mysql> SHOW DATABASES;
Mostrará las bases de datos; aparece una tabla con al menos 3 databases por defecto?, - que son del propio sistema.
mysql> SHOW GRANTS;
Nos muestra los permisos del usuario que estamos usando.
Crear una nueva base de datos
mysql> CREATE DATABASE catalogo;
Donde catalogo es el nombre de la base de datos a crear
Dando a enter, el sistema debe contestar, Query OK, ..., confirmando que se ha creado.
Si tecleamos de nuevo mysql> SHOW DATABASES; confirmaremos que ya está en la tabla.
Para trabajar en la nueva base de datos creado o en cualquier otra teclearíamos:
mysql> USE catalogo;
y para comprobar en que base de datos estamos trabajando,
mysql> SELECT DATABASE();
que muestra la base de datos con la que estamos trabajando.
Diseño de la base de datos
Recomienda el autor del tutorial diseñar "a mano" cómo queremos que se vean finalmente nuestros datos; a partir de ahí, éstos se organizarán o distribuirán en tablas de manera que cada input sea lo más sencillo posible, y las relaciones entre datos también...
Esto parece una parte delicada... y comprender cómo se organizan los datos, importante. Seguramente haré un beta más o menos rápido, y tras ver cómo funciona, una segunda versión que esté mejor.
Conceptos que parecen ser importantes y que tengo que entender mejor...
Primary key
Atomic table
Crear tablas
Recordar que estemos en la base de datos que corresponda:
mysql> USE catalogo;
Para crear una tabla, le damos nombre, y definimos las variables o campos que se van incluir en la tabla, así como sus características respectivas:
mysql> CREATE TABLE nombretabla( -> variable1 características, -> variable2 características, -> ... -> variablex características);
Principales tipos de variables (tipos de datos). Los que se usan aquí:
- Numéricos (MEDIUMINT UNSIGNED, FLOAT...)
- Strings (CHAR(), VARCHAR(), ENUM()...) _ CHAR for character
- Fechas y horas (YEAR; TIMESTAMP...)
El manual de referencia aquí (MySQL Server versión 5.5): https://dev.mysql.com/doc/refman/5.5/en/data-types.html
...
Una coma "," tras cada variables. Se parece a una lista de Python, pero con ().
NOT NULL / NULL, nos dice si tiene que dársele un valor obligatoriamente (NOT NULL) o no (NULL).
Una de las variables de la tabla debe ser un identificador único o PRIMARY KEY, que nos servirá para conectar los valores de esta tabla con los de otras tablas de la base de datos. La PRIMARY KEY la definimos aquí mediante el adjetivo sub-variable AUTO_INCREMENT, de manera que cada nueva entrada recibirá un el siguiente, correlativo número de identificación.
La definición en esta primera versión de la tabla libros es así:
mysql> CREATE TABLE librosX( -> titulo VARCHAR(200) NOT NULL, -> autor1_apellido VARCHAR(60) NOT NULL, -> autor1_nombre VARCHAR(24) NOT NULL, -> autor2_apellido VARCHAR(60) NULL, -> autor2_nombre VARCHAR(24) NULL, -> mas_autores ENUM('Y') NULL, -> traductores VARCHAR(50) NULL, -> fecha_publicación YEAR NULL, -> fecha_publicacion_original YEAR NULL, -> editorial VARCHAR(100) NOT NULL, -> ciudad VARCHAR(30) NULL, -> notas VARCHAR(200) NULL, -> fecha_entrada TIMESTAMP, -> libro_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
La variable notas, quizás convendría definirla con un tipo de dato que se llama TEXT tengo que verlo.
Una vez creada la tabla, el siguiente comando nos permite comprobar que se ha hecho correctamente:
mysql> DESCRIBE libros;
Ya iré viendo si esto es un buen diseño o si convendrá mejor descomponer algunas de las columnas que podrían ser complejas en otras tablas (los autores, los traductores?); así como alguna que no está como podrían ser posibles préstamos y seguimiento; o lecturas y notas...