Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Caso práctico
En una fase anterior vimos como Noiba y Vindio se
reunían con los socios del taller mecánico para mostrar
los resultados obtenidos hasta el momento: el diseño
de un modelo que se adapta a la actividad cotidiana del
taller y que permite además acceder de una forma
rápida y sencilla a una información a la que antes, en
algunos casos no se podía acceder y en otros era un
trabajo lento y con muchas posibilidades de cometer
errores.
Pero Noiba y Vindio aún no han terminado su trabajo con el lenguaje SQL y
junto a ellos, ahora también va a trabajar Naroba, una nueva alumna que está
realizando la FCT en BK Sistemas Informáticos.
Durante todo este proceso algunos clientes del taller han cambiado de
domicilio, otros han decidido pintar su vehículo de otro color, algunos precios
de referencia han subido, se ha decidido contratar otra persona para el taller,
en el almacén se considera necesario prescindir de algunos recambios, etc.
Por último tendrá que asegurarse que, cuando esas modificaciones impliquen
cambios sobre una o más tablas, éstas se realicen como un bloque, es decir,
o todas o ninguna. Por ejemplo cuando se quiera recoger la factura de una
nueva reparación que implica modificar varias tablas, ¿qué pasaría si después
de añadir la fila en la tabla facturas se produce un error a la hora de añadir las
filas en realizan o incluyen, tablas que relacionan la reparación con los
recambios sustituidos o con la mano de obra? Para tratar esto Alejandra
deberá detenerse en el concepto de transacción.
Las bases de datos nos permiten almacenar datos con el propósito de poder obtener cierta
información a partir de ellos mediante la realización de consultas, como hemos visto en la
unidad anterior. Pero hay otra serie de operaciones que podemos realizar con los datos
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 1/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
almacenados como son las que nos permiten modificarlos, eliminarlos o bien añadir nuevos
datos. A estas operaciones se las denomina edición o tratamiento de datos. Realmente
todo son consultas que se hacen a la base de datos, y que pueden ser de dos tipos:
Consultas de selección.
Consultas de acción o actualización.
En esta unidad podrás conocer que existen distintos medios para realizar el tratamiento o
edición de los datos. Desde la utilización de herramientas gráficas hasta el uso de
instrucciones o sentencias del lenguaje SQL que permiten realizar ese tipo de operaciones
de una forma menos visual pero con más detalle, flexibilidad y rapidez. El uso de unos
mecanismos u otros dependerá de los medios disponibles y de nuestras necesidades como
usuarios de la base de datos.
Todas las operaciones que se realicen respecto al tratamiento o edición de los datos deben
asegurar que las relaciones existentes entre ellos se cumplan correctamente en todo
momento.
Por otro lado, la ejecución de las aplicaciones puede fallar en un momento dado y eso no
debe impedir que la información almacenada sea incorrecta. O incluso el mismo usuario de
las aplicaciones debe tener la posibilidad de cancelar una determinada operación y dicha
cancelación no debe suponer un problema para que los datos almacenados se encuentren
en un estado fiable.
Todo esto requiere disponer de una serie de herramientas que aseguren esa fiabilidad de la
información, y que además pueda ser consultada y manipulada en sistemas
multiusuario sin que las acciones realizadas por un determinado usuario afecte
negativamente a las operaciones de los demás usuarios.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 2/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Caso práctico
Aunque ya sabemos que Vindio y Noiba consideran
imprescindible para gestionar una base de datos el
dominio del lenguaje SQL, en las distintas fases de la
creación de la base de datos para el taller mecánico han
procurado conocer las herramientas gráficas con las que
podían contar y utilizarlas en aquellos procesos en los
que le podían servir de ayuda.
Estas herramientas facilitan las tareas cuando pretendemos realizar acciones sencillas,
tareas rutinarias o cuando el usuario no tiene conocimientos de programación, pero a lo
largo de las unidades vistas hasta el momento ya hemos podido llegar a la conclusión de
que cuando se trata de acciones complejas en las que necesitamos tener un mayor
control de los datos que se van a alterar será necesario recurrir a nuestros
conocimientos de SQL.
Como herramientas gráficas que facilitan la edición de los datos de las tablas de una base
de datos MySQL veremos las siguientes:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 3/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Todos los ejemplos los puedes probar en la BD campeonato. Es importante que tengas clara
la estructura, modelo o esquema de la BD (las tablas que la forman y las relaciones entre
ellas) para entender bien todos los ejemplos propuestos.
◄ 1 2 3 4 5 6 ►
Pon en uso la base de datos campeonato, haciendo doble clic sobre ella. Se
pondrá en engrita.
Pulsa sobre el triángulo a la izquierda del nombre de la base de datos, para
desplegar sus objetos.
Pulsa sobre el triángulo a la izquierda del contenedor Tables y se desplegarán
las tablas de la base de datos, tal y como aparecen en la imagen.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 4/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 5/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
En caso de que se haya producido un error al intentar insertar los datos, habrá que
comprobar el mensaje que se muestra, e intentar solucionar el problema. Por
ejemplo, si se intenta introducir un texto en un campo de tipo numérico se obtendrá
un error como el siguiente: "columna no permitida aquí", y no se habrá realizado
ninguna operación de la inserción del nuevo registro. O bien, una columna que es
obligatoria la dejamos sin valor, o duplicamos el valor de una clave primaria o
columna con la restricción UNIQUE, o bien ponemos como valor de una clave ajena
un valor no permitido infrigiendo la Integridad Referencial, etc. En todos estos casos
de error, pulsaremosen el borón de cancelar (Cancel) para retroceder a la pantalla
anterior y pulsaremos en el botón Revert para revertir los cambios de la pnatlla
visual.
Modificación de datos
Para modificar datos se procede de igual forma:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 8/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
...
...
...
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 9/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Por ejemplo, vamos a importar los datos del fichero obtenido anteriormente a una
tabla de nombre equipo2 y con la misma estructura que la tabla equipo.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 10/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Recomendación
Otros clientes gráficos para trabajar con MySQL son Navicat y PhpMyAdmin.
Navicat.
PhpMyAdmin
WampServer
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 11/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 12/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Caso práctico
Según el esquema que hemos presentado en unidades anteriores, las consultas que vamos
a tratar en esta unidad corresponden al lenguaje de manipulación de datos LMD, al igual
que la sentencia SELECT; la diferencia es que si bien hasta ahora hemos visto consultas que
devuelven datos, las consultas que vamos a ver a continuación son consultas de acción
porque cambian los datos almacenados en las tablas. Nos referimos a las consultas INSERT,
UPDATE y DELETE.
SENTENCIA SIGNIFICADO
Con esta sentencia se pueden eliminar una, varias o todas las filas
DELETE
de una tabla.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 13/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Autoevaluación
Queremos añadir en la columna VEHICULOS.Modelo, el valor 'Matiz' para el
vehículo de marca DAEWOO, ya que faltaba ese dato en la tabla. ¿De
qué tipo de consulta se trata?
INSERT
UPDATE
DELETE
Correcto. INSERT, se utiliza para añadir filas nuevas en una tabla. Si la fila
ya existe, se trata de una modificación y se utilizará UPDATE para cambiar
el valor de esa columna.
Solución
1. Incorrecto
2. Opción correcta
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 14/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
3. Incorrecto
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 15/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Caso práctico
Una vez creado el modelo de la base de datos
TalleresFaber el siguiente paso era introducir los datos
en las tablas. Para poder estudiar el funcionamiento de
la sentencia SELECT en el capítulo anterior hemos
partido de unos datos iniciales, pero está claro que
necesitamos conocer la sentencia que nos permite
tanto introducir los datos por primera vez en las tablas
vacías como añadir filas nuevas cada vez que sea
necesario. Esta instrucción es INSERT y es la primera de
las instrucciones para consultas de acción que Noiba
se dispone a analizar. Ahora que la gestión del taller
está en sus manos sabe que se van a presentar Alain Bachellier (CC BY-NC-
situaciones en las que será necesario incluir nuevas SA)
Veremos todas las opciones que ofrece esta instrucción para realizar
operaciones tan comunes en un taller como añadir nuevas facturas.
Añadir una fila indicando explícitamente los valores que deben tomar las columnas, o
Extraer las filas de una tabla ya existente y añadirlas a otra tabla (utilizando consultas
SELECT con INSERT).
Donde:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 16/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Valor1, Valor2, … son los valores que se van a asignar a las columnas que se han
indicado en la lista de columnas, separados con comas y encerrados entre paréntesis.
Estos valores formarán un nuevo registro de la tabla.
Si la tabla tiene una clave principal e intentamos insertar una fila con un valor en esa
columna que ya exista, se genera un mensaje de error y la inserción no se produce.
Cuando la tabla contiene una clave ajena relacionada con la clave de otra tabla y con
integridad referencial, si el valor que se da a la clave ajena no existe en la tabla
relacionada se genera error y no se produce la inserción.
Si queremos insertar una fila que tenga un índice que no admita duplicados, un valor
repetido en esa columna, se produce un error y no se puede insertar.
Ejemplos.
Veremos a continuación algunos ejemplos de cómo utilizar la sentencia INSERT con la
sintaxis que hemos visto:
Ejemplo 1.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 17/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Esta orden es equivalente a esta otra, puesto que se rellenan todas las columnas:
INSERT INTO RECAMBIOS VALUES ('ES_222_333', 'Espejo retrovisor interior', 'Unidad', 10, 250);
Ejemplo 2.
Añade una fila en la tabla RECAMBIOS, las columnas UnidadBase y PrecioReferencia tomarán el
valor: NULL. (Si no están definidos como NOT NULL).
INSERT INTO RECAMBIOS (IdRecambio, Descripcion, Stock) VALUES ('ES_222_333', 'Espejo retrovis
Ejemplo 3.
¿Podemos insertar varias filas con una única sentencia INSERT? Si se puede hacer, y es lo
que se conoce como INSERT extendido.
Un INSERT extendido, consiste en una sola sentencia INSERT que permite insertar varias filas
a la tabla de manera más eficiente, en una sola operación. El requisito que deben cumplir
las filas o valores a insertar es que se especifique en todas ellas las mismas columnas y en
el mismo orden.
Por ejemplo, podemos insertar dos filas en la tabla REPARACIONES, ambas correspondientes a
averías del mismo vehículo. Las columnas que aparecen como NULL tomarán ese valor,
excepto el IdReparación que tomará el siguiente valor por ser autoincrementado.
INSERT INTO REPARACIONES VALUES (NULL, '1111 DEF', '2011.02-02', NULL, 'Ruptura correa ventil
Reflexiona
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 18/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
1.- Un nuevo equipo con los datos: código de equipo '08', nombre
'Anaconda', comunidad 'Andalucía', año de fundación 2020.
2.- Un nuevo equipo con los datos: código de equipo '09' y nombre
'Zumárraga'.
3.- En una sola operación inserta tres equipos con los siguientes datos:
código '10' y nombre 'Equipo10', código '11' y nombre 'Equipo11', código
'12' y nombre 'Equipo12'.
Mostrar retroalimentación
-- 1
INSERT INTO equipo (cdequipo, nombre, comunidad, anio_funda) VALUES ('08'
-- o también
INSERT INTO equipo VALUES ('08','Anaconda','Andalucía',2020);
-- 2
INSERT INTO equipo (cdequipo, nombre) VALUES ('09', 'Zumárraga');
-- 3
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 19/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 20/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
INSERT … SELECT
Como se puede ver la cláusula VALUES se sustituye por una consulta SELECT, con
lo cual se realizan inserciones de múltiples filas en una tabla con los datos
obtenidos de otra.
En la cláusula SELECT se especifican los valores que se van a dar a las columnas de la tabla
y pueden ser tanto columnas como valores constantes. Se pueden incluir valores
entrecomillados en vez de nombres de campos, lo cual permite mezclar valores obtenidos a
partir de una tabla con constantes.
Ejemplo 1. Partimos de una tabla denominada CATALOGO donde tenemos un listado de todos
los recambios de las distintas marcas de coches. La tabla catálogo tiene la siguiente
estructura;
Añade a la tabla RECAMBIOS una fila por cada artículo de la tabla CATALOGO que contenga la
palabra 'espejo'. Los datos que no están en la tabla consultada se especifican como
constantes: UnidadBase y Stock. El precio del catálogo se incrementa en un 30%.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 21/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Ejemplo 2.
Añade a la tabla RECAMBIOS una fila que contiene los datos del artículo más caro del catálogo.
Esta información se obtiene mediante subconsulta. Es necesario especificar las columnas
porque no se rellenan todas.
INSERT INTO RECAMBIOS (IdRecambio, Descripcion, Stock, PrecioReferencia) SELECT Codigo, Descr
FROM CATALOGO
WHERE Precio= (SELECT MAX(Precio) FROM CATALOGO);
Reflexiona
Te recordamos que no se pueden insertar datos en una tabla y seleccionar de
la misma en una subconsulta.
Autoevaluación
¿Es correcta la siguiente consulta?
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 22/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Solución
1. Incorrecto
2. Opción correcta
3. Incorrecto
4. Incorrecto
1.- Una nueva concursante de código 'A01', nombre 'Eva Salas' y cuota
40. Su fecha de inscripción, la fecha actual.
2.- Haz que esa concursante participe en los juegos del equipo '01'. Para
ello debes insertar los datos apropiados en la tabla participa.
3.- Un nuevo juego con los siguientes datos: código 'FOR', nombre
'Fortnite', dificultad media y del equipo '04'.
4.- Asigna el juego 'Fortnite' a todos los concursantes que no estén
participando en juegos. Con fecha de inicio la actual y cero puntos.
Mostrar retroalimentación
-- 1
INSERT INTO concursante (cdconcur, nombre,fecha_inscri, cuota_inscri)
VALUES('A01', 'Eva Salas',curdate(), 40);
-- 2
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 23/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
-- 3
INSERT INTO juego (cdjuego,nombre,dificultad,cdequipo)
VALUES('FOR','Fortnite', 'media', '04');
-- 4
INSERT INTO participa
SELECT cdconcur,'FOR', curdate(), 0
FROM concursante
WHERE cdconcur NOT IN (SELECT cdconcur FROM participa);
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 24/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Podemos hacer el siguiente INSERT de manera que si el IdRecambio ya existe, lo que se hace
es una actualización de datos.
Existe una sentencia para añadir filas que supone una alternativa para la sentencia INSERT.
Se trata de la sentencia REPLACE que funciona igual que INSERT excepto en el caso de
columnas PRIMARY KEY o UNIQUE.
Cuando añadimos filas con REPLACE, si un valor de la tabla coincide con el valor
que queremos insertar para un índice PRIMARY KEY o UNIQUE en la nueva fila, se
borra la fila antigua antes de insertar la nueva.
Sentencia REPLACE:
Con SELECT:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 25/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
El uso de esta sentencia sólo tendrá sentido en el caso de que exista la posibilidad de
duplicar claves o índices UNIQUE, ya que en el resto de valores se comporta de forma similar
a INSERT.
Al utilizar el comando REPLACE las filas afectadas por la consulta pueden ser:
Una sola fila si no ha necesitado eliminar ninguna fila para añadir la nueva.
Dos filas si ha necesitado eliminar una fila para añadir otra.
Autoevaluación
¿En qué se diferencian estas dos sentencias? Señala las opciones
correctas.
Mostrar retroalimentación
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 26/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Solución
1. Correcto
2. Incorrecto
3. Correcto
4. Incorrecto
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 27/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
La sentencia LOAD DATA permite rellenar una tabla con registros cuyos datos están
almacenados en un fichero de texto plano. La inserción de datos con LOAD DATA es muy
eficiente, pues realiza a una velcidadd muy alta. La sentencia opuesta, la que exporta datos
a texto plano, es SELECT INTO .... OUTFILE.
Crear un archivo de texto plano, que contenga un registro por renglón con valores
separados por un carácter delimitador. Normalmente se utiliza el tabulador.
Es necesario respetar que el orden de las columnas sea el mismo que utilizamos en la
sentencia CREATE TABLE.
No se encierra entre comillas ningún dato en el fichero de texto, sea del tipo que sea,
aunque es posible hacerlo si se indica en la sentencia.
Para valores que no conozcamos podemos usar valores nulos (NULL). Para representar
estos valores en nuestro archivo de texto debemos usar \N.
Además, debemos recordar que MySQL espera recibir fechas en el formato YYYY-MM-DD, que
puede ser diferente a lo que nosotros estamos acostumbrados.
Por ejemplo, para cargar el contenido del archivo de texto llamado datos_equipo.csv en una
tabla de la base de datos activa llamada equipo2 usaremos un comando como el de abajo.
LOAD DATA LOCAL INFILE "datos_equipo.csv" INTO TABLE equipo2 LINES TERMINATED BY ‘/r/n’;
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 28/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Caso práctico
La sentencia UPDATE se utiliza para actualizar los valores de las columnas para una o varias
filas de una tabla.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 29/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Ejemplo 1.
UPDATE REPARACIONES
SET Reparado=1, FechaSalida=CURDATE()
WHERE IdReparacion=10;
Ejemplo 2.
Para subir el Importe de las actuaciones en un 3% siempre que el tiempo estimado sea
inferior a 1 hora. Sería:
UPDATE ACTUACIONES
SET Importe = Importe * 1.03
WHERE TiempoEstimado < 1;
Ejemplo 3.
Ejemplo con tablas combinadas. El cliente Enrique Muriedas nos ha pedido que retrasemos
30 días todas sus facturas.
UPDATE FACTURAS
INNER JOIN CLIENTES ON FACTURAS.CodCliente=CLIENTES.CodCliente
SET FechaFactura=DATE_ADD(FechaFactura,INTERVAL 30 DAY)
WHERE Nombre='Enrique' AND Apellidos LIKE 'Muriedas%';
Reflexiona
Partiendo de los datos contenidos en TalleresFaber ¿Qué ocurre al ejecutar la
siguiente consulta de actuación?
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 30/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
UPDATE VEHICULOS
SET Matricula=’4545 ABC’
WHERE Matricula=’4455 ABC’;
Mostrar retroalimentación
Mostrar retroalimentación
-- 1
UPDATE juego
SET dificultad ='media', megusta=megusta+3
WHERE cdjuego='ELV';
-- 2
UPDATE concursante
SET cuota_inscri = cuota_inscri + cuota_inscri*0.02;
-- 3
UPDATE participa
SET puntos=puntos+5
WHERE cdconcur='A14' AND cdjuego='FOE';
-- 4
UPDATE concursante
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 31/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
SET cdequipo='05'
WHERE year(fecha_inscri)<=2018 AND sexo='H';
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 32/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
UPDATE NombreTabla
Ejemplo 1.
Bajar el precio de referencia un 5% para los recambios que no se hayan incluido en ninguna
reparación:
UPDATE RECAMBIOS
SET PrecioReferencia = PrecioReferencia*0.95
WHERE IdRecambio NOT IN (SELECT IdRecambio FROM Incluyen);
Debe seleccionar una única fila y mismo número de columnas que las que hay entre
paréntesis al lado de SET.
No puede utilizar la misma tabla que se modifica.
UPDATE NombreTabla
WHERE Condición;
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 33/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Ejemplo 2.
Restar del stock de recambios las unidades que se han sustituido del recambio BB_000_777:
UPDATE RECAMBIOS
SET stock = stock - (SELECT sum(Unidades) FROM Incluyen where IdRecambio='BB_000_777')
WHERE Idrecambio='BB_000_777';
Reflexiona
Tal como se indicó con anterioridad, en caso de que para poder realizar la
actualización de una tabla necesitemos consultar la misma tabla que se está
actualizando, MySQL daría un error ya que la tabla que se está actualizando
estaría bloqueada y no permitiría realizar consultas.
UPDATE concursante
SET cuota_inscri= cuota_inscri+5
WHERE cuota_inscri <=(SELECT AVG(cuota_inscri) FROM concursante);
Entonces, ¿no se podrían realizar este tipo de sentencias? Sí se podría y la forma sería
creando una tabla temporal de la tabla que queremos consultar. Por ejemplo, en el caso
anterior se podría poner:
UPDATE concursante
SET cuota_inscri= cuota_inscri+5
WHERE cuota_inscri <=(SELECT AVG(cuota_inscri) FROM (SELECT * FROM concursante) as der);
Ejercicio resuelto
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 34/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Mostrar retroalimentación
UPDATE REPARACIONES
SET Observaciones=’Contactar con el cliente'
WHERE FechaSalida IS NULL OR Reparado=0;
Mostrar retroalimentación
-- 1
UPDATE juego
SET megusta=(SELECT MIN(megusta) FROM (SELECT * FROM juego )AS deriv)
WHERE megusta IS NULL;
-- 2
UPDATE concursante
SET cuota_inscri=cuota_inscri+10
WHERE cdconcur NOT IN(SELECT cdconcur FROM participa);
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 35/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 36/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Caso práctico
En la gestión de la base de datos del taller mecánico,
Noiba y Naroba se han encontrado con la necesidad
de eliminar un recambio del almacén que corresponde
a un modelo de vehículo que no tiene ninguno de
nuestros clientes y que ha dejado de fabricarse.
La instrucción DELETE se utiliza para borrar filas en una o más tablas. La sintaxis para una
sola tabla es:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 37/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Como vemos se puede utilizar la instrucción DELETE sin condiciones, con lo cual se
borrarían todas las filas de una tabla. Una vez borrada una tabla, no se puede
recuperar.
Ejemplo 1.
Hay que dar de baja, eliminar, los recambios cuyo stock es 0 unidades.
Ejemplo 2.
Elimina las filas de la tabla CLIENTES de los cuales no tenemos ningún VEHICULO registrado.
DELETE CLIENTES
FROM CLIENTES LEFT JOIN VEHICULOS ON CLIENTES.CodCliente = VEHICULOS.CodCliente
WHERE Matricula IS NULL;
Reflexiona
Mostrar retroalimentación
Cuando hablamos de borrado de filas en una tabla tenemos que tener en cuenta
las restricciones que se hayan definido en esa tabla, si existen claves ajenas
relacionadas y si tienen establecido o no borrado en cascada, etc.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 38/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Debes conocer
Para eliminar todas las filas de una tabla podemos usar la sentencia TRUNCATE,
cuya sintaxis es:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 39/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Al igual que antes, sí se podrían realizar estas sentencias de borrado utilizando una tabla
temporal.
Por ejemplo, si quisiéramos elliminar aquellos juegos con menos megusta que la media de la
media de los megusta de todos los juegos, la sentencia de borrado tendría que ser:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 40/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Mostrar retroalimentación
1.-
2.-
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 42/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Caso práctico
Todas las consultas de edición que hemos ido
repasando con Noiba, Vindio y Naroba tienen que
efectuase con precaución ya que alteran la
información contenida en una base de datos. Vindio
ya tiene experiencia y sabe lo que ocurre si alguien al
intentar borrar una fila de una tabla olvida la cláusula
WHERE en la instrucción SQL, no sólo desaparecerán
todas las filas de la tabla si no que la acción puede
afectar a otras tablas si se ha definido borrado en
Alain Bachellier (CC BY-NC-SA) cascada. ¿Qué ocurriría si mientras está registrando
todas las actuaciones que se han llevado a cabo en
una reparación y los recambios que se han sustituido, alguien desconectase
el ordenador por error? Ellos ya saben que existe una forma de dar marcha
atrás siempre y cuando no se hayan validado los cambios. ¿No te parece que
deberías conocerla tú también?
Una transacción que cambia el contenido de una base de datos debe modificarla
de un estado consistente a otro. Un estado de una base de datos consistente es
cuando se satisfacen todas las restricciones de integridad de los datos.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 43/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Reflexiona
Aunque el SGBD está diseñado para restaurar una base de datos al estado
consistente previo a una transacción, cuando algún suceso la interrumpe, las
transacciones en sí las define el usuario o el programador y deben estar bien
definidas porque el SGBD no garantiza que el significado semántico de la
instrucción refleje el suceso real.
Algunas órdenes SQL llevan implícita la finalización de una transacción. En general esto
ocurre con todas las instrucciones que pertenecen al LDD como crear, modificar y borrar
tablas, bases de datos, índices, etc.
ALTER FUNCTION, ALTER PROCEDURE, ALTER TABLE, BEGIN, CREATE DATABASE, CREATE FUNCTION,
CREATE INDEX, CREATE PROCEDURE, CREATE TABLE, DROP DATABASE, DROP FUNCTION, DROP INDEX,
DROP PROCEDURE, DROP TABLE, LOAD MASTER DATA, LOCK TABLES, RENAME TABLE, SET AUTOCOMMIT=1,
START TRANSACTION, TRUNCATE TABLE, UNLOCK TABLES.
Autoevaluación
¿Qué ocurre en nuestra base de datos si añadimos una fila en la tabla
REPARACIONES referente a un vehículo que no hemos registrado y tampoco
a su propietario?
Solución
1. Incorrecto
2. Opción correcta
3. Incorrecto
4. Incorrecto
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 45/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Por defecto MySQL trabaja con el modo AUTOCOMMIT activado. Si utilizas tablas
InnoDB y quieres trabajar con transacciones de forma permanente puedes
desactivar este modo poniendo:
SET AUTOCOMMIT=0;
COMMIT;
Como ves en la imagen, todas estas opciones se pueden seleccionar desde la barra de
herramientas de Workbench.
Además es posible:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 46/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Ejemplo 1.
use campeonato;
START TRANSACTION;
DELETE FROM juego
WHERE cdequipo LIKE '03';
ROLLBACK;
-- comprobación
SELECT * FROM juego;
Ejemplo 2.
use campeonato;
START TRANSACTION;
DELETE FROM juego
WHERE cdequipo LIKE '03';
SAVEPOINT sp1;
INSERT INTO juego VALUES('MIT', 'Mi Transacción', 'alta',1,'01');
ROLLBACK TO SAVEPOINT sp1;
COMMIT;
-- comprobación
SELECT * FROM juego;
SELECT * FROM participa;
Debes conocer
En el apartado anterior has visto cuáles son las principales sentencias para
trabajar con transacciones, pero existen otras sentencias relacionadas con el
uso de las transacciones.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 47/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Autoevaluación
La sentencia:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 48/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Solución
1. Incorrecto
2. Incorrecto
3. Incorrecto
4. Opción correcta
Ejercicio Resuelto
Transacciones
En el servidor MySQL realiza lo siguiente:
1.- Crea una base de datos, llamada transa, ccon una sola tabla llamada
tabla1, que tenga una única columna de tipo entero llamada colum1.
Inserta en ella tres registros cualesquiera.
2.- Asegúrate que el modo AUTOCOMMIT está activado (para ello puedes
ejecutar el comando SHOW VARIABLES LIKE 'autocommit';).
3.- A continuación, comienza una transacción que incremente en 10 el
valor de al columna colum1 en todos los registros, y que inserte un nuevo
registro. Confirma la transacción y visualiza el nuevo contenido de la
tabla.
4.- Inicia una nueva transacción que inserte dos nuevos registros en la
tabla y que incremente en 100 el valor de todos los registros. En este
caso la transacción no se confirmará, sino que se deshará. Visualiza el
contenido actual de la tabla.
5.- Ahora inicia una nueva transacción. Seguidamente, crea una
segunda tabla, llamada tabla2, con un solo campo de tipo carácter.
Inserta en la tabla dos registros. Por último, cancela la operación para
que no se efectúen estas operaciones, y comprueba si se ha creado la
tabla y se han insertado los registros en la misma. ¿Se ha podido
cancelar la operación?
6.- Por último, comienza una nueva transacción. Elimina la base de
datos transa. Intenta deshacer la operación. Comprueba si se ha
eliminado la base de datos del servidor.
Mostrar retroalimentación
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 49/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
-- 1
CREATE DATABASE transa;
use transa;
CREATE TABLE tabla1(
colum1 INTEGER
);
INSERT INTO tabla1 VALUES(1), (2),(3);
-- 2
SHOW VARIABLES LIKE 'autocommit';
-- 3
START TRANSACTION;
UPDATE tabla1
SET colum1=colum1+10;
INSERT INTO tabla1 VALUES(100);
COMMIT;
select * from tabla1;
-- 4
START TRANSACTION;
INSERT INTO tabla1 VALUES(5), (15);
UPDATE tabla1
SET colum1=colum1+100;
ROLLBACK;
select * from tabla1;
-- 5
START TRANSACTION;
CREATE TABLE tabla2(
colum2 CHAR
);
INSERT INTO tabla2 VALUES('A'),('B');
ROLLBACK;
-- comprobación: no se ha podido deshacer, pues hay una sentencia DDL
SHOW TABLES;
SELECT * FROM tabla2;
-- 6
START TRANSACTION;
DROP DATABASE transa;
ROLLBACK;
-- comprobación: no se puede deshacer, pues es una sentencia DDL
SHOW DATABASES;
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 50/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
En esta imagen de la configuración del servidor MySQL obtenida del programa MySQL
Workbench, puedes ver el nivel de aislamiento de las transacciones en tablas InnoDB de
MySQL, tal como se establece en la configuración por defecto.
Autoevaluación
Relaciona los conceptos siguientes con su significado:
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 51/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Ejercicio de relacionar
Enviar
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 52/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Caso práctico
Aunque con el uso de transacciones en las consultas
de edición, Noiba y sus compañeros se aseguran de
que las operaciones de modificación de los datos se
ejecuten completamente o no se ejecuten, este no es el
único problema que puede hacer perder la consistencia
de una base de datos como TalleresFaber.
Cuando una base de datos está diseñada para que la utilice un solo usuario no se nos
presenta el problema de que dos transacciones intenten acceder a la vez a los mismos
datos, pero en su mayoría, las bases de datos se diseñan para múltiples usuarios y esto
origina que se puedan dar transacciones concurrentes múltiples. Por eso el SGBD debe
disponer de controles que garanticen la consistencia y la integridad de la base de datos.
Dirty Read - Se produce cuando una transacción modifica los datos y otra transacción los
lee antes de que la primera transacción termine.
Non Repeatable.- Una transacción lee un dato, otra lo modifica y termina. Si la primera
transacción intenta leer ese dato que ha sido modificado o borrado, obtiene un valor
distinto. Dos lecturas de la misma transacción sobre el mismo dato producen resultados
diferentes.
Phantom.- Mientras una transacción se está ejecutando, otra añade una fila, que es leída
por la primera transacción. Dos lecturas de la misma transacción, sobre la misma tabla,
producen resultados diferentes.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 53/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
De los problemas que acabamos de ver se obtienen 4 niveles de aislamiento para una
base de datos:
Como estás viendo, estos problemas se producen porque las operaciones en una
transacción se ejecutan en serie y éstas no se pueden hacer en cualquier orden cuando
operan sobre los mismos datos o sobre datos relacionados.
Autoevaluación
¿Cuáles de las siguientes operaciones crees que pueden ser conflictivas
con relación al control de concurrencia?
Transacciones
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 54/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
a Lectura Lectura
b Lectura Escritura
c Escritura Lectura
d Escritura Escritura
Nota: Denominamos operación de lectura a SELECT y de escritura a las
operaciones que modifican las tablas:
a
Mostrar retroalimentación
Solución
1. Incorrecto
2. Correcto
3. Correcto
4. Correcto
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 55/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Tabla.
Fila.
Atributo.
Algunos SGBD, como MySQL, permiten elegir el nivel de bloqueo, aunque hay sentencias
como ALTER TABLE que necesariamente producen bloqueo a nivel de tabla.
En el caso de las tablas InnoDB de MySQL por defecto el bloqueo se produce a nivel de
fila. En las tablas MyISAM es a nivel de tabla.
Bloqueo binario:
Es la forma más simple de bloquear, ya que en este método cada transacción debe solicitar
el bloqueo del elemento que vaya a utilizar antes de acceder a él mediante una operación
de bloquear y liberar todos los bloqueos mediante una operación de desbloquear para que
otra transacción los pueda utilizar.
Se denomina bloqueo binario porque tiene solo dos estados bloqueado (1) o desbloqueado
(0).
La implementación de este método es muy simple, basta con mantener una tabla que
indique qué partes de los datos están bloqueados y por qué transacción, además estas
operaciones son programadas y manejadas por el SGBD y el usuario no tiene que
preocuparse. Cada SGBD tiene un mecanismo de bloqueo predeterminado.
Los bloqueos binarios son demasiado restrictivos porque bloquean incluso las
operaciones que no son conflictivas porque no actualizan datos.
Bloqueo compartido/exclusivo:
Bloqueo exclusivo: cuando el objeto sólo es accesible para la transacción que lo bloqueó.
Se utiliza cuando al menos una de las operaciones de la transacción es de escritura.
Bloqueo compartido: cuando todas las transacciones concurrentes son sólo de lectura.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 56/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Por tanto, si una transacción necesita actualizar el dato (escribir) se emite un bloqueo
exclusivo. Los bloqueos compartidos permiten que varias transacciones lean a la vez el
mismo elemento de datos.
Aunque los bloqueos impiden las inconsistencias serias de los datos, su uso puede
conducir a dos problemas importantes:
Autoevaluación
Contesta si la siguiente afirmación es verdadera o falsa.
Verdadero Falso
Verdadero
Si el bloqueo es compartido se pueden realizar dos operaciones de
lectura simultáneamente sobre los mismos datos. Únicamente las
operaciones de escritura requieren bloqueo exclusivo.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 57/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Transacción Transacción
Valor de X
1 2
Bloquear X
Leer X 10
Desbloquear X
Bloquear X
Leer X 10
Desbloquear X
Bloquear X
Escribir X=X+1 11=10+1
Desbloquear X
Bloquear X 11=10+1>
Escribir X=X+1 (el último valor de X leído por la transacción 2 era
Desbloquear X 10)
El problema es que el dato debería haberse incrementado dos veces y sólo lo ha hecho
una. El acceso exclusivo a un elemento mediante bloqueo no garantiza que las operaciones
se realicen correctamente. Es necesario un mecanismo que controle la liberación y
adquisición de bloqueos.
El bloqueo en dos fases define de qué forma las transacciones van a adquirir y ceder los
bloqueos garantizando la serialización. Este sistema fuerza a las transacciones a realizar
primero todas las operaciones de adquisición de bloqueos antes de la primera operación de
desbloqueo.
Una fase de expansión: en esta fase la transacción adquiere todos los bloqueos hasta
que esté en su punto bloqueado. Hasta que la transacción no tenga todos los
bloqueos no se modifica ningún dato.
Una fase de contracción: la transacción libera todos los bloqueos y no puede obtener
uno nuevo.
Puede ocurrir que durante la fase de expansión más de una transacción esté
interesada en los mismos datos y por tanto ambas transacciones esperan a que
la otra desbloquee esos elementos, sin avanzar.
Puntos muertos.
Como hemos visto se produce cuando una transacción espera a que otra desbloquee los
datos. Se denomina también abrazo mortal o deadlocks
Ejemplo: si tenemos dos transacciones que quieren acceder a los elementos X e Y puede
darse el siguiente caso:
Puntos muertos.
.... .....
Este caso únicamente puede darse cuando uno de los bloqueos es exclusivo.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 59/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
Reflexiona
¿Por qué se afirma que el problema de puntos muertos sólo puede darse
cuando uno de los bloqueos es exclusivo?
Mostrar retroalimentación
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 60/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
NombreTabla1, NombreTabla2, ... Una o más tablas separadas por comas. Para cada tabla se
puede definir el tipo de bloqueo:
READ: bloqueo de sólo lectura. Esto bloquea a otros usuarios que quieran escribir en la
tabla, pero les permitiría leerla. Es un bloqueo compartido.
WRITE: bloqueo de escritura. Bloquea a otros usuarios impidiéndoles el acceso, tanto
para leer como para escribir. Es un bloqueo exclusivo.
LOW PRIORITY WRITE: por defecto las operaciones de escritura tienen prioridad sobre las
de lectura, por tanto si llega una petición de escritura se ejecutará antes que una de
lectura (si una operación de lectura está iniciada primero terminará esta). Cuando se
establece LOW_PRIORITY WRITE, una operación de escritura no tiene prioridad, sólo
cuando no haya operaciones de lectura en espera se realizará la operación de
escritura.
AS Alias: permite bloquear una tabla múltiples veces en una consulta bloqueando los
alias.
UNLOCK TABLES libera cualquier bloqueo realizado por la transacción actual. Las tablas se
liberan cuando la transacción realiza otro LOCK TABLES o cuando se cierra la conexión con el
servidor.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 61/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
InnoDB implementa bloqueo a nivel de fila, con dos tipos de bloqueo: compartido y
exclusivo. Normalmente está función la realiza el servidor automáticamente.
De forma adicional, InnoDB permite también que haya simultáneamente bloqueos de filas y
de tablas a esto se le llama granularidad múltiple.
Para usar LOCK TABLES con tablas InnoDB debemos tener AUTOCOMMIT=0 y no desbloquear las
tablas con UNLOCK TABLES hasta que hayamos confirmado (COMMIT) la transacción. No es
conveniente utilizarlo con este tipo de tablas porque InnoDB utiliza de forma automática el
bloqueo a nivel de filas y se pueden dar fácilmente puntos muertos (deadlocks).
Reflexiona
Para comprobar el efecto del bloqueo de una tabla vamos a realizar la
siguiente práctica utilizando dos sesiones distintas, una con MySQL
Workbench y otra con PhpMyAdmin. Lo mismo se puede demostrar abriendo
dos sesiones sobre el mismo programa, por ejemplo dos sesiones desde
Workbench.
UPDATE CLIENTES
SET Nombre='José'
WHERE CodCliente='00009';
¿Qué ocurre? Esta operación se mantiene a la espera porque esa tabla está
bloqueada.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 62/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.
UPDATE CLIENTES
SET Nombre='José'
WHERE CodCliente='00009';
ROLLBACK;
UNLOCK TABLES;
Mostrar retroalimentación
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 63/63