Tema 7 Trabajando Con Mysql

37
TEMA 7: TRABAJO CON MYSQL 1.- INTRODUCCION 2.-INSTALACION DE MYSQL 3.-USO DEL MONITOR MYSQL 4.-CONCEPTOS BÁSICOS DE MYSQL 1

Transcript of Tema 7 Trabajando Con Mysql

Page 1: Tema 7 Trabajando Con Mysql

TEMA 7: TRABAJO CON MYSQL

1.- INTRODUCCION

2.-INSTALACION DE MYSQL

3.-USO DEL MONITOR MYSQL

4.-CONCEPTOS BÁSICOS DE MYSQL

1

Page 2: Tema 7 Trabajando Con Mysql

1.- INTRODUCCION

       Las características principales de Mysql son:

✔ Es un gestor de bases de datospor tanto es una aplicación capaz de manejar este conjunto de datos de manera eficiente y cómoda.

✔ Es una base de datos relacional

✔ Es Opensourceel código fuente se puede descargar

✔ Es rápido, seguro y fácil de usar

✔ Utiliza el lenguaje de consultas estructurado SQL

✔ Existe una gran cantidad de software que lo usa.

2.-INSTALACION DE MYSQL

El equipo en el que se ejecuta Mysql y que almacena los datos se denomina servidor MySQL. Para poder establecer una conexión con ese servidor existen varias opciones de instalación.

2

EL CLIENTE Y EL

SERVIDOR DE MYSQL

ESTÁN EN LA MISMA

MAQUINA

SERVIDOR

MYSQL

CLIENTE

MYSQL

Page 3: Tema 7 Trabajando Con Mysql

✔✔

La tercera opción sería que el cliente mysql no se encuentre instalado en el equipo de sobremesa y necesitaramos conectarnos a otro equipo para utilizar el cliente MYSQL, es ese cano necesitaríamos Telnet o un cliente Secure Shell (SSH) para realizar la conexión.

[2.1] Comenzar la instalación

Descargar el fichero de instalación, en nuestro caso mysql-x.x.x-win.zip, del sitio web www.mysql.com

✔ Descomprimir su contenido en algún directorio temporal

✔ Ejecutar el fichero Setup.exe

3

Page 4: Tema 7 Trabajando Con Mysql

✔ Una vez instalado, y si no lo crea la misma instalación, habrá que crear un fichero  llamado MY.INI Ó MY.CNF que contendrá los siguientes parámetros:

4

Page 5: Tema 7 Trabajando Con Mysql

#This File was made using the WinMySQLadmin 1.0 Tool

#22/04/2001 11:44:09

#Uncomment or Add only the keys that you know how works.

#Read the MySQL Manual for instructions

[mysqld]

basedir=C:/mysql/BIN

#bind-address=192.168.244.151

datadir=C:/mysql/ data

language=C:/mysql/share/spanish

#slow query log#=

#tmpdir#=

#port=3306

#set-variable=key_buffer=16M

[WinMySQLadmin]

Server=C:/mysql/bin/mysqld-opt.exe

user=admin

password=passadmin

QueryInterval=10

La IP 192.168.244.151 no se debe cambiar.

Este fichero se tendrá que copiar en el directorio de windows (C:/Window ó C:/WINNT).

Este fichero se crea en la instalación pero si tuviésemos otra instalación de MySQL, es decir, otra base de datos instalada en nuestro equipo, este fichero ya existiría y no se

5

Page 6: Tema 7 Trabajando Con Mysql

creará de nuevo, cogiendo los parámetros que se hayan escrito durante la primera instalación.

✔ El servicio se añade pero no se arranca. Si intentásemos arrancarlo nos daría un error  1067. Esto no debe preocuparnos, lo que nos dice es que para que este servicio   arranque con éxito debemos reiniciar el equipo.

Una vez reiniciado el servicio se arranca automáticamente. Sólo tenemos que ir al directorio c:mysqlbin y ejecutar el fichero WinMySQLAdmin ejecutándose la base de datos ya con el semáforo de estado en verde.

✔ Comprobar que el servicio de mysql está activo. Para ello iremos a:

               Inicio>Configuración>Panel de Control>Herramientas Administrativas>Servicios

