今天面試官問道:mysql(或者pg)為啥要使用prepare?
答:
· 在編代碼前,您想要測試預制語句在您的應用程序中運行得如何。或者也許一個應用程序在執(zhí)行預制語句時有問題,您想要確定問題是什么。
· 您想要創(chuàng)建一個測試案例,該案例描述了您使用預制語句時出現(xiàn)的問題,以便您編制程序錯誤報告。
· 您需要使用預制語句,但是您無法使用支持預制語句的編程API。
prepare的sql格式為:
PREPARE stmt_name FROM preparable_stmt;
EXECUTE stmt_name [USING @var_name [, @var_name] ...];
{DEALLOCATE | DROP} PREPARE stmt_name;
用例1:
mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> SET @a = 3;
mysql> SET @b = 4;
mysql> EXECUTE stmt1 USING @a, @b;
+------------+
| hypotenuse |
+------------+
| 5 |
+------------+
mysql> DEALLOCATE PREPARE stmt1;
第二個例子是相似的,不同的是提供了語句的文本,作為一個用戶變量:
mysql> SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> PREPARE stmt2 FROM @s;
mysql> SET @a = 6;
mysql> SET @b = 8;
mysql> EXECUTE stmt2 USING @a, @b;
+------------+
| hypotenuse |
+------------+
| 10 |
+------------+
mysql> DEALLOCATE PREPARE stmt2;
預制語句的范圍是客戶端會話。在此會話內(nèi),語句被創(chuàng)建。其它客戶端看不到它。