2011-11-16 86 views
28

我們有一個簡單的sql腳本,需要針對MySQL數據庫執行,我們希望在腳本的進度上打印日誌語句(例如,將10條記錄插入到foo中或刪除來自欄的5條記錄)。我們如何做到這一點?如何在執行sql腳本時回顯打印語句

  1. 我想知道用於插入/更新/刪除語句的語法。
  2. 我如何知道受我的聲明影響的行數。
  3. 我還想使用腳本頂部的ECHO off或on命令來控制打印它們。
  4. 該腳本應該可以跨Windows/Linux操作系統移植。

回答

32

這會給你是一個SQL腳本中簡單的打印:

select 'This is a comment' AS ''; 

另外,如果在updatedeleteinsert命令之後直接使用,則會爲您的狀態更新添加一些動態數據:

select concat ("Updated ", row_count(), " rows") as ''; 
+0

插入,更新,刪除命令的語法是否相同? – Joe

+0

我一直在使用它。它工作正常。 – cherouvim

+0

如果必須從某個更新/插入/刪除語句中捕獲受影響的行數,我該怎麼辦? – Joe

1

您可以使用打印-p - 在腳本執行此示例:

#!/bin/ksh 
mysql -u username -ppassword -D dbname -ss -n -q |& 
print -p -- "select count(*) from some_table;" 
read -p get_row_count1 
print -p -- "select count(*) from some_other_table;" 
read -p get_row_count2 
print -p exit ; 
# 
echo $get_row_count1 
echo $get_row_count2 
# 
exit 
+3

我懷疑很多人安裝了ksh。 – Blender

+0

我還應該提到,此腳本可以從Windows或Linux環境運行 – Joe

5

只是爲了使你的腳本更具可讀性,也許用這個PROC:

DELIMITER ;; 

DROP PROCEDURE IF EXISTS printf; 
CREATE PROCEDURE printf(thetext TEXT) 
BEGIN 

    select thetext as ``; 

END; 

;; 

DELIMITER ; 

現在,你可以這樣做:

call printf('Counting products that have missing short description'); 
14

我不知道如果這能幫助:

假設您想要從命令行運行sql腳本(test.sql):

mysql < test.sql 

和TEST.SQL的內容是這樣的:

SELECT * FROM information_schema.SCHEMATA; 
\! echo "I like to party..."; 

控制檯將顯示類似:

CATALOG_NAME SCHEMA_NAME   DEFAULT_CHARACTER_SET_NAME  
     def information_schema  utf8 
     def mysql     utf8 
     def performance_schema  utf8 
     def sys     utf8 
I like to party... 

這樣你就可以只使用執行SQL語句的內部終端命令,提供該腳本通過命令行運行。

\! #terminal_commands