Diferencia entre revisiones de «Mysql 2019»
(→Ver datos / generar otras tablas) |
(→Ver datos / generar otras tablas) |
||
Línea 254: | Línea 254: | ||
Los valores 2 y 'CA' son figurados; los datos tipo string creo que pueden ir con comillas simples '' o dobles " ". | Los valores 2 y 'CA' son figurados; los datos tipo string creo que pueden ir con comillas simples '' o dobles " ". | ||
+ | |||
+ | Los operadores booleanos pueden ir anidados; se ve algún ejemplo en el tutorial. | ||
+ | |||
+ | Para ver si algún dato falta hay debe usarse IS NULL o IS NOT NULL - algo especial. | ||
+ | |||
+ | Ordenar datos de una tabla | ||
+ | |||
+ | mysql> SELECT first_name, last_name | ||
+ | -> FROM nombre_lista | ||
+ | -> ORDER BY last_name; | ||
+ | |||
+ | El anterior ordena descente-alfabéticamente. |
Revisión del 23:21 1 may 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 (fields) 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í: / al final esto lo hice bastante diferente:
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...
Insertar entradas en tablas
mysql> INSERT INTO nombre_tabla VALUES ('Variable1', número, NULL);
- Las variables deben ir en el orden que están en la tabla correspondiente. Ayuda tenerla delante con mysql DESCRIBE nombre_tabla;
- Si las variabeles son strings, deben ir entre comillas 'Variable'
- Si son números, INT, FLOAT, etc, sin comillas.
- El valor NULL es para que la variable que es una Primary Key adjudique el número correlativo.
Se pueden hacer múltiples entradas a la vez, tal que así:
mysql> INSERT INTO nombre_tabla VALUES -> ('Variable1', número, NULL), -> ('Variable1', número, NULL), -> ('Variable1', número, NULL);
Modificar variables y datos en tablas ya creadas
Añadir un campo o variable a una tabla:
mysql> ALTER nombre_tabla ADD fecha_pub_original YEAR NOT NULL;
Donde a partir de ADD se define el nuevo campo: nombre, tipo y otras características
Cambiar nombre y propiedades? de un campo existente en una tabla
mysql> ALTER nombre_tabla CHANGE nombre_antiguo nombre_nuevo -> MEDIUMINT UNSIGNED NOT NULL;
Tras CHANGE va el nombre antiguo del campo que vamos a modificar el nombre nuevo que la vamos a dar, y las propiedades que definen el nuevo campo;
UNSIGNED por cierto quiere decir que sólo tomará valores positivos; aquí sería un número entero mediano que sólo tomará valores positivos y que no puede ser nulo; hay que introducir un valor necesariamente.
Cambiar nombre de una (o varias) tabla
mysql> RENAME TABLE -> nombre_antiguo TO nombre_nuevo;
Ver datos / generar otras tablas
Ver sólo algunos campos de una cierta table
mysql> SELECT campo1, campo2 FROM nombre_lista;
Con condicionante WHERE (vídeo-tutorial min 22 y siguientes: https://youtu.be/yPu6qV5byu4?t=1319
mysql> SELECT campo1, campo2, campo3 FROM nombre_lista -> WHERE YEAR(campo3) <= 1999;
Se podrán usar otras operaciones como = > < >= <= !=
Y también se pueden usar en estas queries, es es el nombre, búsquedas los operadores booleanos OR AND NOT (que tienen como equivalentes respectivos: || && ! ). Un ejemplo del uso de operador booleano:
mysql> SELECT campo1, campo2, campo3 FROM nombre_lista -> WHERE campo1 = 2 AND campo2 = "CA";
Los valores 2 y 'CA' son figurados; los datos tipo string creo que pueden ir con comillas simples o dobles " ".
Los operadores booleanos pueden ir anidados; se ve algún ejemplo en el tutorial.
Para ver si algún dato falta hay debe usarse IS NULL o IS NOT NULL - algo especial.
Ordenar datos de una tabla
mysql> SELECT first_name, last_name -> FROM nombre_lista -> ORDER BY last_name;
El anterior ordena descente-alfabéticamente.