Está en la página 1de 63

3/9/23, 7:00 PM GBD05.- Edición de los datos.

Edición de los datos.

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.

Con el lenguaje SQL y ayudándose de las herramientas


gráficas de que dispone MySQL, ha comprobado que
Alain Bachellier (CC BY-NC-SA)
puede extraer información muy útil que le servirá para
el control de la actividad y para prever y planificar
decisiones futuras.

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.

Hasta el momento no conocemos ninguna sentencia que permita a Noiba


hacer estos cambios así que vamos a seguir avanzando en el conocimiento
del lenguaje SQL buscando ahora las sentencias que nos faciliten la edición
de los datos para añadir, modificar o borrar la información cuando sea
necesario.

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.

A las consultas que utilizan la sentencia SELECT se les denomina "Consultas de


selección". A las consultas que permiten la edición de los datos con INSERT,
UPDATE ó DELETE se les denomina "Consultas de actualización" o "Consultas de
acció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.

Ministerio de Educación y Formación Profesional (Dominio público)

Materiales formativos de FP Online propiedad del Ministerio de


Educación y Formación Profesional.
Aviso Legal

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.

1.- Herramientas gráficas para la edición


de la información.

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.

En el caso de la edición o tratamiento de los datos


disponen, igualmente, de la posibilidad que el SGBD le
permita añadir, modificar, eliminar datos y realizar otras
operaciones como transacciones, etc.; sin necesidad de
Alain Bachellier (CC BY-NC-
SA) escribir instrucciones SQL, simplemente pulsando unas
teclas determinadas o seleccionando opciones de un
menú. Siguiendo el mismo criterio que hasta ahora, Noiba se plantea revisar
estas herramientas como complemento al uso del lenguaje SQL.

Como venimos tratando en unidades anteriores, los SGBD disponibles en el mercado


incorporan herramientas gráficas para que tareas como el diseño, la creación de bases de
datos y de las tablas y la consulta de la información almacenada sea más sencilla. Lo
mismo ocurre con la edición de los datos, tanto dentro del SGBD como mediante
aplicaciones externas al propio gestor podemos añadir, modificar o eliminar filas de las
bases de datos desde una ventana de edición gráfica sin tener que escribir código SQL.

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:

MySQL Workbench y Navicat for MySQL, utilizadas en unidades de trabajo


anteriores
La aplicación web phpMyAdmin.

Comenzamos viendo un ejemplo de cómo insertar, modificar y eliminar datos con


Workbench en modo gráfico.

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 ►

Conexión a MySQL con Workbench


Para trabajar con Workbench, accede a la aplicación y realiza una conexión a tu
servidor de base de datos MySQL con tu usuario y contraseña y ya puedes
empezar a trabajar. Observa que el panel o sección izquierda muestra las bases
de datos instaladas en tu servidor, si está activada la pestaña Schemas. La
pestaña Administration se utilliza para realizar otras tareas sobre el servidor de
base de datos, como gestionar a los diferentes usuarios, realizar copias de
seguridad, inspeccionar el estado del servidor, etc.

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.

Workbench (Elaboración propia)

Inserción de datos (filas)

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.

La inserción de registros permite introducir nuevos datos en las tablas que


componen la base de datos. Para insertar registros en tablas, utilizando la
herramienta Workbench, en modo gráfico, debes seguir los siguientes pasos:

1.- Ir a la página inicial de Workbench, si no te encuentras en ella y abrir


conexión con el servidor.
2.- Seleccionar o poner en uso la base de datos con la que vas a trabajar,
haciendo doble clic sobre ella.
3.- Desplegar el contenedor de las tablas de la base de datos, haciendo clic
sobre el icono correspondiente.
4.- Seleccionar una tabla en la lista izquierda.
5.- En su menú contextual (un clic izquierdo) seleccionar la opción Select
Rows. Aparecerán todas las filas o registros de la tabla con un encabezado
de botones que nos permiten insertar, editar y eliminar filas, entre otras
opciones.
6.- Selecciona el botón o icono que aparece con el símbolo + y cuya acción
es Insertar nueva Fila (Insert new row).
7.- Escribe los datos correspondientes para cada campo del nuevo registro.
8.- Haz clic en el botón Apply para guardar los datos introducidos, o si se
desea seguir añadiendo otros registros, sigue introduciendo datos en la
siguiente fila y al final es cuando debes pulsar el botón Apply. Se utilizará el
botón Cancelar (Revert) si no se desea guardar los datos.
9.- Observa que antes de aplicar o confirmar la operación, se muestra el SQL
correspondiente a la sentencia que se va a ejecutar, en este caso un INSERT.
10.- Si la fila o filas se han añadido correctamente se mostrará un mensaje
indicando que la operación se ha realizado con éxito, y permaneciendo en la
ventana proporcionada por la opción Select Rows se podrá ver, la lista de los
datos contenidos en los registros que se han ido insertando.
11.- En caso contrario, se mostrará un mensaje de error.

Workbench (Elaboración propia)

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.

Workbench (Elaboración propia)

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:

1.- Se despliega la tabla en la que se van a modificar datos, por ejemplo la


tabla juego.
2.- Se hace doble clic en las celdas de la tabla que se quieren modificar y se
escribe el nuevo dato, en este ejemplo se ha cambiado el valor de cdequipo del
juego WOW al valor 10.
3.- Se aplican los cambios pulsando en botón Apply, se mostrará la sentencia
SQL que se transmite al servidor (un UPDATE), y se pulsa otra vez Apply. Si
todo va bien se pulsa Finish y los datos quedan modificados.
4.- En este ejemplo, obtenemos un error, puesto que la columna cdequipo en la
tabla juego es clave ajena, que referencia a la tabla equipo, y no existe en la
tabla equipo un equipo de código 10 (columna cdequipo); por tanto se está
infringiendo la Integridad Referencial. Igualmente se pueden obtener errores
por no respetar otras restricciones que se establecieron en el diseño y
creación de las tablas.
5.- Cuando se produce un error, se pulsa sobre el botón Cancel para cancelar
la operación y volver a la pantalla anterior, en la que debemos pulsar sobre el
botón Revert, para revertir los cambios.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 6/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.

Workbench (Elaboración propia)

Workbench (Elaboración propia)

Eliminación de datos (filas)


Para eliminar filas de una tabla se procede de la misma forma:

