mysql的set和declare定義變數的區別

2021-07-24 17:23:47 字數 863 閱讀 1428

1. 型別宣告

set 不需要宣告型別,declare必須指定型別

2. 位置

set 位置可以任意, declare 必須在復合語句的開頭,在任何其它語句之前

3.作用範圍

declare 定義的變數的作用範圍是begin … end塊內,只能在塊中使用。

set 定義的變數使用者變數,作用範圍是會話/全域性

如set @var=12的定義,則var的作用域為整個會話,為會話變數.

如set global var=12的定義,則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中的enum和set型別

mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,不同的是set可以取多個值,enum只能取乙個 create table 20121101 t id int 11 not null auto increment,name varchar 20 not null,c...

mysql中的enum和set型別

mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,不同的是set可以取多個值,enum只能取乙個 create table 20121101 t id int 11 not null auto increment,name varchar 20 not null,c...

mysql中的enum和set型別

mysql中的enum和set型別 mysql中的enum和set其實都是string型別的而且只能在指定的集合裡取值,不同的是set可以取多個值,enum只能取乙個 sql create table 20121101 t id int 11 not null auto increment,name...