2.3. Proceso por lotes

MySQL puede procesar por lotes las sentencias contenidas en un archivo de texto. Cada sentencia deberá terminar en ';' igual que si la escribiéramos en el cliente. La sintaxis es la siguiente:

  $ mysql -u juan -h servidor.misitio.org -p < demo.sql

En este caso, se realizará una conexión con el servidor, nos pedirá la contraseña del usuario ‘juan’ y, si ésta es correcta, ejecutará los comandos incluidos en el archivo demo.sql, uno a uno y por el mismo orden. Imprimirá los resultados (o errores) en la salida estándar (o de error) y terminará. De este modo evitaremos la molestia de procesarlos uno por uno de forma interactiva.

 

Otra forma de procesar un archivo es mediante el comando source desde el indicador interactivo de MySQL:

  mysql> source demo.sql

El archivo demo.sql crea una nueva base de datos.

 

El usuario debe tener permisos para crear bases de datos si quiere que sea procesado el archivo demo.sql. Si el administrador crea la base de datos por nosotros,  será  necesario  editarlo,  comentando  la  línea  donde  se  crea  la  base  de datos con el símbolo ’#’ al inicio:

  # create database demo;

Es necesario procesar el contenido del fichero demo.sql tal como los transcribimos aquí, con el fin de poder realizar los ejemplos del resto del apartado. Si se observa su contenido, posiblemente muchas cosas se expliquen por sí mismas, de cualquier manera, serán explicadas en este apartado. También pueden ejecutarse sus órdenes en el cliente directamente.

       Contenido del fichero demo.sql
#dropdatabase demo;
create database demo;
use demo;
---
--- Estructura de la tabla productos
---
create table productos (
  parte    varchar(20),
  tipo     varchar(20) ,
  especificación varchar(20) ,
  psugerido  float(6,2),
  clave int(3) zerofill not null auto_increment,
  primary key (clave)
);
insert into productos (parte,tipo,especificación,psugerido) values
  ('Procesador','2 GHz','32 bits',null),
  ('Procesador','2.4 GHz','32 bits',35),
  ('Procesador','1.7 GHz','64 bits',205),
  ('Procesador','3 GHz','64 bits',560),
  ('RAM','128MB','333 MHz',10),
  ('RAM','256MB','400 MHz',35),
  ('Disco Duro','80 GB','7200 rpm',60),
  ('Disco Duro','120 GB','7200 rpm',78),
  ('Disco Duro','200 GB','7200 rpm',110),
  ('Disco Duro','40 GB','4200 rpm',null),
  ('Monitor','1024x876','75 Hz',80),
  ('Monitor','1024x876','60 Hz',67)
  ;
--
-- Estructura de la tabla 'proveedor'
--
create table proveedores (
  empresa varchar(20) not null,
  pago  set('crédito','efectivo'),
  primary key (empresa)
);
--
-- Valores de la tabla 'proveedor'
--  
insert into proveedores (empresa,pago) values
  ('Tecno-k','crédito'),
  ('Patito','efectivo'),
  ('Nacional','crédito,efectivo')
;
create table ganancia(
  venta enum('Por mayor','Por menor'),
   factor decimal(2,2)
);
insert into ganancia values
  ('Por mayor',1.05),
   ('Por menor',1.12)
;
create table precios (
  empresa varchar(20) not null,
  clave int(3) zerofill not null,
  precio float(6,2),
  foreign key (empresa) references proveedores,
  foreign key (clave) references productos
);
insert into precios values
  ('Nacional',001,30.82),
  ('Nacional',002,32.73),
  ('Nacional',003,202.25),
  ('Nacional',005,9.76),
  ('Nacional',006,31.52),
  ('Nacional',007,58.41),
  ('Nacional',010,64.38),
  ('Patito',001,30.40),
  ('Patito',002,33.63),
  ('Patito',003,195.59),
  ('Patito',005,9.78),
  ('Patito',006,32.44),
  ('Patito',007,59.99),
  ('Patito',010,62.02),
  ('Tecno-k',003,198.34),
  ('Tecno-k',005,9.27),
  ('Tecno-k',006,34.85),
  ('Tecno-k',007,59.95),
  ('Tecno-k',010,61.22),
  ('Tecno-k',012,62.29)
;

 

Si se desea llevar un registro de todas las operaciones de una sesión, se puede utilizar la expresión siguiente; de este modo se guardarán todos los comandos y sus resultados en archivo_registro.txt:

  mysql> tee archivo_registro.txt

Para cancelar la captura, basta con teclear lo siguiente:

  mysql> notee