常量
數值
字符串:單引號或者雙引號括起來。包括普通字符串或者日期格式的字符串。
布爾值:false(FALSE)對應數字值為0、true(TRUE)對應數字值為1。
NULL:可以參考http://www.cnblogs.com/-beyond/p/8554483.html
變量
定義用戶變量
mysql中變量分為用戶變量和系統變量。
用戶變量要先定義和初始化賦值,否則變量的值為NULL。
用戶變量只在本次連接階段有效,其他用戶的連接不能使用另外一個用戶定義的變量,並且當連接釋放后,變量就會銷毀。
聲明變量格式:set @key = value,可以一次性聲明多個。
如果變量名中有特殊符號,那么可以用引號將變量名括起來,比如 set @'abc def' = 123;
訪問用戶變量
select @name;
系統變量
系統變量是以2個@@開頭。
mysql> select @@version;
獲得系統變量列表
mysql> show variables; mysql> show variables like '%test%';
算數運算符
+ - * / %
+和-還可以用來計算日期;
mysql> select now(),now() + interval 22 day; +---------------------+-------------------------+ | now() | now() + interval 22 day | +---------------------+-------------------------+ | 2018-06-19 22:55:02 | 2018-07-11 22:55:02 | +---------------------+-------------------------+ 1 row in set (0.00 sec)
比較運算符
在mysql里面,判斷等於只用一個等號=,不像其他編程語言一樣使用雙等或者三等。判斷不等使用!=和<>。
其他比較運算符和其他編程語言一樣使用。
邏輯運算符和位運算符
和其他語言一樣。注意or比and的優先級低,所以在where子句中進行判斷時,為了保證准確性,盡量使用()保證順序。
選擇判斷
mysql的選擇判斷一般是使用case,格式如下:
case
when 條件1 then 表達式1
when 條件2 then 表達式2
else 表達式n
end
示例:
mysql> select id,name,
-> case
-> when price>10 then "expensive"
-> when price>0 then "cheap"
-> else "free"
-> end as level
-> from cate;
循環結構
while
delimiter $$ create procedure test_while() begin declare sum int default 0; declare t int default 5; while t>0 do set sum=sum+1; set t=t-1; end while; select sum; end $$ delimiter ;
repeat
delimiter $$ create procedure _repeat() begin declare a int default 10; repeat set a=a-1; until a<5 end repeat; select a; end $$ delimiter ;
注意使用repeat的時候,在判斷條件(until 條件)的那一行句末不加分號,這個很容易出錯!
loop
delimiter $$ create procedure test_loop() begin declare t int default 0; label:loop set t=t+1; if t>10 then leave label; end if; end loop label; select t; end $$ delimiter ;
注意 loop 一般要和一個標簽(此處為label,名稱可以自定義,不過要保證前后一致)一起使用,且在 loop 循環中一定要有一個判斷條件,能夠滿足在一定的條件下跳出 loop 循環(即 leave )!
存儲過程
創建和使用存儲過程
mysql> create procedure insert_into_two_table(in id int, in name char(30), out res char(10))
-> begin
-> insert into user values (id,name);
-> insert into person values (id, name);
-> set res = "success";
-> select res;
-> end $$
Query OK, 0 rows affected (0.00 sec)
mysql> call insert_into_two_table(1,"aaaaa",@res);
+---------+
| res |
+---------+
| success |
+---------+
1 row in set (0.03 sec)
mysql> select @res;
+---------+
| @res |
+---------+
| success |
+---------+
1 row in set (0.00 sec)
刪除存儲過程
mysql> drop procedure if exists insert_into_two_table;
存儲函數
存儲過程不能有輸出參數;不用call調用,而是使用select來調用 ;必須包含return語句,存儲過程不能有return。
delimiter $$ create function find_stu(s_id int) returns boolean begin declare cnt int; select id into cnt from user where id=s_id; if cnt > 0 then return true; else return false; end if; end $$ delimiter ;
測試:
mysql> select * from user; +----+-------+ | id | name | +----+-------+ | 1 | aaaaa | +----+-------+ 1 row in set (0.00 sec) mysql> select find_stu(1); +-------------+ | find_stu(1) | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec) mysql> select find_stu(2); +-------------+ | find_stu(2) | +-------------+ | 0 | +-------------+ 1 row in set (0.00 sec)
刪除函數
mysql> drop function if exists find_stu;
觸發器
事件
