各種型別變數的定義以及賦值

2021-10-23 17:26:17 字數 4743 閱讀 6426

區域性變數一般用在sql語句塊中,比如儲存過程的begin/end。其作用域僅限於該語句塊,在該語句塊執行完畢後,區域性變數就消失了。declare語句專門用於定義區域性變數,可以使用default來說明預設值。set語句是設定不同型別的變數,包括會話變數和全域性變數。  

區域性變數定義語法形式

declare var_name [, var_name]... data_type [ default value ];
例如在begin/end語句塊中新增如下一段語句,接收函式傳進來的a/b變數然後相加,通過set語句賦值給c變數。  

set語句語法形式set var_name=expr [, var_name=expr]...; set語句既可以用於區域性變數的賦值,也可以用於使用者變數的申明並賦值。

declare c int default 0;

set c=a+b; #賦值,必須要有set

select c as c;

或者用select …. into…形式賦值

select into 語句句式:select col_name[,...] into var_name[,...] table_expr [where...];#很有用

例子:

declare v_employee_name varchar(100);

declare v_employee_salary decimal(8,4);

select employee_name, employee_salary

into v_employee_name, v_employee_salary

from employees

where employee_id=1;

mysql中使用者變數不用事前申明,在用的時候直接用「@變數名」使用就可以了。  

第一種用法:set @num=1; 或set @num:=1; //這裡要使用set語句建立並初始化變數,直接使用@num變數  

第二種用法:select @num:=1; 或 select @num:=欄位名 from 表名 where ……,  

1)、select語句一般用來輸出使用者變數,比如select @變數名,用於輸出資料來源不是**的資料。對於區域性變數(無@)則無效,而應該使用select into形式  

注意上面兩種賦值符號,使用set時可以用「=」或「:=」,但是使用select時必須用「:=賦值」。因為在select語句中,」=」號declare語句專門用於定義區域性變數。set語句是設定不同型別的變數,包括會話變數和全域性變數。

2)、使用者變數與資料庫連線有關,在連線中宣告的變數,在儲存過程中建立了使用者變數後一直到資料庫例項接斷開的時候,變數就會消失。

3)、在此連線中宣告的變數無法在另一連線中使用。

4)、使用者變數的變數名的形式為@varname的形式。

5)、名字必須以@開頭。

6)、宣告變數的時候需要使用set語句,比如下面的語句宣告了乙個名為@a的變數。

set @a = 1;

# 宣告乙個名為@a的變數,並將它賦值為1,mysql裡面的變數是不嚴格限制資料型別的,它的資料型別根據你賦給它的值而隨時變化 。

7)、我們還可以使用select 語句為變數賦值 。  

比如:

set @name = '';

select @name:=password from user limit 0,1;#從資料表中獲取一條記錄password欄位的值給@name變數。在執行後輸出到查詢結果集上面。

(注意等於號前面有乙個冒號,後面的limit 0,1是用來限制返回結果的,表示可以是0或1個。)  

如果直接寫:select @name:=password from user;

如果這個查詢返回多個值的話,那@name變數的值就是最後一條記錄的password欄位的值 。  

舉乙個儲存過程中使用變數的例子:

begin

#routine body goes here...

#select c as c;

declare c int default 0;

set @var1=143; #定義乙個使用者變數,並初始化為143

set @var2=34;

set c=a+b;

set @d=c;

select @sum:=(@var1+@var2) as sum, @dif:=(@var1-@var2) as dif, @d as c;#使用使用者變數。@var1表示變數名

set c=100;

select c as ca;

end

在查詢中執行下面語句段

call `order`(12,13);  #執行上面定義的儲存過程

select @var1;  #看定義的使用者變數在儲存過程執行完後,是否還可以輸出,結果是可以輸出使用者變數@var1,@var2兩個變數的。

select @var2;

在執行完order儲存過程後,在儲存過程中新建的var1,var2使用者變數還是可以用select語句輸出的,但是儲存過程裡面定義的區域性變數c不能識別。

