¿Cuál es la diferencia entre hacer:
START TRANSACTION ... COMMITO haciendo:
BEGIN ... END¿Se confirma automáticamente el último, o cuál podría ser un ejemplo práctico del uso de uno de los otros?
Tanto en MySQL 5.7 como en MySQL 8, BEGIN y END es lo mismo que en T-SQL y representa una "declaración compuesta" también conocida como "un bloque de código", al igual que las llaves en C, Java, C#, etc.
Sin embargo, la palabra clave BEGIN también está sobrecargada (confusamente) como un alias para BEGIN WORK y START TRANSACTION , y su semántica depende de si se usan dentro de un programa almacenado o no:
Dentro de todos los programas almacenados (procedimientos y funciones almacenados, disparadores y eventos), el analizador trata
BEGIN [WORK]como el comienzo de un bloqueBEGIN ... END. Comience una transacción en este contexto conSTART TRANSACTIONen su lugar.
Asi que:
START TRANSACTIONBEGIN :BEGIN por sí solo marca el inicio de una declaración compuesta. Solo puede usar START TRANSACTION para iniciar una transacción.BEGIN WORK ). Pero es tonto y confuso usarlo de esta manera, así que evítelo.BEGIN WORK :START TRANSACTION . Evitaría usar esto por completo para evitar confusiones.