我有两个关于MySQL中的复合语句和事宜的题目.
第一:
MySQL手册中有两个注释:
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.
我无法领略毕竟是什么意思.他们的意思是我必需在BEGIN之后可能在BEGIN之后当纵然用START TRANSACTION而不是BEGIN?
// 1st variant:
BEGIN
START TRANSACTION
COMMIT
END
// 2nd variant:
START TRANSACTION
COMMIT
END
哪一种是正确的方法,第一种变体或第二种变体?
第二:
我不想建设存储进程或函数.我只想在通例流程中建设一个带有轮回的Compound-Statement Block,如下所示:
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
这种布局有也许吗?由于我抛出了一个错误:
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 ...
我的题目是:
>是否应承在一样平常流程中行使BEGIN … END而不建设和行使存储进程或函数? >是否应承在START TRANSACTION … COMMIT中行使BEGIN … END可能我必需将START TRANSACTION … COMMIT置于BEGIN … END之内?
BEGIN
START TRANSACTION
COMMIT
END
// vs.
START TRANSACTION
BEGIN
END
COMMIT
>假如我只想行使LOOP,我是否必需行使BEGIN … END?我可以在不启动BEGIN … END的环境下行使LOOP语法吗? LOOP手册中独一的例子是:
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
...
最佳谜底
>
Is it allowed to use BEGIN…END just in general flow without creating and using Stored Procedures or Functions?
否:复合语句只能在存储措施的主体中行使. >
Is it allowed to use BEGIN...END inside of START TRANSACTION...COMMIT or I have to put START TRANSACTION...COMMIT inside of BEGIN...END ?
开始买卖营业;和COMMIT;是单独的告诉.假如但愿存储措施的主体包括多个语句,则必要将这些语句包括在某种复合语句块中,譬喻BEGIN … END(相同于在括号中包括一个语句块{.. .在相同C说话中).
也就是说,你可以有一个存储的措施,它只包括单个语句START TRANSACTION;可能COMMIT; – 这样的措施不必要任何复合语句块,只是别分开始新的/提交当前事宜.
在存储措施之外,不应承行使复合语句块,您可以发出START TRANSACTION;和COMMIT;声明为&在必要的时辰. >
Do I by all means have to use BEGIN...END if I want to use only LOOP ? May I just use LOOP syntax without starting BEGIN...END ?
LOOP也是复合语句块,仅在存储进程中有用.没有须要将LOOP块包括在BEGIN … END块内,尽量凡是是这样(不然很难执行任何所需的轮回初始化).
在您的环境下,您显然但愿从轮回布局中将数据插入表中,您将必要:
>界说一个行使LOOP的存储措施; >迭代外部措施中的轮回,该轮回在每次迭代时执行数据库查询;要么 >按照SQL可以直接操纵的荟萃从头界说逻辑.
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|