伺服器為每個連線的客戶端維護一系列會話變數。在客戶端連線資料庫例項時,使用相應全域性變數的當前值對客戶端的會話變數進行初始化。設定會話變數不需要特殊許可權,但客戶端只能更改自己的會話變數,而不能更改其它客戶端的會話變數。會話變數的作用域與使用者變數一樣,僅限於當前連線。當當前連線斷開後,其設定的所有會話變數均失效。

設定會話變數有如下三種方式更改會話變數的值:

set session var_name = value;

set @@session.var_name = value;

set var_name = value; #預設session關鍵字預設認為是session

檢視所有的會話變數

show session variables;

檢視乙個會話變數也有如下三種方式:

select @@var_name;

select @@session.var_name;

show session variables like "%var%";

全域性變數影響伺服器整體操作。當伺服器啟動時,它將所有全域性變數初始化為預設值。這些預設值可以在選項檔案中或在命令列中指定的選項進行更改。要想更改全域性變數,必須具有super許可權。全域性變數作用於server的整個生命週期,但是不能跨重啟。即重啟後所有設定的全域性變數均失效。要想讓全域性變數重啟後繼續生效,需要更改相應的配置檔案。

要設定乙個全域性變數,有如下兩種方式:

set global var_name = value; //注意:此處的global不能省略。根據手冊,set命令設定變數時若不指定global、session或者local,預設使用session

set @@global.var_name = value; //同上

檢視所有的全域性變數  

show global variables;
要想檢視乙個全域性變數,有如下兩種方式:

select @@global.var_name;

show global variables like '%var%';

mysql儲存過程中,定義變數有兩種方式:

1.使用set或select直接賦值,變數名以 @ 開頭.

例如:set @var=1;

可以在乙個會話的任何地方宣告,作用域是整個會話,稱為會話變數。

2.以 declare 關鍵字宣告的變數,只能在儲存過程中使用,稱為儲存過程變數,例如:

declare var1  int default 0;  

主要用在儲存過程中,或者是給儲存傳引數中。

兩者的區別是:

在呼叫儲存過程時,以declare宣告的變數都會被初始化為 null。而會話變數(即@開頭的變數)則不會被再初始化,在乙個會話內,只須初始化一次,之後在會話內都是對上一次計算的結果,就相當於在是這個會話內的全域性變數。

在儲存過程中,使用動態語句,預處理時,動態內容必須賦給乙個會話變數。

例:

set @v_sql= sqltext;

prepare stmt from @v_sql;

execute stmt;

deallocate prepare stmt;

mysql> set @c = "c1";

query ok, 0 rows affected (0.00 sec)

mysql> set @s = concat("select ", @c, " from t");

query ok, 0 rows affected (0.00 sec)

mysql> prepare stmt from @s;

query ok, 0 rows affected (0.04 sec)

statement prepared

mysql> execute stmt;

+----+

| c1 |

+----+

| 0 |

+----+

| 1 |

+----+

2 rows in set (0.00 sec)

mysql> deallocate prepare stmt;

query ok, 0 rows affected (0.00 sec)

各種型別的轉換

int i 100 long l 2001 float f 300.2 double d 12345.119 char username csdn char temp 200 char buf cstring str variant t v1 bstr t v2 一 其它資料型別轉換為字串 二 字串...

各種型別的轉換

1.std string轉換成qstring string std str abc qstring q str qstring fromstdstring std str 2.qstring轉換成std string qstring q str abc string q str.tostdstrin...

各種型別的長度

這個要看字元數是什麼資料型別,可以用sizeof 型別 操作符來測試位元組數。1 英文本母 如果是char 型,那麼是占用1個位元組,8位。如果是string型,應該是兩個位元組,16位,因為末尾還有個 0字元。比如 char c a 它占用乙個字元 char c a 占用兩個。char c abc...