MySQL - transacción; motor de almacenamiento

 1. Transacción

Las transacciones de MySQL se utilizan principalmente para procesar datos con una gran cantidad de operaciones y alta complejidad. Por ejemplo, en el sistema de administración de personal, si elimina a una persona, debe eliminar no solo la información básica de la persona, sino también la información relacionada con la persona, como buzones, artículos, etc. De esta manera, estos ¡Las declaraciones de operación de la base de datos constituyen una transacción!

(1) En MySQL, solo las bases de datos o tablas que utilizan el motor de base de datos Innodb admiten transacciones

(2) El procesamiento de transacciones se puede utilizar para mantener la integridad de la base de datos y garantizar que los lotes de instrucciones SQL se ejecuten o no se ejecuten en absoluto.

(3) Las transacciones se utilizan para administrar declaraciones DML (insertar, actualizar, eliminar)

Esencia: ¡ Una transacción es en realidad múltiples declaraciones DML ejecutadas con éxito o falladas al mismo tiempo!

(1) Cuatro características de las transacciones

En términos generales, una transacción debe cumplir cuatro condiciones (ACID): atomicidad (Atomicidad o indivisibilidad), consistencia (Coherencia), aislamiento (Aislamiento, también conocido como independencia) y durabilidad (Durabilidad)

Atomicidad : la indivisibilidad de la transacción y la indivisibilidad de cada unidad lógica que compone la transacción.

Coherencia : antes y después de la ejecución de la transacción, la integridad de los datos se mantiene constante

Aislamiento : la ejecución de la transacción no debe ser interferida por otras transacciones

Durabilidad ( Durability ): una vez que finaliza la transacción, los datos se conservan en la base de datos

[1] Atomicidad : todas las operaciones en una transacción se completan o no, y no terminarán en un determinado enlace en el medio. Si ocurre un error durante la ejecución de la transacción, se revertirá (Rollback) al estado anterior al inicio de la transacción, como si la transacción nunca se hubiera ejecutado.

[2] Consistencia ( Consistencia ): antes de que comience la transacción y después de que finalice, la integridad de la base de datos no se destruye. Esto significa que los datos escritos deben cumplir completamente con todas las reglas preestablecidas, incluida la precisión de los datos, la serialidad y la base de datos posterior puede completar espontáneamente el trabajo programado.

[3] Aislamiento ( Isolation ): la capacidad de la base de datos para permitir que múltiples transacciones simultáneas lean, escriban y modifiquen sus datos al mismo tiempo. El aislamiento puede evitar la inconsistencia de datos causada por la ejecución cruzada cuando se ejecutan múltiples transacciones simultáneamente. El aislamiento de transacciones se divide en diferentes niveles, que incluyen lectura no confirmada (Lectura no confirmada), lectura confirmada (lectura confirmada), lectura repetible (lectura repetible) y serialización (Serializable).

[4] Persistencia ( Durabilidad ): Después de que finaliza el procesamiento de la transacción, la modificación de los datos es permanente, incluso si el sistema falla, no se perderá.

Bajo la configuración predeterminada de la línea de comandos de MySQL, las transacciones se confirman automáticamente, es decir, la operación COMMIT se ejecutará inmediatamente después de que se ejecute la instrucción SQL.

Entonces, para iniciar explícitamente una transacción, debe usar el comando

COMENZAR o INICIAR TRANSACCIÓN, o ejecutar el comando SET AUTOCOMMIT=0

BEGIN 

或 

START TRANSACTION

或者执行命令 

SET AUTOCOMMIT=0

Se usa para deshabilitar la confirmación automática usando la sesión actual

1. Declaración de control de transacciones

Motor de almacenamiento InnoDB: proporciona un conjunto de archivos de registro para registrar actividades transaccionales

Durante la ejecución de la transacción, cada operación DML se registrará en el "archivo de registro de la actividad transaccional"

(1) Iniciar una transacción

BEGIN o START TRANSACTION inicia explícitamente una transacción;

(2) Enviar la transacción

