一、變量和基本數(shù)據(jù)類型
1、變量
-
用戶自定義變量
-
局部變量
聲明: 用戶自定義變量的聲明方法形如:@var_name,其中變量名稱由字母、數(shù)字、“.”、“_”和“$”組成。當(dāng)然,在以字符串或者標(biāo)識符引用時(shí)也可以包含其他字符(例如:@'my-var',@"my-var",或者@
my-var
)變量的賦值方式:一種是直接用"="號,另一種是用":="號。
1 )使用set命令對用戶變量進(jìn)行賦值時(shí),兩種方式都可以使用.
2 )當(dāng)使用select語句對用戶變量進(jìn)行賦值時(shí),只能使用:=方式,因?yàn)樵趕elect語句中,=號被看作是比較操作符。定義:在sql語句塊中有效的變量,例如在函數(shù)和存儲過程的begin和end中的語句塊。
use `DataBase_name`; set FOREIGN_KEY_CHECKS = 0;(注:取消外鍵約束) drop procedure if exists countLines;(注:如果存在存儲過程 countLines,就刪除它。) create procedure countLines(in a int,in b int) begin declare c int default 0; set c = a + b; select c as c; end;
-
會(huì)話變量
- 定義:會(huì)話變量即為服務(wù)器為每個(gè)客戶端連接維護(hù)的變量。在客戶端連接時(shí),使用相應(yīng)全局變量的當(dāng)前值對客戶端的回話變量進(jìn)行初始化。設(shè)置會(huì)話變量不需要特殊權(quán)限,但客戶端只能更改自己的會(huì)話變量。其作用域與生命周期均限于當(dāng)前客戶端連接。(注:用戶自定義的會(huì)話變量是存在進(jìn)程內(nèi)存中的)
- 聲明: 用戶自定義會(huì)話變量的聲明方法形如:@var_name,其中變量名稱由字母、數(shù)字、“.”、“_”和“$”組成。當(dāng)然,在以字符串或者標(biāo)識符引用時(shí)也可以包含其他字符(例如:@'my-var',@"my-var",或者
- 變量的賦值:
set session var_name = value; set @@session.var_name = value; set var_name = value;
- 變量的查詢
select @@var_name; select @@session.var_name; show session variables like "%var%"
-
系統(tǒng)變量
-
會(huì)話變量
-
全局變量
- 變量的賦值:
set session var_name = value; set @@session.var_name = value; set var_name = value;
- 變量的查詢
select @@var_name; select @@session.var_name; show session variables like "%var%"
- 變量的賦值:
2、基本數(shù)據(jù)類型
- 整數(shù)
- int
- long
- 浮點(diǎn)數(shù)
- float
- double
- 字符串
- varchar
- 文本類型
- text
- 二進(jìn)制流類型
- varbinary
- blog
- 時(shí)間類型
- time
- date
二、流程控制語句
-
if語句
1、形式:if condition then ... [else condition then] ... [else] ... end if
2、example:
drop procedure if exists test_if; delimiter // --(注:重新定義分界符為//,默認(rèn)的為;) create procedure test_if(in x int) begin if x=1 then select 'OK'; elseif x=0 then select 'No'; else select 'good'; end if; end // delimiter ; call test_if(0);
-
case語句
1、形式:case value when value then ... [when value then...] [else...] end case
2、example:
drop procedure if exists test_case; delimiter // --(注:重新定義分界符為//,默認(rèn)的為;) create procedure test_case(in x int) begin case x when 1 then select 'OK'; when 0 then select 'No'; else select 'good'; end case; end // delimiter ; call test_case(0);
-
while循環(huán)
1、形式:while condition do ... end while
2、example:
drop procedure if exists test_while; delimiter // create procedure test_while(out sum int) begin declare i int default 1; declare s int default 0; while i<=10 do set s = s+i; set i = i+1; end while; set sum = s; end; // delimiter ; call test_while(@s); select @s;
-
loop循環(huán)
1、形式:
loop ... end loop
2、example:
drop procedure if exists test_loop; delimiter // create procedure test_loop(out sum int) begin declare i int default 1; declare s int default 0; loop_label:loop set s = s+i; set i = i+1; if i>10 then leave loop_label; end if; end loop; set sum = s; end; // delimiter ; call test_loop(@s); select @s;
-
repeat循環(huán)語句
1、形式:repeat ... until condition end repeat
2、example:
drop procedure if exists test_repeat; delimiter // create procedure test_repeat(out sum int) begin declare i int default 1; declare s int default 0; repeat set s = s+i; set i = i+1; until i>10 -- 此處不能有分號 end repeat; set sum = s; end; // delimiter ; call test_repeat(@s); select @s;
三、運(yùn)算符
- 算數(shù)運(yùn)算符
+、-、*、/、DIV(x1,x2)除法運(yùn)算、%、MOD(x1,x2)求余運(yùn)算。 - 比較運(yùn)算符
=、<>或!=、>、>=、<、<=、IS NULL、IS NOT NULL、BETWEEN AND、 IN、 LIKE、REGEXP(注:正則表達(dá)式;格式:x1 regexp 正則表達(dá)式,判斷x1是否與正則表達(dá)式匹配。)。 - 邏輯運(yùn)算符
&&或and 、!或not 、||或or 、xor(注:異或。)。 - 位運(yùn)算符
& 、| 、~ (注:按位取反)、^(注:按位異或) 、<< 、>>。 - 運(yùn)算符的優(yōu)先級
優(yōu)先級從高到底:
0、()
1、!
2、~
3、^
4、*、/、DIV(x1,x2)除法運(yùn)算、%、MOD(x1,x2)求余運(yùn)算
5、+、-
6、<< 、>>
7、&
8、|
9、=、<>或!=、>、>=、<、<=、in、is null、like、regexp
10、BETWEEN and 、case 、when 、then 、else
11、not
12、&&或and
13、||或or 、xor(注:異或。)
14、:=(注:select變量賦值語句。)
三、表達(dá)式
- 賦值表達(dá)式
- "=":
set a = 3; declare a int default 0;
- ":=" :select變量賦值語句;
select a := 3*4;
- "=":
四、關(guān)鍵字
-
DCL
- create database database _name
- drop database database _name if exists database_name
- show databases (注:輸出數(shù)據(jù)庫所有表--包括系統(tǒng)表和用戶表。)
- show variables like 'have%' (注:查詢mysql支持的所有引擎。)
- create table table_name(
屬性名 數(shù)據(jù)類型 [完整性約束條件],
屬性名 數(shù)據(jù)類型 [完整性約束條件],
屬性名 數(shù)據(jù)類型 [完整性約束條件]
); - delete table table_name
- describe table_name (注:查看表的基本定義。)
- show create table table_name (注:查看表的詳細(xì)定義。)
- alter table old_table_name rename new_table_name(注:修改表名。)
- alter table table_name change old_column_name old_column_name 數(shù)據(jù)類型
- alter table table_name drop 屬性名 (注:刪除字段)
- alter table table_name engine = 存儲引擎名
- use ·database_name· (注:確定到具體某一個(gè)數(shù)據(jù)庫)
-
DML
- select : 用以輸出結(jié)果,相當(dāng)于java中的println()。
- from
- where
- delete
- insert into table_name(column1,column2) values(value1,value2)
- update table_name set .... where
- delete from table_name [where]
-
DCL
-
其他關(guān)鍵字
- having
- group by
- order by
- distinct
- with {cube|rollup}
- limit : 取出指定行的記錄,并將記錄結(jié)果返回。
- on
- join
- delimiter
- begin sqlStates end
五、函數(shù)、存儲過程、觸發(fā)器和定時(shí)器(既創(chuàng)建事件用以定期執(zhí)行任務(wù))
- 存儲過程
- 定義:存儲過程是一組sql語句的集合,經(jīng)編譯創(chuàng)建并保存到數(shù)據(jù)庫中,用戶可以指定儲存過程名字并給定參數(shù)(需要時(shí)傳遞)。
- 創(chuàng)建存儲過程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
實(shí)例:
delimiter // #將語句的結(jié)束符號從分號;臨時(shí)改為兩個(gè)$$(可以是自定義)
CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
BEGIN
DELETE FROM MATCHES
WHERE playerno = p_playerno;
END//
- 存儲過程體
- 定義:存儲過程體包含了在過程調(diào)用時(shí)必須執(zhí)行的語句,例如:dml、ddl語句,if-then-else和while-do語句、聲明變量的declare語句等;過程體格式:以begin開始,以end結(jié)束(可嵌套)。
(注:每個(gè)嵌套塊及其中的每條語句,必須以分號結(jié)束,表示過程體結(jié)束的begin-end塊(又叫做復(fù)合語句compound statement),則不需要分號。) - 例如:
- 定義:存儲過程體包含了在過程調(diào)用時(shí)必須執(zhí)行的語句,例如:dml、ddl語句,if-then-else和while-do語句、聲明變量的declare語句等;過程體格式:以begin開始,以end結(jié)束(可嵌套)。
BEGIN
BEGIN
BEGIN
declare a = 2;
declare b = 5 ;
select a= a+ b;
END
END
END
- 存儲過程的參數(shù):
存儲過程可以有0個(gè)或多個(gè)參數(shù),用于存儲過程的定義。
3種參數(shù)類型:
IN輸入?yún)?shù):表示調(diào)用者向過程傳入值(傳入值可以是字面量或變量)。
OUT輸出參數(shù):表示過程向調(diào)用者傳出值(可以返回多個(gè)值)(傳出值只能是變量)。
INOUT輸入輸出參數(shù):既表示調(diào)用者向過程傳入值,又表示過程向調(diào)用者傳出值(值只能是變量)。
- 函數(shù)
- 定義:函數(shù)是一組sql語句的集合,經(jīng)編譯創(chuàng)建并保存到數(shù)據(jù)庫中,用戶可以指定函數(shù)名字并給定參數(shù)(需要時(shí)傳遞),與存儲過程不同的函數(shù)參數(shù)只能用in,不能用out后inout,且函數(shù)有返回值,只能是一個(gè)值。
- 創(chuàng)建存儲過程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
proc_parameter:
[ IN ] param_name type
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
- 觸發(fā)器
- 定義:是由insert、update、delete事件觸發(fā)某種特定操作,這種特定操作是sql語句塊。
- 語法格式:
create trigger 觸發(fā)器名 before | after 觸發(fā)事件 on table_name for
each row
- 定時(shí)器
- 查看event是否開啟
show variables like '%sche%';
創(chuàng)建事件 e_fw_shop_day
create event if not exists e_fw_shop_day -- 事件名稱
on schedule every 1 DAY STARTS date_add(date(curdate() + 1),interval 0 hour) -- 每天凌晨執(zhí)行
on completion preserve
do call fw_shop_day(); -- 需要執(zhí)行的存儲過程
-關(guān)閉事件任務(wù)
alter event e_fw_shop_day ON
COMPLETION PRESERVE DISABLE;
-開戶事件任務(wù)
alter event e_fw_shop_day ON
COMPLETION PRESERVE ENABLE;