1.- Se despliega la tabla de la que se va a elimnar alguna o algunas filas. Por


ejemplo la tabla juego.
2.- Se marca la fila y se pulsa sobre el botón menos (-).
3.- Se aplican los cambios pulsando en el botón Apply, se mostrará la
sentencia SQL que se transmite al servidor ( un DELETE), y se pulsa otra vez
Apply. Si todo va bien se pulsa Finish y los datos quedan eliminados.
4.- Si se produce algún error, se cancela y volvemos a la pantalla anterior
revirtiendo cambios, como en el caso de las modificaiones/inserciones. Los
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/Mo… 7/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.

errores en la eliminación de filas pueden ser debidos a que se están


infringiendo las reglas de borrado que hemos asociado a las claves ajenas.
Por ejemplo, con un borrado restrictivo (ON DELETE RESTRICT), no se podrá
eliminar un equipo, supongamos el '01' si tiene concursantes o juegos
relacionados, pero si se podrá eliminar el equipo '07' si no tiene ni
concursantes ni juegos relacionados.

Workbench (Elaboración propia)

Exportar datos a texto plano


Otra operación que se puede realizar con los datos de una tabla o el resultado de
una consulta, es exportarlos o guardarlos en un archivo de texto plano, o archivo
CSV.

Un archivo CSV es un archivo de texto que almacena los datos en forma de


columnas, separadas por coma y las filas se distinguen por saltos de línea. Es
una forma muy sencilla de representar la información.
Son muy últiles para importar y exportar datos entre aplicaciones.

Para realizar esta tarea en modo gráfico, operamos como antes:

1.- Se despliega la tabla o la consulta de la que se quieren exportar los datos,


en este ejemplo los datos de la tabla equipo.
2.- Pulsa sobre el botón de exportar datos.
3.- Por defecto, la exportación es a CSV, por lo das un nombre al archivo, en
la ubicación que te interese, en este ejemplo datos_equipo.csv y pulsas en
Guardar
4.- Si abres el fichero con cualquier editor de texto plano, como por ejemplo
Notepad verás los datos de la forma indicada en la tercera imagen.

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.

Workbench (Elaboración propia)

...

Workbench (Elaboración propia)

...

Notepad++ (Elaboración propia)

...

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.

Importar datos en texto plano


Podemos importar los datos almacenados en un archivo CSV a una tabla con un
diseño apropiado de columnas para almacenarlos.

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.

1.- Se despliega la tabla en la que se quieren importar los datos, en este


ejemplo la tabla equipo2.
2.- Pulsa sobre el botón de importar datos.
3.- Localiza el archivo CSV con los datos a importar y pulsa Abrir.
4.- Selecciona la tabla de destino, en este ejemplo equipo2 y pulsas Next
(continuar)
5.- Ajusta los parámetros de importación y pulsa Next (continuar) hasta que la
importación finalice.
6.- Si despliegas la tabla equipo2 verás que se ha llenado con esso datos.

Workbench (Elaboración propia)

Workbench (Elaboración propia)

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.

Workbench (Elaboración propia)

Recomendación
Otros clientes gráficos para trabajar con MySQL son Navicat y PhpMyAdmin.

Te indicamos para cada uno de ellos el enlace de descarga y un enlace a un


turorial de uso.

Navicat.

Enlace de descarga de Navicat para MySQL (uso de 15 días).

Navicat para MySQL (15 días)

Tutorial de uso de Navicat para MySQL.

Tutorial de uso de Navicat

PhpMyAdmin

La forma más sencilla de dejar configurado el cliente gráfico PhpMyAdmin


para MySQL es descargar, en el caso de Windows, una paquete como
WampServer que ya lleva incluido PhpMyAdmin, en concreto incluye: Apache,
MySQL, Php y PhpMyAdmin listos para trabajar de manera conjunta.

Enlace de descarga de WampServer para Windows:

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.

La instalación de WampServer es muy sencilla, basta con ejecutar el archivo


descargado y seguir el tutorial de instalación y configuración. Recuerda que
instala su propio servidor MySQL, por lo que si ya tienes un MySQL instalado
hay que controlar que ambos no pueden estar iniciados a la vez escuchando
por el mismo puerto.

Desde el panel de control que proporciona WampServer tendremos acceso,


entre otros, a la herramienta PhpMyAdmin.

WampServer (Elaboración propia)

Tutorial de uso de PhpMyAdmin.

Tutorial de uso de PhpMyAdmin

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.

2.- Consultas de edición de datos.

Caso práctico

Hasta ahora, Noiba y Vindio se han dedicado a


hacer consultas mediante la sentencia SELECT sobre
tablas que ya contenían datos. Esta operación, con
ser la que se realiza con más frecuencia, no es
suficiente para gestionar todos los movimientos que
puede registrar la información de una base de
datos.

Alain Bachellier (CC BY-NC-SA)


El paso siguiente será ver cómo puede editar esos
datos para añadir, modificar o borrar las filas de
esas mismas tablas.

Para analizar este tipo de consultas de edición de datos Noiba se va a centrar


en la sintaxis que utiliza MySQL ya que, aunque mínimas, puede haber ligeras
diferencias entre distintos gestores.

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.

Veamos brevemente en qué consisten:

Sentencias para consultas de edición.

SENTENCIA SIGNIFICADO

INSERT Permite añadir datos a una o a varias filas de una tabla.

Se utiliza para modificar el contenido de las columnas para una o


UPDATE
varias filas de una tabla.

Con esta sentencia se pueden eliminar una, varias o todas las filas
DELETE
de una tabla.

START TRANSACCIONES. Este concepto se ha tratado en unidades


TRANSACTION anteriores. Destacaremos que se utilizan para evitar que si en las
COMMIT consultas de acción que acabamos de ver se produce un error, la
ROLLBACK

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.

base de datos pierda la integridad. Veremos en esta unidad como


trabajar con transacciones.

Actualmente no se puede modificar una tabla y seleccionar de la misma tabla en


la subconsulta. Esto se aplica a comandos tales como INSERT, REPLACE, UPDATE y
DELETE. Lo veremos en los siguientes apartados.

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

Respuesta incorrecta. 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.

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.

Incorrecto. 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.

3.- Añadir filas: La sentencia INSERT I.

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)

filas en alguna tabla y que si esta operación no se hace


