viernes, 26 de febrero de 2021

Bases de Datos (26/02/2021)

Clase de Prácticas

En la clase de hoy hemos continuado con el ejercicio iniciado en la anterior clase, usado como repaso para el examen o nuestro proyectos de Bases de Datos. Utilizando HeidiSQL conectada al servidor de MariaDB.

En esta parte del ejercicio práctico se ha creado una tabla 'yy' con tres columnas. Después se ha usado la sentencia INSERT INTO, para introducir datos:

"INSERT INTO YY (col1, col2, col3) VALUES 

(1, 'AA', 'primera'),

(2, 'AA', 'segunda'),

(2, 'BB', 'tercera'),

(1, 'AA', 'cuarta')(saldrá error porque se está repitiendo valores),

(NULL, NULL, 'quinta') (aquí saldrá error porque no puede haber nulos en las claves primarias),

(NULL, 'CC', 'sexta')(también saldrá error porque no admite nulos la clave primaria),

(3,NULL, 'séptima')(también saldrá error porque da igual la posición del nulo, las claves primarias no tienen nulos),

(0, ' ', 'octava')(este funcionaría porque aunque hay una cadena de caracteres vacía, no es lo mismo que los "NULL"),

(3, 'AA', NULL)(esta vez dejará debido a que col3 permite nulos)"

Recordatorio: (si queremos cambiar un valor dentro de una columna, se usa la sentencia "UPDATE")(si queremos borrar registros de tablas usamos el DELETE o DELETE con WHERE, para elegir que borrar, y así no borrar todo el contenido de la tabla).

En la siguiente parte del ejercicio se ha realizado dos nuevas tablas:

"CREATE TABLE T1 (a INT, b INT, c INT, PRIMARY KEY(a));"

"CREATE TABLE T2(a INT, d INT, e INT, PRIMARY KEY(d), FOREIGN KEY(a));"

Después se realiza un "INSERT INTO" comprobando diferentes secuencias de datos (cambiando los valores entre paréntesis), algunos son por ejemplo:       

"INSERT INTO T1 (a,b,c) VALUES (2, 20, NULL)(en este caso funcionaría porque admite nulos la tercera columna);"

"(2, NULL, NULL)(fallaría por introducir valores duplicados (el 2));"

"(2, 20, NULL) (fallaría por seguir teniendo el primer campo duplicado (el 2));"

"(1, 20, 200)(seguiría fallando porque sigue duplicado);"

"INSERT INTO T2 (a, d, e) VALUES (4, 10, 100)(funcionaría por ser valores enteros sin nulos);"

"(2, NULL, NULL)(no funcionaría por haber un nulo en la columna con clave primaria);"

"(2, 20, NULL)(ahora si funcionaría porque no afecta el nulo debido a que lo permite la tercera columna);"

"En la T1(1, 20, 200)(no funcionaría por error de clave duplicada (la primera columna);"

"En la T2 de nuevo(4, 10, 100)(daría error debido a que la clave 4 no está definida en la clave primaria de la T1 (debido a que la primera columna es clave ajena));"

"(2, 30, 230)(no daría problemas);"

Usando el mismo escenario, seguiremos con la sentencia UPDATE:

"UPDATE T1 SET a=2 WHERE a=1;" (UPDATE "nombre de la tabla" SET "nuevo dato" WHERE(para filtrar por el que queramos cambiar, si no cambiaría todo, filtramos por la clave primaria)"dato antiguo"). (en este caso no funcionaría porque el valor 2 esta duplicado)(hay que tener en cuenta las restricciones tanto en INSERT como en UPDATE).

"UPDATE T1 SET a=5 WHERE a=1;"(en este caso funcionará).

"UPDATE T2 SET e=220 WHERE d=20;"(funcionaría).

"UPDATE T2 SET a=5 WHERE d=20;"(funcionaría).

"UPDATE T2 SET a=2,d=10, e=100 WHERE d=20;"(funcionaría).

"UPDATE T1 SET a=6, b=60, c=600 WHERE a=2;"(daría un error de integridad referencial, debido a que habría que cambiar los datos de la clave ajena también, a no ser que se cambie la restricción por "CASCADE" por ejemplo, entonces sí funcionaría, porque los valores se cambiarían en todos).

Por último hemos practicado con la sentencia "DELETE".

Se han tenido que cambiar los datos antes de T2 por (7, 30, 230).

"DELETE FROM T2 WHERE d=30;"(funcionaría).

Ahora se cambian los datos de T1 por (7, 70, 700).

"DELETE FROM T1 WHERE a=7;"(no funcionaría, debido a que la clave ajena tiene un RESTRICT, a no ser que se cambie por, por ejemplo, CASCADE, entonces funcionaría y se borrarían los datos).

No hay comentarios:

Publicar un comentario

Entrada de Bienvenida al Blog