MySQL是否有办法将调试消息打印到stdout,temptable或logfile?类似的东西:
print
Oracle中的DBMS_OUTPUT.PUT_LINE
答案 0 :(得分:93)
选项1:将其放入您的程序中,以便在stdout运行时将'comment'打印出来。
SELECT 'Comment';
选项2:将此项放入您的程序中,将变量打印到stdout:
declare myvar INT default 0;
SET myvar = 5;
SELECT concat('myvar is ', myvar);
当程序运行时,会将myvar is 5
打印到stdout。
选项3,创建一个包含一个名为tmptable
的文本列的表,并将消息推送到该表:
declare myvar INT default 0;
SET myvar = 5;
insert into tmptable select concat('myvar is ', myvar);
你可以把上面的内容放在一个存储过程中,所以你要编写的就是:
CALL log(concat('the value is', myvar));
这节省了一些按键。
选项4,将消息记录到文件
select "penguin" as log into outfile '/tmp/result.txt';
此命令有很多限制。您只能将outfile写入磁盘上为“其他”组创建和写入权限的区域。它应该将它保存到/ tmp目录。
一旦你编写了outfile,你就无法覆盖它。这是为了防止破解者只是因为他们有SQL注入你的网站并且可以在MySQL中运行任意命令而使你的盒子生根。
答案 1 :(得分:6)
一种解决方法是使用select而不使用任何其他子句。
答案 2 :(得分:5)
我通常使用存储过程创建日志表以记录它。从开发中的过程调用日志记录过程。
在同一个问题上看other posts,这似乎是一种常见做法,尽管有一些替代方案。
答案 3 :(得分:1)
这是我调试的方式:
CREATE PROCEDURE procedure_name()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SHOW ERRORS; --this is the only one which you need
ROLLBACK;
END;
START TRANSACTION;
--query 1
--query 2
--query 3
COMMIT;
END
如果查询1、2或3将引发错误,则HANDLER将捕获SQLEXCEPTION 并且SHOW ERRORS将为我们显示错误。注意:SHOW ERRORS应该是HANDLER中的第一条语句。
答案 4 :(得分:0)
快速打印内容的方法是:
select '** Place your mesage here' AS '** DEBUG:';