COMMIT también puede usar COMMIT WORK, pero los dos son equivalentes. COMMIT confirma la transacción y hace que todas las modificaciones realizadas en la base de datos sean permanentes

Confirmar una transacción borrará los archivos de registro de las actividades transaccionales y conservará por completo todos los datos en la tabla de la base de datos.

Confirmar una transacción marca el final de la transacción; y es un final exitoso

mysql> select * from user;
Empty set (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into user values(1,'admin');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+----+-------+
| id | name  |
+----+-------+
|  1 | admin |
+----+-------+
1 row in set (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from user;
+----+-------+
| id | name  |
+----+-------+
|  1 | admin |
+----+-------+
1 row in set (0.00 sec)

(3) Revertir la transacción (la reversión solo se puede revertir hasta el último punto de compromiso)

ROLLBACK también puede usar ROLLBACK WORK, pero los dos son equivalentes. La reversión finaliza la transacción del usuario y deshace todas las modificaciones no confirmadas en curso

Revertir una transacción deshace todas las operaciones DML anteriores y borra los archivos de registro para actividades transaccionales

Revertir una transacción marca el final de la transacción. Y es el final de todas las fallas (volver al lugar donde se comprometió la transacción la última vez)

mysql> select * from user;
Empty set (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into user values(1,'admin');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+----+-------+
| id | name  |
+----+-------+
|  1 | admin |
+----+-------+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from user;
Empty set (0.00 sec)

Identificador SAVEPOINT, SAVEPOINT permite crear un punto de guardado en una transacción, puede haber varios SAVEPOINT en una transacción;

El identificador RELEASE SAVEPOINT elimina el punto de guardado de una transacción.Cuando no hay un punto de guardado especificado, la ejecución de esta declaración generará una excepción;

ROLLBACK TO identificador revierte la transacción al punto de marca;

SET TRANSACTION se utiliza para establecer el nivel de aislamiento de la transacción. El motor de almacenamiento InnoDB proporciona niveles de aislamiento de transacciones de LECTURA NO COMPROMETIDA, LECTURA COMPROMETIDA, LECTURA REPETIBLE y SERIALIZABLE.

2. Hay dos métodos principales de procesamiento de transacciones MYSQL:

(1) Use BEGIN, ROLLBACK, COMMIT para lograr

BEGIN comienza una transacción

Reversión de transacciones ROLLBACK

Confirmación de transacción COMMIT

(2) Use directamente SET para cambiar el modo de confirmación automática de MySQL:

SET AUTOCOMMIT=0 Deshabilitar confirmación automática

SET AUTOCOMMIT=1 Activar confirmación automática

3. Aislamiento de transacciones (nivel de aislamiento de transacciones)

(2) Cuatro niveles principales de aislamiento de transacciones

4 niveles de aislamiento de transacciones

1. lectura no confirmada (leer contenido no confirmado): son posibles lecturas sucias, lecturas no repetibles y lecturas fantasma
2. Lectura confirmada ( lectura de contenido confirmado ): evite las lecturas sucias. Pero las lecturas no repetibles y las lecturas fantasma son posibles.
3. Lectura repetible (relegible): Evite las lecturas sucias y las lecturas no repetibles, pero pueden ocurrir lecturas fantasma.
4. Serializable (serializable): Evite las lecturas sucias y no se puede repetir la lectura. lectura fantasma

3 excepciones de lectura

1. Lectura sucia: una transacción lee datos no confirmados de otra transacción, lo que genera resultados de consulta inconsistentes

2. Lectura no repetible: una transacción lee los datos de actualización enviados por otra transacción, lo que genera resultados de consulta incoherentes
.

La lectura no repetible se enfoca en modificar un determinado registro de fila en la actualización, y la lectura fantasma se enfoca en agregar o eliminar filas de registros en la tabla de inserción/eliminación.

Para resolver el problema de la lectura no repetible, solo necesita bloquear las filas que cumplen las condiciones, y para resolver la lectura fantasma, debe bloquear la tabla

Hay 4 niveles de aislamiento entre transacciones y transacciones.

(1) Lectura no confirmada: lectura no confirmada (el nivel de aislamiento más bajo, lectura sin confirmar una transacción)

La transacción A puede leer los datos no confirmados de la transacción B.

El problema con este nivel de aislamiento es:

¡Fenómeno de lectura sucia! (Lectura sucia); decimos que se han leído datos sucios

¡Este nivel de aislamiento es generalmente teórico y la mayoría de los niveles de aislamiento de bases de datos comienzan en la segunda marcha!

(2) Lectura enviada: lectura confirmada ( solo se puede leer después del envío)

La transacción A solo puede leer los datos después de que la transacción B se confirme

Este nivel de aislamiento resuelve el fenómeno de la lectura sucia

Este nivel de aislamiento no puede leer datos repetidamente

Después de que se inicia la transacción, los datos leídos por primera vez son 3, y la transacción actual aún no ha terminado, tal vez cuando se lee la segunda vez, los datos leídos son 4

Este nivel de aislamiento son datos relativamente reales, y los datos que se leen cada vez son absolutamente reales.

El nivel de aislamiento predeterminado de la base de datos de Oracle es: lectura confirmada

(3) Lectura repetible: lectura repetible ( no puede leerlo después de enviarlo y siempre leerá los datos cuando acaba de iniciar la transacción)

Después de que se abre la transacción A, sin importar cuánto tarde, los datos leídos en la transacción A son consistentes cada vez. Aunque la transacción B ha modificado y confirmado los datos, los datos leídos por la transacción A no han cambiado, lo cual es una lectura repetible.

La lectura repetible resuelve los datos de lectura no repetibles

Las lecturas fantasma ocurren en lecturas repetibles. Cada lectura de datos es una ilusión. ¡No lo suficientemente real!

El nivel de aislamiento de transacción predeterminado en mysql es lectura repetible

(4) Serialización/serialización: serializable (el nivel de aislamiento más alto)

Este es el nivel de aislamiento más alto y el menos eficiente. resolvió todos los problemas

¡Este nivel de aislamiento significa que las transacciones están en cola y no pueden ser simultáneas! Similar a la sincronización sincronizada de subprocesos (sincronización de transacciones)

Los datos leídos cada vez son los más auténticos y la eficiencia es la más baja.

Pruebas de nivel de aislamiento de transacciones

Ver el nivel de aislamiento actual a nivel de sesión

mysql> SELECT @@tx_isolation;

或:

mysql> SELECT @@session.tx_isolation;

Ver el nivel de aislamiento actual a nivel global

mysql> SELECT @@global.tx_isolation;

El nivel de aislamiento predeterminado en MySQL es REPEATABLE-READ

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set, 1 warning (0.00 sec)

mysql> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| REPEATABLE-READ        |
+------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ       |
+-----------------------+
1 row in set, 1 warning (0.00 sec)

Modificar el nivel de aislamiento de transacciones

set global transaction isolation level 隔离级别;

如:

set global transaction isolation level read uncommitted;

Tomando como ejemplo la tabla de usuarios, se abren dos ventanas de comandos de DOS al mismo tiempo;

Después de cada modificación del nivel de aislamiento, salga de MySQL y vuelva a entrar

(1) lectura no confirmada         lectura no confirmada

验证:read uncommited
mysql> set global transaction isolation level read uncommitted;

事务A			        事务B
-----------------------------------------------------------
use mydb;
					    use mydb;
start transaction;
select * from user;
						start transaction;
						insert into user values('admin');
select * from user;
//此时事务B没有提交,查询事务A中就已经有数据

(2) lectura comprometida         lectura comprometida


验证:read committed
mysql> set global transaction isolation level read committed;

事务A					事务B
-------------------------------------------------------
use mydb;
						use mydb;
start transaction;
						start transaction;
select * from user;
						insert into user values('admin');
select * from user;
						commit;
select * from user;
//事务B提交之后,查询事务A中才有数据

(3) lectura repetible         lectura repetible

验证:repeatable read
mysql> set global transaction isolation level repeatable read;

事务A					    事务B
--------------------------------------------------------------------------------
use mydb;
							use mydb;
start transaction;
							start transaction;
//假设此时事务A中只有一条数据
select * from user;
							insert into user values('admin');
							commit;
                            select * from user;
                            //事务B中插入很多条数据,或者删除数据
select * from user;
//事务A中查看依然只有一条数据

La transacción A consulta solo una parte de los datos antes de operar los datos en la transacción B, y luego, sin importar si se inserta o elimina en la transacción B, después del envío de la confirmación, siempre habrá una parte de los datos en la transacción A.

(4)         serialización serializable / serialización

验证:serializable
mysql> set global transaction isolation level serializable;

事务A							  事务B
----------------------------------------------------
use mydb;
								  use mydb;
start transaction;
								  start transaction;
select * from user;
insert into user values('admin');
								  select * from t_user;
                                  //此时光标一直停留在此处,等待事务A的结束
commit;
//如果此时事务A提交了,             则事务B立马返回查询结果
 

En este momento, el cursor de la ventana de DOS en la transacción B permanece aquí, esperando el final de la transacción A 

Si la transacción A se confirma en este momento, la transacción B devuelve el resultado de la consulta inmediatamente. 

(3) Siete comportamientos de comunicación de los asuntos. 

1. PROPAGATION_REQUIRED : si no hay una transacción actualmente, cree una nueva transacción, si hay una transacción actualmente, únase a la transacción, esta configuración es la configuración más utilizada

2. PROPAGATION_NESTED : Si hay una transacción actual, se ejecutará en una transacción anidada. Si no hay ninguna transacción actualmente, haga algo similar a PROPAGATION_REQUIRED

3. PROPAGATION_SUPPORTS : Admite la transacción actual, si hay una transacción actualmente, únete a la transacción, si no hay ninguna transacción actualmente, ejecútala como si no fuera una transacción

4. PROPAGATION_MANDATORY : admitir la transacción actual, si hay una transacción actualmente, unirse a la transacción, si no hay ninguna transacción actualmente, lanzar una excepción

5. PROPAGATION_REQUIRES_NEW : admite la transacción actual, crea una nueva transacción, no importa si hay una transacción actual o no, crea una nueva transacción

6. PROPAGATION_NOT_SUPPORTED : realizar operaciones de forma no transaccional. Si hay una transacción actual, suspender la transacción actual

7. PROPAGATION_NEVER : Ejecutar de manera no transaccional, si hay una transacción actual, se lanzará una excepción

2. Motor de almacenamiento

1. Motor de almacenamiento

El motor de almacenamiento es la organización de software subyacente de la base de datos, y el sistema de gestión de bases de datos (DBMS) utiliza el motor de datos para crear, consultar, actualizar y eliminar datos. Diferentes motores de almacenamiento proporcionan diferentes mecanismos de almacenamiento, técnicas de indexación, niveles de bloqueo y otras funciones, y también se pueden obtener funciones específicas utilizando diferentes motores de almacenamiento. Muchos sistemas de administración de bases de datos diferentes ahora admiten muchos motores de datos diferentes.

Motor de almacenamiento es un término único en MySQL, no en otras bases de datos. (Oracle tiene, pero no se llama este nombre)

2. Ver los comandos del motor de almacenamiento

 show engines \G

Salida nueve motores

mysql> show engines \G;
*************************** 1. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
9 rows in set (0.00 sec)

 Las diferentes versiones de mysql admiten diferentes situaciones; se admiten nueve motores de almacenamiento y 5.5.36 admite ocho

3. Designe el motor para la creación de tablas

//建表时指定存储引擎,以及字符编码方式。

	create table table表名(
		id int primary key,
		name varchar(255)
	)engine=InnoDB default charset=utf8;

ENGINE para especificar el motor de almacenamiento
CHARSET para especificar el método de codificación de caracteres de esta tabla 

El motor de almacenamiento predeterminado de mysql es: InnoDB
El método de codificación de caracteres predeterminado de mysql es: utf8

4. Motores de uso común en MySQL

(1) motor de almacenamiento MyISAM

MyISAM se basa en el motor de almacenamiento ISAM y lo amplía. Es uno de los motores de almacenamiento más utilizados en web, almacenamiento de datos y otros entornos de aplicaciones. MyISAM tiene una alta velocidad de inserción y consulta, pero no admite transacciones ni claves foráneas.

Las tablas que administra tienen las siguientes características:
        Se utilizan tres archivos para representar cada tabla:
            archivo de formato: almacena la definición de la estructura de la tabla (mytable.frm)
            archivo de datos: almacena el contenido de las filas de la tabla (mytable.MYD)
            archivo de índice: almacena los índices en la tabla (mytable.MYI): El índice es un directorio de un libro, un mecanismo para reducir el rango de escaneo y mejorar la eficiencia de las consultas.
        Se puede convertir en una tabla comprimida de solo lectura para ahorrar espacio

Nota:

Para una tabla, siempre que sea una clave principal o un índice se crea automáticamente en un campo con una restricción única

Características del motor de almacenamiento MyISAM:
[1] Se puede convertir en una tabla comprimida de solo lectura para ahorrar espacio
[2] MyISAM no admite el mecanismo de transacción y tiene poca seguridad.

(2) motor de almacenamiento InnoDB

Después de MySQL5.5, el motor de almacenamiento InnoDB se usa de manera predeterminada

InnoDB admite transacciones y admite el mecanismo de recuperación automática después del bloqueo de la base de datos.La
característica principal del motor de almacenamiento de InnoDB es: muy seguro

Las tablas que administra tienen las siguientes características principales:
        – Cada tabla InnoDB se representa en el directorio de la base de datos como un archivo en formato .frm
        – Table space de InnoDB tablespace se utiliza para almacenar el contenido de la tabla (table space es un nombre lógico. Table space almacena datos + índice.)

        – Proporcionar un conjunto de archivos de registro para registrar actividades transaccionales
        – Admite el procesamiento de transacciones con COMMIT (commit), SAVEPOINT y ROLLBACK (rollback)
        – Proporciona compatibilidad total con ACID
        – Proporciona recuperación automática después de fallas del servidor MySQL
        – Versión múltiple (MVCC) y fila- bloqueo de nivel
        : admite claves foráneas e integridad referencial, incluidas eliminaciones y actualizaciones en cascada

La característica más importante de InnoDB es admitir transacciones:
        garantizar la seguridad de los datos.

        La eficiencia no es muy alta y no se puede comprimir, no se puede convertir a solo lectura y no se puede ahorrar espacio de almacenamiento muy bien.

(3) motor de almacenamiento de MEMORIA

Los datos de la tabla que utilizan el motor de almacenamiento MEMORY se almacenan en la memoria y la longitud de la fila es fija.Estas
    dos características hacen que el motor de almacenamiento MEMORY sea muy rápido.

Las tablas gestionadas por el motor de almacenamiento MEMORY tienen las siguientes características:
        – Dentro del catálogo de la base de datos, cada tabla está representada por un archivo en formato .frm.
        – Los datos de la tabla y los índices se almacenan en la memoria. (¡El propósito es una consulta rápida, rápida!)
        – Mecanismo de bloqueo a nivel de tabla.
        – No puede contener campos de TEXTO o BLOB.

El motor de almacenamiento MEMORY se conocía anteriormente como el motor HEAP.

Ventajas del motor MEMORY: La eficiencia de consulta es la más alta. No hay necesidad de interactuar con el disco duro.
Desventajas del motor MEMORY: no es seguro y los datos desaparecen después del apagado. Debido a que los datos y el índice están en la memoria,
la memoria se recupera directamente; la velocidad de la luz y la corriente; el disco duro tiene un comportamiento mecánico y los datos se leen cuadro por cuadro.

La diferencia es la siguiente:

Supongo que te gusta

Origin blog.csdn.net/MinggeQingchun/article/details/122366499
Recomendado
Clasificación