This transaction holds a clone of the Arc to the connection and executes
transaction operations by acquiring the mutex lock for each operation.
The transaction must be committed or rolled back explicitly.
If a transaction is dropped without calling commit() or rollback(),
the underlying MySQL transaction will remain open until the connection
is closed or a new transaction is started. This is because Rust’s Drop
trait cannot perform async operations.
Always explicitly call commit() or rollback() before dropping.
Note: The lifetime parameter is required by the Connection trait but the
actual implementation holds an owned Arc, so the transaction can outlive
the reference to SharedMySqlConnection if needed.