correctamente puede obtener resultados inesperados.

Veremos todas las opciones que ofrece esta instrucción para realizar
operaciones tan comunes en un taller como añadir nuevas facturas.

La sentencia INSERT permite la inserción de nuevas filas o registros en un tabla existente.

Existen dos formas básicas de la sentencia INSERT :

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).

El formato más sencillo de utilización de la sentencia INSERTt iene la siguiente sintaxis:

INSERT [INTO] NombreTabla [(Columna1, [, Columna2] …..)] VALUES (Valor1 [,


Valor2] ….) , (…);

Donde:

NombreTabla es el nombre de la tabla donde se van a insertar las filas.


A continuación del nombre de la tabla, se indica la lista de nombres de columnas de
la tabla, separadas con comas y encerradas entre paréntesis. Podemos ver que los
nombres de columna son opcionales. Cuando no se especifica una lista de columnas,
se consideran, por defecto, todas las columnas de la tabla NombreTabla.

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.

Como podemos ver en el formato de arriba, la sentencia INSERT de MySQL acepta la


inserción de varios registros a la vez.

Estos valores tienen que cumplir:

Deben tener el mismo tipo de datos que las columnas de la tabla.


Los valores de tipo cadena irán encerrados entre comillas.
Las fechas se escribirán entre comillas y con el formato AAAA-MM-DD.
Para los números se usará como separador de decimales el punto.
Cuando queramos que una columna no reciba ningún valor utilizaremos NULL. Si
asignamos el valor NULL a una columna definida como NOT NULL, INSERT devuelve error
y la inserción no se produce.
Cuando se especifican los nombre de las columnas:
Cada uno de los valores corresponde a cada una de las columnas.
La lista de columnas no tiene porqué contener las columnas en el mismo orden
en el que están declaradas en la estructura de la tabla.
Cualquier columna que no se encuentre en la lista de columnas de esta orden se
rellenará con el valor NULL Si esa columna estuviera definida como NOT NULL,
recibirá el valor por defecto (por ejemplo una columna de tipo numérico recibirá
por defecto un 0, si es texto un espacio en blanco y si es fecha 0000-00-00).
También podemos asignarle el valor por defecto escribiendo DEFAULT.
Cuando no se incluye lista de columnas:
Si no se incluye en INSERT la lista de columnas, se deben introducir valores en
todas las columnas y en el mismo orden que aparecen en la estructura de la
tabla. Si no recordamos el orden de las columnas podemos usar DESCRIBE
NombreTabla.
Cuando una columna es de tipo autoincrementado, AUTO_INCREMENT, si no se escribe en
la lista de columnas, recibe el valor siguiente al último valor almacenado en la tabla. Si
se declara, habrá que asignar un valor, que puede ser NULL, 0 ó ''.

Con relación a claves e índices:

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.

Inserta una fila en la tabla RECAMBIOS rellenando todas las columnas.

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.

INSERT INTO RECAMBIOS (IdRecambio, Descripcion, UnidadBase, Stock, PrecioReferencia) VALUES (

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

Existe una sintaxis alternativa para INSERT:

INSERT [INTO] NombreTabla SET Columna1 = Valor1, Columna2 = Valor2,…

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.

Como una opción más de las


herramientas gráficas que
venimos utilizando, en MySQL
Workbench podemos obtener
el código SQL necesario para
AÑADIR, MODIFICAR O
BORRAR filas.

En la imagen vemos el código


base para insertar una fila en la
Workbench (Elaboración propia)
tabla EQUIPO que se obtiene
pulsado el botón derecho sobre
la tabla a modificar y
seleccionando la opción INSERTAR. Lo mismo puede hacerse con las demás
órdenes de edición de datos.

Ejercicio Resuelto INSERT


INTO
En la base de datos campeonato añade los siguientes registros en la tabla
equipo:

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);

-- Observa que son equivalentes las dos sentencias anteriroes

-- 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.

INSERT equipo (cdequipo, nombre) VALUES ('10','EQUIPO20'),


('11','EQUIPO11'), ('12','EQUIPO12');

Para saber más


Si quieres consultar estas y otras opciones de INSERT accede al siguiente
enlace:

Manual de MySQL: Orden INSERT

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.

3.1.- Sentencia INSERT con SELECT.

En el apartado anterior hemos visto cómo introducir valores


directamente con la sentencia INSERT, pero también es posible
obtener esos valores a partir de la información existente en la base
de datos, incluyendo una consulta utilizando la sentencia SELECT.

Está pensada como instrucción de migración de tablas y pretende


que la fuente de valores de un INSERT provenga de una consulta
SELECT. Everaldo Coelho and
YellowIcon (GNU/GPL)

INSERT … SELECT

La sintaxis de INSERT con SELECT es la siguiente:

INSERT [INTO] NombreTabla1, [ (Columna1, [, Columna2] …) ] SELECT {Columna1 [,


Columna2] … | *} FROM NombreTabla2 [CLÁUSULAS DE SELECT];

Cuando no se especifican las columnas en la cláusula INSERT, se consideran todas las


columnas de la tabla.
Las columnas obtenidas con SELECT deben ser del mismo tipo, aunque no tengan el
mismo nombre, que las columnas correspondientes donde se van a insertar los datos.
En cuanto a las condiciones para insertar varias filas son las mismas que para insertar
una sola fila.

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;

CATALOGO (Codigo, Descripcion, Precio).

A partir de CATALOGO vamos a añadir a nuestra tabla RECAMBIOS nuevas filas:

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.

INSERT INTO RECAMBIOS


SELECT Codigo, Descripcion, 'Unidad', 10, Precio*1.30
FROM CATALOGO
WHERE Descripcion LIKE '%espejo%';

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?

INSERT INTO RECAMBIOS ( Descripcion,IdRecambio, Precio) SELECT * FROM


CATALOGO );

No porque no se puede poner un * en la consulta SELECT.

No es correcta porque no puede duplicarse la clave principal.


No es correcta. Las columnas no coinciden.
La tabla RECAMBIOS no puede aparecer dos veces.

Falso. No es necesario especificar las columnas.

Correcto. No podemos añadir el IdRecambio porque ya está en la tabla


(CATALOGO contiene todos los recambios) y al ser clave principal no se
puede duplicar.

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.

Cierto. El orden de las columnas es posicional y en este caso no


coincide.

