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...