mysql prepare語句使用

2022-07-27 08:27:12 字數 3092 閱讀 2389

語法 

prepare statement_name from sql_text /*

定義*/

execute statement_name [

using variable [,variable...

]] /*

執行預處理語句

*/deallocate

prepare statement_name /*

刪除定義

*/

mysql>

prepare prod from "insert

into examlple values

(?,?)";

mysql

>

set@p='

1'; mysql

>

set@q='

2'; mysql

>

execute prod using @p,@q

; mysql

>

set@name='

3'; mysql

>

execute prod using @p,@name

; mysql

>

deallocate

prepare prod;

1.用變數做表名: 簡單的用set或者declare語句定義變數,然後直接作為sql的表名是不行的,mysql會把變數名當作表名。在其他的sql資料庫中也是如此,mssql的解決方法是將整條sql語句作為變數,其中穿插變數作為表名,然後用sp_executesql呼叫該語句。 這在mysql5.0之前是不行的,5.0之後引入了乙個全新的語句,可以達到類似sp_executesql的功能(僅對procedure有效,function不支援動態查詢):

prepare stmt_name from

preparable_stmt;

execute stmt_name [

using @var_name [, @var_name

]...];

prepare stmt_name;

為了有乙個感性的認識, 

下面先給幾個小例子:

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;

如果你的mysql 版本是 5.0.7 或者更高的,你還可以在 limit 子句中使用它,示例如下: 

mysql>

set@a

=1;mysql>

prepare stmt from "select

*from

tbl limit ?";

mysql

>

execute stmt using @a

; mysql

>

set@skip

=1; set

@numrows=5

; mysql

>

prepare stmt from "select

*from

tbl limit ?, ?";

mysql

>

execute stmt using @skip, @numrows;

使用 prepare 的幾個注意點: 

a:prepare stmt_name from preparable_stmt;預定義乙個語句,並將它賦給 stmt_name ,tmt_name 是不區分大小寫的。 

b: 即使 preparable_stmt 語句中的 ? 所代表的是乙個字串,你也不需要將 ? 用引號包含起來。 

c: 如果新的 prepare 語句使用了乙個已存在的 stmt_name ,那麼原有的將被立即釋放! 即使這個新的 prepare 語句因為錯誤而不能被正確執行。 

d: prepare stmt_name 的作用域是當前客戶端連線會話可見。 

e: 要釋放乙個預定義語句的資源,可以使用 deallocate prepare 句法。 

f: execute stmt_name 句法中,如果 stmt_name 不存在,將會引發乙個錯誤。 

g: 如果在終止客戶端連線會話時,沒有顯式地呼叫 deallocate prepare 句法釋放資源,伺服器端會自己動釋放它。 

h: 在預定義語句中,create table, delete, do, insert, replace, select, set, update, 和大部分的 show 句法被支援。 

i: prepare 語句不可以用於儲存過程,自定義函式!但從 mysql 5.0.13 開始,它可以被用於儲存過程,仍不支援在函式中使用! 

SQL SELECT DISTINCT 語句使用

在表中,可能會包含重複值。這並不成問題,不過,有時您也許希望僅僅列出不同 distinct 的值。select distinct 列名稱 from 表名稱 如果要從 company 列中選取所有的值,我們需要使用 select 語句 select company from orderscompany...

Hive之Show Describe語句使用

1.表及分割槽格式化資訊 包含儲存位置 分隔符格式 建立時間等資訊。describe formatted table name partition partition desc describe formatted recommend data view partition pt day 2018 ...

Data語句AsEnumerable 的使用

listcouplebacklist at new list var retdata retdatalist.asenumerable select t new tolist retdatalist 為獲取的集合 asenumerable 作用在於,新建集合 public class coupleb...