Falso.La tabla RECAMBIO solo aparece una vez.

Solución

1. Incorrecto
2. Opción correcta
3. Incorrecto
4. Incorrecto

Ejercicio Resuelto INSERT


INTO ... SELECT
A partir de la base de datos campeonato, añade los siguientes datos:

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.

INSERT INTO participa


SELECT 'A01', cdjuego, curdate(), 0
FROM juego
WHERE cdequipo='01';

-- 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.

3.2.- La sentencia REPLACE.

Un problema frecuente a la hora de insertar filas es que intentemos


añadir un valor que ya existe, en una columna que no admita
duplicados.

En el caso de la sentencia INSERT existe la opción de añadir ON


DUPLICATE KEY que permite modificar la fila anterior de la tabla con los
datos nuevos que se insertan, aunque no siempre es conveniente.
Everaldo Coelho and
Ejemplo. YellowIcon (GNU/GPL)

Podemos hacer el siguiente INSERT de manera que si el IdRecambio ya existe, lo que se hace
es una actualización de datos.

INSERT INTO recambios


SET IdRecambio='ER_111_333', Descripcion='Espejos retrovisores laterales'
ON DUPLICATE KEY UPDATE Descripcion='Espejos retrovisores laterales';

Si el código 'EE_111_333' ya existe, modifica la descripción que tenía.

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:

La sintaxis de esta sentencia es:

REPLACE [INTO] NombreTabla VALUES (Valor1, Valor2, …) , (…. )

También se puede utilizar:

REPLACE [INTO] NombreTabla SET Columna1 = Valor1, Columna2 = Valor2, ….

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.

REPLACE [INTO] NombreTabla1, [ (Columna1, [, Columna2] …) ] SELECT {Columna1 [,


Columna2] … | *} FROM NombreTabla2 [CLÁUSULAS DE SELECT];

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.

REPLACE INTO RECAMBIOS VALUES ('ER_111_333', 'Espejos retrovisores


laterales', '2 Unidades', 22, 250.50);
INSERT INTO RECAMBIOS VALUES ('ER_111_333', 'Espejos retrovisores laterales',
'2 Unidades', 22, 250.50);

En el caso de que la clave esté duplicada INSERT no añade ninguna fila,


REPLACE sí.

En el caso de que la clave esté duplicada ambas mantienen la fila


anterior.

Si la clave no está duplicada, ambas instrucciones añaden una nueva


fila.

Si la clave no está duplicada INSERT añade una nueva fila, REPLACE


sustituye la fila anterior por la nueva.

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.

3.3.- Sentencia LOAD DATA INFILE

En un apartado anterior hemos visto que es posible insertar datos en


una tabla a partir de una fichero en texto plano, archivo .txt o .csv

¿Recuerdas los ficheros .CSV? Vimos cómo hacer esa inserción o


importación de datos de manera gráfica con Workbench. También
vimos como exportar datos a un archivo de texto plano en modo
gráfico.
Everaldo Coelho (YellowIcon)
Pues bien, la sentencia de MySQL que realiza esa tarea de insertar (GNU/GPL)

datos desde un archivo de texto plano es LOAD DATA.

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.

Para usar LOAD DATA debemos:

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’;

Para saber más


Puedes ver todas las opciones de LOAD DATA y más ejemplos desde el
siguiente enlace:

Sentencia LOAD DATA en MySQL

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.

4.- Modificar filas: la sentencia UPDATE.

Caso práctico

Juan, responsable del departamento de Informática


de BK Sistemas Informáticos, se ha reunido hoy
con Noiba, Vindio y Naroba para hablar del proyecto
sobre el taller mecánico y su base de datos. Juan les
ha recordado que si bien la sentencia SELECT es la
más utilizada del LMD, una vez puesta la base de
datos en funcionamiento, seguro que será necesario
realizar además de consultas otras operaciones que
les permitan por ejemplo, cambiar el estado de una
reparación a 1 cuando el vehículo ya está listo para
emitir la factura o modificar la dirección del jefe de
Jonny Goldstein (CC BY)
mecánica que ha cambiado de domicilio. Para ello se
debe usar la sentencia apropiada.

Esta sentencia es UPDATE y tendrán que poner mucho cuidado en su aplicación


porque una vez ejecutados los cambios, en principio, no será posible volver
atrás.

La sentencia UPDATE se utiliza para actualizar los valores de las columnas para una o varias
filas de una tabla.

La sintaxis simplificada de esta sentencia es la siguiente:

UPDATE NombreTabla | CombinaciónDeTablas


SET Columna1 = Valor1, …, ColumnaN = ValorN
[WHERE Condición ]
[ORDER BY …]
[LIMIT n]

NombreTabla: es la tabla que vamos a modificar. La modificación puede afectar a varias


tablas combinadas.
SET indica las columnas que se van a actualizar y los nuevos valores.
WHERE selecciona las filas que se van a actualizar. Si no se incluye la cláusula WHERE se
actualizarán todas las filas de la tabla.

Otros aspectos a tener en cuenta:

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.

El orden en que se indiquen las columnas a modificar es indiferente.


Cuando la columna que se va a modificar aparece en la expresión que se calcula, el
valor que se toma es el que tenía antes de la modificación. Ejemplo:
PrecioReferencia=PrecioReferencia+20 (el precio de referencia final es el precio inicial +
20).
Con la instrucción UPDATE podemos actualizar el contenido de una columna de forma
global, es decir, para todas las filas.
Al modificar el contenido de una columna, esta columna deberá cumplir todas las
condiciones de dominio, clave principal, clave ajena e integridad referencial que
tuviera al definirla.

Ejemplo 1.

La reparación recogida con el código 10 ha finalizado. Recogemos en la tabla reparaciones


esta situación junto a la fecha de salida del vehículo reparado, que es la fecha actual.

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

Que la matrícula de la tabla VEHICULOS está relacionada con la matrícula


de la tabla REPARACIONES a través de integridad referencial con
actualización en cascada, por tanto todas las reparaciones
correspondientes a la matrícula modificada verían modificada la
matrícula.

Ejercicio Resuelto UPDATE


Sobre la base de datos campeonato realiza las siguientes operaciones:

1.- Modifica el juego de código ELV, su nueva dificultad es media y hay


que incrementar en 3 su columna megusta.
2.- Incrementa la cuota de todos los concursantes en un 2%.
3.- Incrementa en 5 los puntos del concursante de código A14 en el juego
de código FOE.
4.- Cambia el equipo de los concursantes que son hombres y que se
inscribieron antes de 2018. Su nuevo equipo será el de código '05'.

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.

4.1.- Sentencia UPDATE con SELECT.

Se puede incluir una sentencia SELECT o una subconsulta en una


sentencia UPDATE de distintas formas:

Incluida en la condición WHERE.


En la asignación de nuevos valores con SET.

En una misma consulta de actualización pueden incluirse varias Everaldo Coelho


(YellowIcon) (GNU/GPL)
subconsultas.

Cuando la sentencia SELECT va dentro de la cláusula WHERE la sintaxis a seguir es la siguiente:

UPDATE NombreTabla

SET Columna1 = Valor1, Columna2 = Valor2, …

WHERE Columna3 = (SELECT …… );

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);

