I have two questions about Compound-Statement and Transactions in MySQL.
FIRST:
There are two notes in MySQL Manual:
Note
Within all stored programs, the parser treats BEGIN [WORK] as the beginning of a BEGIN ... END block. To begin a transaction in this context, use START TRANSACTION instead.
Note
Within all stored programs (stored procedures and functions, triggers, and events), the parser treats BEGIN [WORK] as the beginning of a BEGIN ... END block. Begin a transaction in this context with START TRANSACTION instead.
I can't understand what exactly is meant. They mean that I have to put START TRANSACTION instead of BEGIN or right after BEGIN?
// 1st variant:
BEGIN
START TRANSACTION
COMMIT
END
// 2nd variant:
START TRANSACTION
COMMIT
END
Which one is the right way, 1st variant or 2nd variant?
SECOND:
I don't want to create a Stored Procedure or Function. I just want to create a Compound-Statement Block with a loop inside it in the general flow, like this:
USE 'someDb';
START TRANSACTION
... create table statement
... insert statement
// now I want to implement some insert/select statements using loop, I do as follows:
DELIMITER $
BEGIN
SET @n = 1, @m = 2;
lab1: LOOP
... some insert, select statements here
END LOOP lab1;
END $
DELIMITER ;
END
COMMIT
Is it possible such kind of structure? Because I have an error thrown:
Query: BEGIN SET @n = 1, @m = 2; lab1: LOOP SELECT ...
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @n = 1, @m = 2;
lab1: LOOP SELECT ...
My questions are:
- Is it allowed to use
BEGIN...ENDjust in general flow without creating and using Stored Procedures or Functions? Is it allowed to use
BEGIN...ENDinside ofSTART TRANSACTION...COMMITor I have to putSTART TRANSACTION...COMMITinside ofBEGIN...END?BEGIN START TRANSACTION COMMIT END // vs. START TRANSACTION BEGIN END COMMITDo I by all means have to use
BEGIN...ENDif I want to use onlyLOOP? May I just useLOOPsyntax without startingBEGIN...END? The only example in the manual forLOOPis this:CREATE PROCEDURE doiterate(p1 INT) BEGIN label1: LOOP ...