V MySQL 5.7 a MySQL 8 BEGIN
a END
je stejný jako v T-SQL a představuje "složený příkaz" také známý jako "blok kódu", stejně jako složené závorky v C, Java, C# atd.
- MySQL 5.7:https://dev.mysql .com/doc/refman/5.7/en/begin-end.html
- MySQL 8.0:https://dev.mysql .com/doc/refman/8.0/en/begin-end.html
Nicméně BEGIN
klíčové slovo je také (zmateně) přetížené jako alias pro BEGIN WORK
a START TRANSACTION
a jejich sémantika závisí na tom, zda jsou používány uvnitř uloženého programu nebo ne:
Takže:
START TRANSACTION
- Vždy zahájí transakci. Tuto syntaxi byste měli preferovat.
BEGIN
:- Pokud se nacházíte v uložené proceduře, funkci, spouštěči nebo události, pak
BEGIN
sám o sobě označuje začátek složeného příkazu. Můžete použít pouzeSTART TRANSACTION
k zahájení transakce. - Pokud přímo spouštíte SQL proti MySQL, pak to také spustí transakci (jak je interpretováno jako
BEGIN WORK
). Ale je to hloupé a matoucí používat to tímto způsobem, takže se tomu vyhněte.
- Pokud se nacházíte v uložené proceduře, funkci, spouštěči nebo události, pak
BEGIN WORK
:- Toto je alias pro
START TRANSACTION
. Vyhnul bych se tomu úplně, abych zabránil zmatkům.
- Toto je alias pro