Cuando la sentencia SELECT forma parte de SET debe cumplir que:

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

SET Columna1 = (SELECT Col1, … ), Columna2 = (SELECT Col2, … )

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.

Por ejemplo, si quisierámos aumentar la cuota en 5 euros a aquellos concursantes cuya


cuota medio es menor a la media de las cuotas de los concursantes, la sentencia de
actualización siguiente daría error:

UPDATE concursante
SET cuota_inscri= cuota_inscri+5
WHERE cuota_inscri <=(SELECT AVG(cuota_inscri) FROM concursante);

Esta sentencia de actualización daría error porque en la subconsulta aparece la tabla


concursante que es la misma que vamos a actualizar.

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.

En la columna Observaciones de la tabla REPARACIONES escribir el texto


'Contactar con el cliente' para aquellos vehículos que no hayan sido
reparados, es decir, que no tengan fecha de salida o que el atributo reparado
sea 0.

Mostrar retroalimentación

UPDATE REPARACIONES
SET Observaciones=’Contactar con el cliente'
WHERE FechaSalida IS NULL OR Reparado=0;

Ejercicio Resuelto UPDATE con


SELECT
En la base de datos campeonato realiza las siguientes operaciones:

1.- A los juegos que no tienen ningún valor en su atributo megusta se le


debe asignar el menor valor de los megusta de los juegos.
2.- A los concursantes que no están particpando en ningún juego se les
debe incrementar la cuota en 10 euros.

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.

Para saber más


Para ampliar la información sobre las consultas de actualización con UPDATE
accede al manual de MySQL en el siguiente enlace:

Sintaxis de la sentencia UPDATE

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.

5.- Eliminar filas: la sentencia DELETE.

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.

Con las sentencias revisadas hasta el momento


pueden cambiar el valor de las filas almacenadas, pero
no eliminar la fila por completo. Noiba le dice a Naroba
que revise ahora la última sentencia de las consultas
de acción, lo que le permitirá realizar todas las
operaciones sobre los datos de TalleresFaber
Alain Bachellier (CC BY-NC-SA)
necesarias para mantener al día la información. Esta
vez le toca la consulta DELETE, con la que podrá eliminar
los recambios que han quedado obsoletos.

La instrucción DELETE se utiliza para borrar filas en una o más tablas. La sintaxis para una
sola tabla es:

DELETE FROM NombreTabla [WHERE Condición] [ORDER BY..] [LIMIT n]

La sintaxis para múltiples tablas es:

DELETE NombreTabla1, NombreTabla2, … FROM CombinaciónDeTablas [WHERE Condición]

No es conveniente borrar varias tablas en una sola instrucción, sobre todo si


tenemos claves relacionadas porque el orden de borrado puede ser incorrecto. Sí
podemos usar varias tablas combinadas, en FROM para seleccionar las filas de la tabla
que queremos borrar.
CombinaciónDeTablas: La combinación de tablas se usa si la condición para borrar las
filas depende del contenido de otra tabla. En este caso debemos incluir en DELETE el
nombre de la tabla que se va a borrar. Por ejemplo borrar los clientes de los que no
tengamos vehículos en la tabla vehículos.
WHERE sirve para especificar condiciones. En la condición se puede utilizar una
subconsulta.

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.

DELET FROM recambios


WHERE stock =0;

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

DROP TABLE EMPLEADOS;

DELETE FROM EMPLEADOS;

¿En qué se diferencian estas dos consultas?

Mostrar retroalimentación

Como recordarás cuando vimos el LDD existe una instrucción para


borrar tablas: DROP que no es lo mismo que DELETE. En el caso de DROP la
tabla desaparece, en el caso de DELETE la tabla existe, pero sin filas.
Recuerda que con el LMD no podemos alterar la estructura de
nuestras bases de datos, sólo su contenido.

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:

TRUNCATE TABLE NombreTabla;

TRUNCATE mejora el rendimiento de DELETE cuando se desea eliminar todas las


filas porque es más rápida. Además en el caso de DELETE si eliminamos el
contenido de una tabla que tiene una columna autoincrementada, el servidor
MySQL recuerda el último valor que se almacenó en esa columna; en el caso
de TRUNCATE no se recuerda y si se inserta una nueva fila en la columna
autoincrementada comenzará por el valor 1.

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.

5.1.- Sentencia DELETE con SELECT

Al igual que las sentencias INSERT y UPDATE vistas anteriormente,


también se pueden hacer borrados de registros utilizando consultas
como parte de las tablas donde se hará la eliminación o como parte de
la condición que delimita la operación.

Por ejemplo, en la base de datos campeonato para eliminar los juegos


en los que no participa ningún concursante, redactaríamos la siguiente
Everaldo Coelho and sentencia:
YellowIcon (GNU/GPL)

DELETE FROM juego


WHERE cdjuego NOT IN (SELECT cdjuego FROM participa);

IMPORTANTE: Al igual que en la modificación de registros, si la sentencia de


borrado incluye una subconsulta sobre la misma tabla donde se van a borrar los
registros, MySQL daría un error ya que la tabla estaría bloqueada y no se
permite realizar consultas.

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:

DELETE FROM juego


WHERE megusta <(SELECT MIN(megusta) FROM (SELECT * FROM juego) as deriv);

Para saber más


Para ver más ejemplos sobre el uso de la sentencia DELETE puedes acceder al
siguietne enlace:

La sentencia DELETE en MySQL

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.