✔ Ejecutar la herramienta WinmysqlAdmin para ver si las versiones son correctas etc.

✔ Pruebas de conexión: Acceder al servidor mediante un cliente de mysql

6

Page 7: Tema 7 Trabajando Con Mysql

3.-USO DEL MONITOR MYSQL

MYSQL ES UN PROGRAMA QUE SE EJECUTA DESDE EL PROMPT DEL SISTEMA, QUE PERMITE CONECTARSE A UN SERVIDOR MYSQL PARA ENVIARLE CONSULTAS Y COMANDOS, Y VER LOS RESULTADOS.

Este comando permite:

✔ Consultar información de las bases de datos y tablas

✔ Crear bases de datos y tablas✔ Eliminar bases de datos y tablas.✔ Asignar y revocar privilegios.✔ Consultar, insertar, actualizar y eliminar

registros de una tabla

[2.1] Sintaxis del comando mysql

$shell> mysql [-h hostname] [-u usuario] [-p] contraseña [base de datos]

✔ En un entorno multiusuario es aconsejable escribir –p sin introducir la contraseña para que MYSQL al iniciarse la solicite

✔ Para una conexión a un host local como usuario root, las siguientes líneas son equivalentes.

7

Page 8: Tema 7 Trabajando Con Mysql

# mysql

# mysql -u root

# mysql -h localhost -u rootSi se puede establecer la conexión a MySQL, se obtiene un mensaje de bienvenida, y se cambia el prompt, indicando que se pueden enviar consultas al servidor.

# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 25 to server version: 3.23.41

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

[2.2] primeros comandos con el monitor de mysql

Un comando consta de una sentencia SQL seguida por punto y coma.

Al escribir un comando, mysql lo manda al servidor que lo ejecuta y posteriormente nos muestra los resultados y nos devuelve el prompt para indicar que está listo para recibir más consultas.

Mysql muestra cuántas filas fueron devueltas y cuanto tiempo tardó en ejecutarse la consulta.

8

Page 9: Tema 7 Trabajando Con Mysql

Las palabras claves se pueden escribir usando mayúsculas y minúsculas.

Podemos escribir más de una sql en una línea separándolas por ;

Es mejor utilizar la comilla simple para la escritura de cadenas

No es necesario escribir un comando en una sola línea mysql determina el final cuando encuentra el ;

Si no queremos terminar de escribir una consulta podemos utilizar \c

✔ Para saber la version y la fecha actual:mysql> SELECT VERSION(), CURRENT_DATE;✔ El programa mysql permite ver las bases de

datos existentes.

mysql> SHOW DATABASES ;

//Ejemplo

mysql> SHOW DATABASES;+----------+| Database |+----------+| mysql || test |+----------+

✔ La base de datos mysql es muy importante para el funcionamiento del sistema de gestión de bases de datos puesto que corresponde al DICCIONARIO DE DATOS (relaciones que sirven para el correcto funcionamiento de la base de datos). Las tablas de la bd mysql contienen información sobre los privilegios de un determinado usuario sobre una base de datos cuando se conecta desde un determinado

9

Page 10: Tema 7 Trabajando Con Mysql

ordenador y quiere acceder a ciertas tablas o columnas de una tabla.

✔ La base de datos test se crea durante la instalación para servir como área de trabajo a los usuarios que que se inician en el aprendizaje de Mysql.

✔ El programa mysql permite crear bases de datos. Si estamos en Linux, los nombres de las bases de datos y las tablas son sensibles a mayúsculas y minúsculas.

mysql> CREATE DATABASE nombreBaseDatos ;

//Ejemplo

mysql> CREATE DATABASE agendita;Query OK, 1 row affected (0.00 sec)

✔ Con el cliente mysql hay que seleccionar la base de datos sobre la que se va a trabajar.

mysql> USE nombreBaseDatos ;(este comando solo puede ir escrito en una única línea)

//Ejemplo

mysql> USE agendita;Database changed

✔ Una vez seleccionada una base de datos, se pueden crear las tablas necesarias.

//Ejemplo

10

Page 11: Tema 7 Trabajando Con Mysql

