1. Bases de Datos
L.I. Ma. Luisa Velasco Ramírez.
Utilizando la base de datos organizacion que esta compuesta por las relaciones: compania,
dirige, trabaja y vive.
CREATE DATABASE organizacion;
USE organizacion;
CREATE TABLE compania (
compania varchar(20) NOT NULL,
ciudad varchar(20),
PRIMARY KEY (compania));
INSERT INTO compania (compania,ciudad) VALUES
('Chedraui','xalapa,ver.'),
('El corte ingles','xalapa,ver.');
CREATE TABLE `dirige` (
nombre varchar(20) NOT NULL,
nombre_director varchar(20),
PRIMARY KEY (nombre));
INSERT INTO dirige (nombre,nombre_director) VALUES
('Ale','Jesus'),
('Dora','Jesus'),
('Jimenea','Gabi'),
('Jose','Jesus'),
('Julio','Gabi');
CREATE TABLE vive (
nombre varchar(20) NOT NULL,
calle varchar(25) default NULL,
ciudad varchar(20) default NULL,
PRIMARY KEY (nombre));
INSERT INTO vive (nombre,calle,ciudad) VALUES
('Ale','francisco rivera','Banderilla'),
('Dora','av. 20 noviembre','xalapa,ver.'),
('Gabi','av.orizaba','xalapa,ver.'),
('Jesus','martires 28','xalapa,ver.'),
('Jimena','rebsamen','xalapa,ver.'),
('Jose','martires 28','xalapa,ver.'),
('Julio','av.orizaba','xalapa,ver.');
CREATE TABLE trabaja (
nombre varchar(20) NOT NULL,
compania varchar(20) NOT NULL,
1
2. Bases de Datos
L.I. Ma. Luisa Velasco Ramírez.
salario int,
PRIMARY KEY (nombre,compania),
FOREIGN KEY (nombre) REFERENCES vive(nombre),
FOREIGN KEY (compania) REFERENCES compania (compania;
INSERT INTO trabaja (nombre,compania,salario) VALUES
('Ale','El corte ingles',2000),
('Dora','El corte ingles',2000),
('Jesus','El corte ingles',4000),
('Jose','El corte ingles',2000);
Abrir dos sesiones en Mysql para trabajar de manera concurrente.
Poner en uso la base de datos organización.
Nota: Los datos con los que se realizaron las consultas pueden ser no los mismos que
ustedes tienen capturados, adaptar las consultas de modo que puedan realizarse.
2
3. Bases de Datos
L.I. Ma. Luisa Velasco Ramírez.
Sesión 1:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from compania where compania="Chedraui" lock in share mode;
+----------+------------+
| compania | ciudad |
+----------+------------+
| Chedraui | Banderilla |
+----------+------------+
1 row in set (0.00 sec)
Sesión 2:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> update compania set ciudad="Coatepec" where compania="Chedraui";
Verificar que sucede
Dar commit en la sesión 1 y verificar que sucede la sesión 2;
Sesión 1:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select salario from trabaja where nombre=”Ale” for update;
+--------+
| salario |
+--------+
| 2000 |
+--------+
1 row in set (0.00 sec)
Sesión 2:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> update trabaja set salario=4000 where nombre="Ale";
3
4. Bases de Datos
L.I. Ma. Luisa Velasco Ramírez.
Verificar que pasa en la sesión 2
Dar commit en la sesión 1 y verificar la sesión 2
Volver a repetir la consulta de la sesión 1 en esa misma sesión:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> select salario from trabaja where nombre=”Ale” for update;
Sin haber dado el commit en la sesión 2 y verificar que sucede.
Dar commit en la sesión 2 y verificar que sucede en la sesión 1.
Sesión 1:
mysql> set autocommit=0;
Query OK, 0 rows affected (0.06 sec)
mysql> lock table trabaja write;
Query OK, 0 rows affected (0.00 sec)
Sesión 2:
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from trabaja;
Verificar lo que sucede
Sesión 1:
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
Sesión 2: Verificar lo que sucede, un ejemplo es:
+--------+-----------------+---------+
| nombre | compania | salario |
+--------+-----------------+---------+
| Ale | El corte ingles | 4000 |
| Dora | El corte ingles | 2000 |
| Jesus | El corte ingles | 4000 |
| Jose | El corte ingles | 2000 |
+--------+-----------------+---------+
4 rows in set (8.61 sec)
4
5. Bases de Datos
L.I. Ma. Luisa Velasco Ramírez.
Repetir la práctica desde la señal pero en lugar de aplicar un bloqueo de escritura
utilizar un bloqueo de lectura ( lock table nombre_tabla read).
Investigar para que sirve el autocommit.
5