Ejercicio Resuelto DELETE


En la base de datos campeonato realiza las siguientes operaciones:

1.- Elimina los concursantes que no participan en ningún juego.


2.- El concursante de nombre Ismael Rojo y código A33 se da de baja.
Debes eliminarlo. ¿Cómo afecta su elimnación a las tablas consursante
y participa?
3.- Se deben dar de baja los equipos de nombre 'Los rebeldes' y 'El
parral'. Indica si se ha producido algún error y razona la causa.

Mostrar retroalimentación

1.-

DELETE FROM concursante


WHERE cdconcur NOT IN (SELECT cdconcur FROM participa);

2.-

DELETE FROM concursante


WHERE nombre LIKE 'Ismael Rojo' AND cdconcur='A33';

Tabla concursante: como este concursante es ídolo de otros


concursantes (clave foránea ON DELETE SET NULL) observa se pone a
NULL el cdidolo de esos concursante.
Tabla participa: en esta tabla el código de un concursante es clave
ajena con ON DELETE CASCADE, lo que implica que al eliminar al
consursante Ismael Rojo de código 'A33' se eliminarán en cascada
todas las filas que huiera de él en la tabla participa.
3.-

DELETE FROM equipo


WHERE nombre LIKE 'Los rebeldes';

El sistema arroja un error de borrado haciendo referencia a claves


foráneas, el motivo es el siguiente: este equipo tiene su código como
clave ajena de las tablas concursante y juego con la restricción ON DELETE
RESTRICT, lo que implica que no se podrá eliminar un equipo si tiene
filas relacionadas en alguna de esas tablas; y resulta que el equipo 'Los
rebeldes' tiene filas relacionadas en esas tablas.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 41/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.

DELETE FROM equipo


WHERE nombre LIKE 'El parral';

El equipo El parral si se puede eliminar, pues no tiene filas


relacionadas en las tablas concursante ni en el tabla juego.

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.

6.- Transacciones: Concepto.

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 de las ventajas de las bases de datos relacionales es la capacidad de realizar


transacciones. Ya habíamos hablado de ellas en una unidad anterior, las vemos ahora más
detenidamente.

Una transacción es un bloque diferenciado de operaciones de escritura sobre una o


más tablas, cuyo resultado puede ser confirmado o revocado en su totalidad. Un ejemplo
típico es la realización de una operación de transferencia bancaria entre dos cuentas. En el
caso de que surgiera algún problema, por ejemplo un corte en el suministro eléctrico,
podríamos haber realizado la anotación de salida en la cuenta de origen y no haber
realizado la anotación correspondiente de entrada en la cuenta de destino. Si ambas
operaciones no se ejecutan por completo se produce una base de datos inconsistente.
Este problema podría evitarse si pudiéramos regresar al estado inicial.

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.

Una transacción incompleta afecta a la integridad de la base de datos. Los SGBD


relacionales permiten al usuario definir restricciones; otras reglas de integridad, como la
integridad referencial, integridad de entidad, etc., son aplicadas por el propio sistema
cuando la estructura de la base de datos está bien definida, lo que le permite validar por sí
mismo algunas transacciones. Por ejemplo, añadir un vehículo que ya existe produce un
error en la regla de integridad de la clave primaria.

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.

A continuación se listan los nombres de las sentencias de MySQL que provocan la


finalización de una transacción:

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.

Si se incluyen en una transacción y esta falla, la transacción no podrá deshacerse.

Recuerda que en MySQL para poder utilizar transacciones necesitamos tablas


InnoDB. Actualmente son las tablas por defecto.

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?

La matrícula no estaría relacionada pero no daría error de integridad.


No se puede. Nos daría error al introducir la matrícula por pérdida de
INTEGRIDAD REFERENCIAL.
Se actualizaría en cascada porque las tablas están definidas ON UPDATE
CASCADE.

Se añade la fila, pero nos avisa del error.

INCORRECTO. Cuando se infringe la restricción de clave ajena la fila no


se puede añadir.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 44/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.

CIERTO. Cuando se infringe la restricción de clave ajena el registro no


se puede añadir.

NO ES LA OPCIÓN CORRECTA. Se infringe la restricción de clave


ajena. La fila no se actualiza.

NO ES CORRECTO. Cuando se infringe la restricción de clave ajena la


fila no se añade.

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.

6.1.- Procesamiento de transacciones con


SQL.
Aunque el instituto ANSI ha definido estándares también para las
transacciones, no todas las versiones de SQL siguen el estándar
ANSI, por tanto nos referiremos a la versión que utiliza MySQL como
en apartados anteriores.

Por defecto MySQL no trabaja con transacciones, por tanto cada


sentencia queda realmente ejecutada sobre la base de datos. Sin
embargo esto se puede modificar, de forma que no se actualice la
Everaldo Coelho and base de datos al ejecutar INSERT, UPDATE o DELETE hasta que el
YellowIcon (GNU/GPL)
usuario confirme esos cambios; permitiendo recuperar la información
si se produce un error o un fallo de software o de hardware.

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 habrás observado es necesario confirmar o ignorar los cambios


realizados.

Aunque trabajes en modo AUTOCOMMIT=ON (AUTOCOMMIT activado), puedes trabajar con


transacciones temporalmente. Los pasos para usar transacciones en MySQL son los
siguientes:

1.- Iniciar una transacción usando la sentencia BEGIN o START TRANSACTION.


2.- Realizar las operaciones de actualizar, insertar o eliminar filas de la base de datos.
3.- Si se quieren validar los cambios en la base de datos usamos COMMIT para
completar la transacción. Si sucede algún problema podemos utilizar la sentencia
ROLLBACK para cancelar todos los cambios que se hayan realizado hasta ese momento.

Workbench (Elaboración propia)

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.

Establecer un punto intermedio, o punto de salvaguarda o restauración, con


SAVEPOINT, a partir del cual se podrá deshacer la transacción. Un punto de restauración
es un marcador que puedes establecer dentro del contexto de la transacción.
Deshacer los cambios desde un punto de restauración (ROLLBACK TO SAVEPOINT). Debes
tener en cuenta que la sentencia ROLLBACK finaliza la transacción, pero ROLLBACK TO
SAVEPOINT no la finaliza

Ejemplo 1.

En la base de datos campeonato, y estando activado autocommit en el servidor MySQL