mysql> CREATE TABLE contactos ( -> id INT NOT NULL AUTO_INCREMENT , -> nombre VARCHAR(50) NOT NULL , -> email VARCHAR(50) NOT NULL , -> telefono VARCHAR(20) NOT NUL , -> PRIMARY KEY (id) ); Query OK, 0 rows affected (0.02 sec)

✔ Si queremos permite ver cuales son las tablas de una base de datos.

mysql> SHOW TABLES ;

//Ejemplo

mysql> SHOW TABLES;+--------------------+| Tables_in_agendita |+--------------------+| contactos |+--------------------+1 row in set (0.00 sec

✔ Para poder examinar la estructura de una tabla.

mysql> DESC nombreTabla ;

//Ejemplo

mysql> DESC contactos;+----------+-------------+------+-----+---------+| Field | Type | Null | Key | Default |

11

Page 12: Tema 7 Trabajando Con Mysql

+----------+-------------+------+-----+---------+| id | int(11) | | PRI | NULL | | nombre | varchar(50) | YES | | NULL | | email | varchar(50) | YES | | NULL | | telefono | varchar(50) | YES | | NULL | +----------+-------------+------+-----+---------+4 rows in set (0.00 sec)

12

Page 13: Tema 7 Trabajando Con Mysql

✔ Vamos a insertar registros en la tabla utilizando la sentencia INSERT

mysql> INSERT INTO contactos VALUES -> (0, 'Juan Penas', '[email protected]', '5675 -7383' );

mysql> INSERT INTO contactos VALUES -> (0, 'Bety la fea', '[email protected]', '6373 -3459' );

mysql> INSERT INTO contactos VALUES -> (0, 'Pepe pecas', '[email protected]', '7282 -2728' );

mysql> INSERT INTO contactos VALUES -> (0, 'Mary B.', '[email protected]', '3459 -2339');

PARA NO TENER QUE UTILIZAR TANTOS INSERT INTO PODRIAMOS UTILIZAR UNO SOLO SEPARANDO LOS REGISTROS MEDIANTE COMAS ESTO REDUCE EL CODIGO Y HACE QUE EL SERVIDOR PROCESE MÁS RÁPIDO:mysql> INSERT INTO contactos VALUES -> (0, 'Juan Penas', '[email protected]', '5675 -7383' ),

-> (0, 'Bety la fea', '[email protected]', '6373 -3459' ),

-> (0, 'Pepe pecas', '[email protected]', '7282 -2728' ),

-> (0, 'Mary B.', '[email protected]', '3459 -2339');

✔ Si queremos evitar tener que ejecutar múltiples insert podemos cargar una tabla a partir de un archivo de texto. El archivo debe contener un registro por línea

13

Page 14: Tema 7 Trabajando Con Mysql

separado por el tabulador cuidando de que el orden sea el mismo que utilizamos en la sentencia create table. Para valores desconocidos o sea null utilizaremos \N. Observar también que las fechas debemos darselas en el formato YYYY-MM-DD

mysql> LOAD DATA LOCAL INFILE “MIFICHERO.TXT” INTO TABLE CONTACTOS;

✔ Para restringir el acceso a una base de datos:

mysql> GRANT ALL ON base.* TO NOMBREUSUARIO@MIPC IDENTIFIED BY ‘MICONTRASEÑA’;

nombreusuario ES EL NOMBRE DE USUARIO ASIGNADO DENTRO DEL CONTEXTO DE MYSQL

MIPC ES EL NOMBRE O LA DIRECCION IP DEL ORDENADOR DESDE EL QUE NOS CONECTAMOS

MICONTRASEÑA ES LA CONTRASEÑA QUE SE LE HA ASIGNADO A ESE USUARIO.

El nombre de usuario y la contraseña no tienen nada que ver con el nombre del usuario y la contraseña manejados por el sistema operativo

✔ Podemos utilizar las sentencias SELECT que ya conocemos desde el monitor mysql

mysql> SELECT * FROM contactos;

mysql> SELECT nombre, email FROM contactos;

14

Page 15: Tema 7 Trabajando Con Mysql

mysql> SELECT nombre, email, telefono FROM contactos -> WHERE id = 3;

mysql> SELECT * FROM contactos WHERE nombre -> LIKE 'Pepe%';

mysql> SELECT COUNT(*) AS num FROM contactos;

4.-CONCEPTOS BÁSICOS DE MYSQL

[4.1] tipos de datos en mysql

NUMÉRICOS:

Existen tipos de datos numéricos, que se pueden dividir en dos grandes grupos, los que están en coma flotante (con decimales) y los que no.

TinyInt: es un número entero con o sin signo. Con signo el rango de valores válidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255

Bit ó Bool: un número entero que puede ser 0 ó 1

SmallInt: número entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.

MediumInt: número entero con o sin signo. Con signo el rango de valores va desde -8.388.608 a

15

Page 16: Tema 7 Trabajando Con Mysql

8.388.607. Sin signo el rango va desde 0 a16777215.

Integer, Int: número entero con o sin signo. Con signo el rango de valores va desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295

BigInt: número entero con o sin signo. Con signo el rango de valores va desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615.

Float: número pequeño en coma flotante de precisión simple. Los valores válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38.

xReal, Double: número en coma flotante de precisión doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308

Decimal, Dec, Numeric: Número en coma flotante desempaquetado. El número se almacena como una cadena

Tipo de Campo

Tamaño de Almacenamiento

TINYINT 1 byte

SMALLINT 2 bytes

MEDIUMINT

3 bytes

INT 4 bytes

16

Page 17: Tema 7 Trabajando Con Mysql

INTEGER 4 bytes

BIGINT 8 bytes

FLOAT(X) 4 ú 8 bytes

FLOAT 4 bytes

DOUBLE 8 bytes

DOUBLE PRECISION

8 bytes

REAL 8 bytes

DECIMAL(M,D

M+2 bytes sí D > 0, M+1 bytes sí D = 0

NUMERIC(M,D)

M+2 bytes if D > 0, M+1 bytes if D = 0

FECHA:

A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es válida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el día esta comprendido entre 0 y 31. Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de año-mes-dia

DateTime: Combinación de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre

17

Page 18: Tema 7 Trabajando Con Mysql

del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de año-mes-dia horas:minutos:segundos

TimeStamp: Combinación de fecha y hora. El rango va desde el 1 de enero de 1970 al año 2037. El formato de almacenamiento depende del tamaño del campo:

Tamaño

Formato

14

AñoMesDiaHoraMinutoSegundo aaaammddhhmmss

12

AñoMesDiaHoraMinutoSegundo aammddhhmmss

8 ñoMesDia aaaammdd

6 AñoMesDia aammdd

4 AñoMes aamm

2 Año aa

Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS'

Year: almacena un año. El rango de valores permitidos va desde el año 1901 al año 2155. El campo puede tener tamaño dos o tamaño 4 dependiendo de si queremos almacenar el año con dos o cuatro dígitos.

18

Page 19: Tema 7 Trabajando Con Mysql

Tipo de Campo

Tamaño de Almacenamiento

DATE

3 bytes

DATETIME

8 bytes

TIMESTAMP

4 bytes

TIME

3 bytes

YEAR

1 byte

CADENA:Char(n): almacena una cadena de longitud fija. La cadena podrá contener desde 0 a 255 caracteres.

VarChar(n): almacena una cadena de longitud variable. La cadena podrá contener desde 0 a 255 caracteres.

Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Test y los tipo BLOB (Binary large Object)

La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las Mayúsculas y las minúsculas,

19

Page 20: Tema 7 Trabajando Con Mysql

el tipo BLOB se ordena teniéndolas en cuenta.

Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros.

TinyText y TinyBlob: Columna con una longitud máxima de 255 caracteres.

Blob y Text: un texto con un máximo de 65535 caracteres.

MediumBlob y MediumText: un texto con un máximo de 16.777.215 caracteres.

LongBlob y LongText: un texto con un máximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicación los paquetes pueden tener un máximo de 16 Mb.

Enum: campo que puede tener un único valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos

Set: un campo que puede contener ninguno, uno ó varios valores de una lista. La lista puede tener un máximo de 64 valores.

Tipo de campoTamaño de Almacenamiento

CHAR(n) n bytes

VARCHAR(n) n +1 bytes

TINYBLOB, TINYTEXT Longitud+1 bytes

BLOB, TEXT Longitud +2 bytes

MEDIUMBLOB, Longitud +3

20

Page 21: Tema 7 Trabajando Con Mysql

MEDIUMTEXT bytes

LONGBLOB, LONGTEXT

Longitud +4 bytes

ENUM('value1','value2',...)

1 ó dos bytes dependiendo del número de valores

SET('value1','value2',...)

1, 2, 3, 4 ó 8 bytes, dependiendo del número de valores

Diferencia de almacenamiento entre los tipos Char y VarChar:

ValorCHAR(

4)Almace

namientoVARCHAR(4

) Almace

namiento

'' '' 4 bytes " 1 byte

'ab' 'ab ' 4 bytes 'ab' 3 bytes

'abcd' 'abcd' 4 bytes 'abcd'  

'abcdefgh'

'abcd' 4 bytes 'abcd' 5 bytes

[4.1] tipos de tablas en mysql

Mysql soporta varios motores de almacenamiento que tratan con diferentes tipos de tablas. Los motores de almacenamiento incluyen algunos que tratan con tablas transaccionales y otros que no lo hacen.

Los tipos de tablas transaccionales son: INNODB Y BDB

21

Page 22: Tema 7 Trabajando Con Mysql

Los tipos de tablas no transaccionales son: ISAM, MYISAM, MERGE Y HEAP

22

Page 23: Tema 7 Trabajando Con Mysql

Describamos brevemente algunos de los tipos existentes:ISAM: es el formato de almacenaje mas antiguo, y posiblemente podria desaparecer en futuras versiones. Presentaba limitaciones importantes como la no exportación de ficheros entre maquinas de distintas arquitecturas o que no podia usar mayores de  4 GigaBytes.MYISAM: es el tipo de tabla por defecto en MySQL desde la versión 3.23. Optimizada para sistemas operativos de 64 bits, permite ficheros de tamaños mayores que las ISAM. Los datos se almacenan en un  formato independiente, lo que permite pasar tablas entre distintas plataformas. Los índices se almacenan en un archivo con la extensión ”.MYI” y los datos en otro archivo con extensión “.MYD”. Ofrece la posibilidad de indexar campos BLOB y TEXT. Además este tipo de tablas soportan el tipo de dato VARCHAR.Un inconveniente es que las tablas pueden llegar a corromperse, almacenando datos incorrectos debido a caídas del sistema o problemas de hardware.

INNODB: InnoDB provee a MySQL con el soporte para trabajar con transacciones, además de hacer un mejor bloqueo de registros para las instrucciones SELECT muy parecido al usado por Oracle, con lo que incrementa el rendimiento y la concurrencia en ambientes multiusuario.

InnoDB es el único formato que tiene MySQL para soportar llaves foráneas (FOREING KEY).

Las características más importantes a destacar son:

Recuperación automática ante fallas. Si MySQL se da de baja de una forma anormal,

23

Page 24: Tema 7 Trabajando Con Mysql

InnoDB automáticamente completará las transacciones que quedaron incompletas.

Integridad referencial. Ahora se pueden definir llaves foráneas entre tablas InnoDB relacionadas para asegurarse de que un registro no puede ser eliminado de una tabla si aún está siendo referenciado por otra tabla.

Bloqueo a nivel de filas. Al usar tablas MyISAM, y tener consultas muy grandes que requieren de mucho tiempo, simplemente no se podían ejecutar más consultas hasta que terminarán las consultas que estaban en ejecución. En cambio, las tablas InnoDB usan bloqueo a nivel de filas para mejorar de manera impresionante el rendimiento.

¿Qué TIPO DE TABLA UTILIZAR? Por razones de rendimiento, las tablas

INNODB si hay que realizar gran cantidad de operaciones de inserción y actualización o bien utilizar integridad referencial.

Si las operaciones de selección son las mayoritarias es mejor el tipo MYISAM

Cuando se crea una tabla, el tipo se indica añadiendo la opción TYPE al comando CREATE TABLE

CREATE TABLE T (I INT) TYPE=INNODB;

Veamos ahora lo que es una TRANSACCIÓN.

[4.1] transacciones en mysql

24

Page 25: Tema 7 Trabajando Con Mysql

Una TRANSACCIÓN en MySQL es una secuencia de una o más sentencias SQL que juntas forman una unidad de trabajo. Es decir, las operaciones que forman una transacción debe ser completas en su totalidad o pueden se desechas si el proceso no se completó correctamente

El SGBD tiene que disponer de procedimientos que aseguren la integridad de la información ante fallos de tipo físico, lógico, humano así como proteger los datos frente a accesos no autorizados.

Supongamos una sucursal bancaria donde tenemos almacenados los datos de los clientes:

Por ejemplo:

Nº CUENTA

NOMBRE

SALDO

1 PALOMA

1 MILL

2 JUAN 2 MILL

Supongamos un traspaso de la cuenta 2 de 1 MILL a la cuenta 1. La secuencia de operaciones lógicas a realizar sería:

Restar 1MILL a la cuenta2 2.Sumar 1MILL a la cuenta1

¿Qué ocurriría si se lleva a cabo la 1ª operación, pero no la 2ª?

Evidentemente la B.D quedaría en un estado inconsistente.

25

Page 26: Tema 7 Trabajando Con Mysql

Nº CUENTA

NOMBRE

SALDO

1 PALOMA

1 MILL

2 JUAN 1 MILL

A este problema se le conoce con el nombre del problema DE LA INFORMACION PERDIDA. Para evitar este problema el SGBD va a realizar lo que se conoce como TRANSACCION. Para controlar las transacciones el SGBD se apoya en 1 o más ficheros diarios de extensión LOG, sobre los que se va volcando la información. De manera que cada cierto tiempo el SGBD realiza un CHECKPOINT, un pto. de chequeo. Cuando realiza ese chequeo graba en ciertas áreas de MEMORIA SECUNDARIA el estado de la B.D.

Suponiendo el siguiente diagrama de transacciones:

Trans1 Trans4

Trans3Trans2 Trans5

26

Page 27: Tema 7 Trabajando Con Mysql

CHECKPOINT

RECUPERACION EN CALIENTE/FRIO DE LA B.D:

El SGBD deshace las transacciones que no hubieran concluido o bien las transacciones conclusas que no estén registradas en el área correspondiente de MEMORIA SECUNDARIA.

Si la recuperación de la B.D. se hace a través de un BACKUP la recuperación se conoce con el nombre de RECUPAERACION EN FRIO.

Otro ejemplo típico sería suponer que queremos borrar uno o varios registros de una tabla, pero nos equivocamos y eliminamos todos los registros de la tabla. ¿Existe alguna forma de subsanar el error y dar marcha atrás para recuperar los registros eliminados? La respuesta es sí, utilizando transacciones.

Por defecto MySQL funciona en modo autocommit. Esto quiere decir que se confirma (COMMIT) cada sentencia ejecutada.

Los pasos para iniciar una transacción son los siguientes:

Se comienza una transacción con la sentencia START TRANSACTION.

Si se realizan modificaciones en la base de datos y queremos volver atrás y cancelar los cambios realizados hasta el momento, utilizaremos la sentencia ROLLBACK.

Si queremos confirmar los cambios realizados en la base de datos, utilizaremos la sentencia

27

Page 28: Tema 7 Trabajando Con Mysql

COMMIT, lo cual implica también que termina la transacción.

Si queremos comenzar una nueva transacción, usaremos START TRANSACTION.

Nota: para que las transacciones funcionen correctamente, debemos utilizar tablas InnoDB .

Veamos un ejemplo.

Disponemos de la tabla EMPLE, que está formada por los campos que se muestran en la imagen.

A continuación comenzamos una transacción con START TRANSACTION.

28

Page 29: Tema 7 Trabajando Con Mysql

Modificamos el salario de todos los empleados de la tabla EMPLE, con la siguiente sentencia SQL.

update emple set salario=1000;

Observamos a continuación que se ha modificado el salario de todos los empleados.

29

Page 30: Tema 7 Trabajando Con Mysql

Deshacemos el trabajo ya que nos hemos equivocado. Para ello utilizamos la sentencia ROLLBACK.

Y comprobamos a continuación que la tabla vuelve a su estado original.

30

Page 31: Tema 7 Trabajando Con Mysql

Si queremos validar los cambios en la base de datos, completaremos la transacción con el uso de la sentencia COMMIT. Si ejecutamos ROLLBACK justo después de hacer el COMMIT, los cambios realizados sobre la base de datos permanecerán, debido a que anteriormente se validó la transacción.

31