comprueba que la siguiente transacción permite deshacer cambios y que no queden
confirmados en la base de datos. (No se eliminan los juegos indicados)

use campeonato;
START TRANSACTION;
DELETE FROM juego
WHERE cdequipo LIKE '03';
ROLLBACK;

-- comprobación
SELECT * FROM juego;

Ejemplo 2.

Prueba ahora esta transacción con un punto de salvaguarda o restauración. Comprobarás


que que se ha podido deshacer hasta el punto de restauración.

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.

Sentencias relacionadas con el uso de transacciones en MySQL. (pdf -


0,42 MB)

Para saber más


Si necesitas más documentación sobre el uso de comandos en transacciones
puedes acceder al manual en el siguiente enlace:

Comandos transaccionales en MySQL

Autoevaluación
La sentencia:

UPDATE RECAMBIOS SET Stock=Stock+2 WHERE IdRecambio='BJ_111_666';


Se ejecuta con el modo AUTO_COMMIT desactivado. ¿Se puede deshacer?
La sentencia UPDATE no se puede deshacer.

No, previamente deberíamos haber ejecutado START TRANSACTION.

No, es necesario activar AUTO_COMMIT.

Sí, con ROLLBACK.

Incorrecto. En modo transacción la sentencia no se ejecuta si no se


confirma.

No es correcto. Con AUTO_COMMIT desactivado los cambios no se ejecutan


realmente si no se confirman.

No es la opción correcta. Si activamos AUTO_COMMIT los cambios se


ejecutan automáticamente.

Cierto. Con AUTO_COMMIT desactivado una sentencia UPDATE se puede


deshacer.

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.

6.2.- Propiedades de las transacciones.

Las transacciones presentan una serie de propiedades que


garantizan su fiabilidad. Esas propiedades, denominadas ACID, son
las siguientes:

Atomicidad.- Una transacción es una unidad indivisible, o se


ejecutan todas las órdenes de forma adecuada o no se guarda
ningún cambio producido sobre los datos.
Consistencia.- Cuando una transacción se ejecuta con éxito la Everaldo Coelho and
YellowIcon (GNU/GPL)
base de datos estará en un estado consistente, y si no se
ejecuta con éxito se deshacen las órdenes de la transacción
regresando al estado de consistencia anterior.
Durabilidad.- Los cambios que produce una transacción una vez finalizada son
permanentes, aunque se produzcan fallos posteriores en el sistema.
Aislamiento.- Si varias transacciones se realizan de forma concurrente por distintos
usuarios, el mismo elemento de datos que está siendo utilizado por una transacción
no puede ser utilizado por otra hasta que la anterior termine. Esto se traduce en que
los cambios que produce una transacción no sean visibles por las demás hasta que
ésta termine. Si no se mantiene el nivel adecuado de aislamiento pueden darse
distintos resultados al trabajar con varias transacciones.

Estos problemas derivados del acceso concurrente a datos se tratan en el apartado


siguiente.

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.

Workbench (Elaboración propia)

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

Concepto Relación Significado

Una transacción sin éxito vuelve a su estado


1 Atomicidad
inicial.

En entornos multiusuario las bases de datos


2
han de tener la misma respuesta que en
Consistencia
entornos monousuario.

3 Durabilidad Cada transacción es una unidad indivisible.

Una transacción finalizada produce cambios


4 Aislamiento
permanentes.

Enviar

Todas estas propiedades pretenden evitar problemas derivados del


acceso de varias transacciones a los mismos datos.

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.

7.- Formas de acceso a los datos: acceso


concurrente.

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.

Son varias las personas que van a acceder a los datos


almacenados una vez que la base de datos esté en
explotación: personal de administración, la encargada
de recambios, etc.
Alain Bachellier (CC BY-NC-
¿Qué ocurriría si una persona de administración intenta SA)
modificar el precio de un recambio mientras la
encargada de recambios está facturando una reparación a un cliente que ha
sustituido ese recambio? A esto se le denomina acceso concurrente y
nuestra base de datos debe saber controlar el resultado de la ejecución
concurrente de varias transacciones. ¿Quieres saber cómo se hace?

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.

La coordinación de la ejecución simultánea de varias transacciones en un SGBD se


denomina control de concurrencia y si no se mantiene el nivel de aislamiento adecuado
se pueden dar los problemas siguientes:

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:

READ UNCOMMITED.- Con este nivel se permiten transacciones en las que se


pueden dar los 3 problemas que acabamos de ver.
READ COMMITED.- No se pueden producir dirty reads, pero sí el resto de problemas.
REPEATABLE READ.- El único problema que puede presentar es el de phantoms.
Es el nivel por defecto de las tablas InnoDB en MySQL.
SERIALIZABLE.- No se puede producir ninguno de los problemas que hemos visto.

Para saber más


Problemas que puede ocasionar el acceso concurrente a los datos.

Ejemplos de problemas del acceso concurrente (pdf - 0,21 MB)

Si deseas obtener más información sobre los niveles de aislamiento de las


transacciones con tablas InnoDB en MySQL, puedes consultar el manual
desde el siguiente enlace:

Niveles de aislamiento de transacciones en MySQL.

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.

El propio SGBD mediante el planificador se encarga de establecer el orden en


que se deben realizar las operaciones incluidas en las transacciones
concurrentes garantizando además el uso eficiente del procesador.

El planificador establece este orden basándose en algoritmos de control de concurrencia,


que dan lugar a distintos métodos de bloqueo. Veremos a continuación cuáles son esos
métodos.

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.

Opción Transacción 1 Transacción 2

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.

7.1.- Políticas de bloqueo I.


El bloqueo consiste en que el uso de los datos de una transacción
es exclusivo, es decir que otra transacción concurrente no puede
tener acceso a los datos que están siendo usados por la anterior.

El bloqueo se produce antes de iniciar la transacción y se libera


cuando la transacción se completa.

Este bloqueo se puede producir a nivel de:


Everaldo Coelho and
Base de datos. YellowIcon (GNU/GPL)

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.

Independientemente del nivel de bloqueo un SGBD puede utilizar diferentes tipos de


bloqueo:

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:

Este método es menos restrictivo porque permite la compatibilidad de algunos bloqueos.

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.

Utilizando un bloqueo compartido/exclusivo un bloqueo puede tener 3 estados:


desbloqueado, compartido y exclusivo

La posibilidad de compartir el bloqueo hace que el acceso sea más eficiente,


pero este sistema aumenta la carga de trabajo del sistema.

Aunque los bloqueos impiden las inconsistencias serias de los datos, su uso puede
conducir a dos problemas importantes:

Que la programación de las transacciones pueda no ser serializable. La serialización


de las operaciones de lectura y escritura consiste en ordenar esas operaciones para
un conjunto de transacciones concurrentes, de modo que los resultados de las
operaciones sean correctos. La serialización se puede garantizar mediante el
bloqueo de dos fases.
Que en el programa se creen puntos muertos porque dos transacciones esperen a
que la otra desbloquee los datos. Estos problemas pueden solucionarse mediante
métodos de prevención y de detección.

Ambos métodos los veremos en el siguiente apartado.

Autoevaluación
Contesta si la siguiente afirmación es verdadera o falsa.

Si una transacción tiene un bloqueo compartido sobre una fila entonces:

Una solicitud de bloqueo exclusivo de otra transacción no podrá ser


atendida inmediatamente
Una solicitud de bloqueo compartido de otra transacción si podrá ser
atendida inmediatamente. En consecuencia ambas transacciones
mantendrán un bloqueo compartido sobre la fila.

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.

7.2.- Políticas de bloqueo II.


Comenzamos viendo el bloqueo en dos fases.

Bloqueo de dos fases.


Si tenemos dos transacciones ejecutándose sobre los mismos elementos, puede darse la
siguiente situación:

Ejemplo de problemas de serialización.

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.

Estas dos fases son:

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.

Ninguna operación de desbloqueo puede preceder a una operación de bloqueo en la misma


transacción. Algo que, como vemos, no se cumple en el ejemplo anterior.
https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 58/63
3/9/23, 7:00 PM GBD05.- Edición de los datos.

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.

TRANSACCIÓN OPERACIÓN ESTADO

Transacción 1 Bloquear X Bloqueado X

Transacción 2 Bloquear Y Bloqueado Y

Transacción 1 Bloquear X Esperando

Transacción 2 Bloquear Y Esperando

.... .....

Este caso únicamente puede darse cuando uno de los bloqueos es exclusivo.

Existen 3 técnicas básicas para controlar los puntos


muertos:

Prevención de puntos muertos: cuando sea


previsible que una transacción que solicita un
bloqueo pueda producir un punto muerto, la
transacción es abortada y todos los bloqueos que
haya obtenido se liberan. La transacción se Guindo (CC BY-NC-SA)

reprograma de nuevo evitando las condiciones que


producen puntos muertos.
Detección de puntos muertos: el SGBD comprueba periódicamente la existencia de
puntos muertos y si lo encuentra, una de las transacciones es reiniciada.
Evitar los puntos muertos: que la transacción requiera que todos los bloqueos se
obtengan en sucesión, aunque esto incrementa los tiempos de respuesta de las
acciones.

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

Porque si ambos bloqueos son compartidos el valor podría estar


bloqueado por más de una transacción y no permanecería en espera.

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.

7.3.- Bloqueo de datos con MySQL.

Normalmente el administrador del bloqueo del servidor bloquea las tablas


o las filas automáticamente cuando se necesita. Cuando el cliente ha
terminado con ella, se anula el bloqueo. En MySQL el bloqueo de tablas
se puede hacer de forma explícita mediante el uso de dos comandos:

LOCK TABLES / UNLOCK TABLES


Everaldo Coelho and
YellowIcon (GNU/GPL)
La sintaxis de estos comandos es la siguiente:

LOCK TABLES NombreTabla1 [AS Alias] {READ | {[LOW_PRIORITY] WRITE},


NombreTabla2 [AS Alias] {READ |{ [LOW_PRIORITY] WRITE} …
UNLOCK TABLES

LOCK bloquea el acceso a las tablas indicadas en la lista NombreTabla1,


TABLES
NombreTabla2,.., si es necesario, hasta que puedan adquirirse todos los demás bloqueos.
Para bloquear múltiples tablas se deben bloquear todas con una única instrucción LOCK
TABLES.

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.

Un bloqueo de tabla protege la tabla de lecturas o escrituras de otros usuarios, pero el


usuario que tiene la tabla bloqueada aunque sea del tipo READ puede realizar cualquier
operación sobre la tabla, incluso borrarla.

Bloqueo en tablas InnoDB

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.

En cuanto a la posibilidad de puntos muertos (deadlocks), cuando InnoDB lo detecta


cancela automáticamente una o más transacciones, generalmente las más pequeñas. Esto
funciona así cuando las tablas son InnoDB y el bloqueo es a nivel de fila. Si lo hemos
cambiado con la sentencia LOCK TABLE no detecta los puntos muertos.

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).

LOCK TABLES se utiliza cuando el motor de almacenamiento no soporta


transacciones, por ejemplo MyISAM y queremos asegurarnos de que no se
ejecute ninguna transacción entre un SELECT y un UPDATE o para que la
actualización de tablas sea más rápida.

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.

Desde MySQL Workbench desactiva el modo AUTOCOMMIT y escribe el código


para bloquear CLIENTES para escritura:

SET AUTOCOMMIT =0;


COMMIT;
LOCK TABLE CLIENTES WRITE;

Desde PhpMyAdmin escribe el siguiente código:

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.

De nuevo, desde MySQL Workbench intenta ejecutar la operación anterior:

UPDATE CLIENTES
SET Nombre='José'
WHERE CodCliente='00009';

Como verás la operación se ejecuta correctamente.

Para finalizar queda deshacer la transacción y desbloquear las tablas.

ROLLBACK;
UNLOCK TABLES;

¿Podrías modificar el nombre del cliente ahora desde PhpMyAdmin?

Mostrar retroalimentación

Efectivamente, ahora puedes modificarlo porque la tabla ha sido


desbloqueada.

Para saber más


Si quieres saber más sobre bloqueo de tablas en MySQL puedes acceder al
manual desde los siguientes enlaces:

Sintaxis de las sentencias de bloqueo de tablas en MySQL

Métodos de bloqueo en MySQL

https://aulavirtual37.educa.madrid.org/ies.nuevoalcorcon.alcorcon/pluginfile.php/62816/mod_resource/content/1/GBD05_v1/ArchivosUnidad/M… 63/63

También podría gustarte