hex()函數(shù)可將字符串貨數(shù)字轉(zhuǎn)換成十六進(jìn)制格式字符串
select hex('MySQL');
變量分為系統(tǒng)變量和用戶自定義變量,系統(tǒng)變量以@@開(kāi)頭
用戶定義變量以@開(kāi)頭,局部變量不以@開(kāi)頭
用戶會(huì)話變量又兩種定義與賦值方式
方式一:
set @user_variable1=expression1 [,@user_variable=expression2,……]
方式二:
格式1: select @user_variable1:=expression1 [……]
格式2: select expression1 into @user_variable1,[……]
局部變量
declare 命令專門用于定義局部變量及對(duì)應(yīng)數(shù)據(jù)類型。局部變量必須在存儲(chǔ)程序中(例如函數(shù),觸發(fā)器陈瘦,存儲(chǔ)過(guò)程及事件)并且局部變量的作用范圍僅局限于存儲(chǔ)程序中,脫離存儲(chǔ)程序潮售,局部變量沒(méi)有絲毫意義痊项。局部變量主要用于以下3中場(chǎng)合
1:定義在存儲(chǔ)程序begin-end語(yǔ)句塊之間。
2:局部變量作為存儲(chǔ)過(guò)程或函數(shù)參數(shù)使用時(shí)酥诽,此時(shí)雖然不需要declare定義鞍泉,但需要指定參數(shù)的數(shù)據(jù)類型。
3:局部變量可以用在存儲(chǔ)過(guò)程的SQL語(yǔ)句中肮帐。數(shù)據(jù)檢索時(shí)咖驮,如果select語(yǔ)句的結(jié)果集是單個(gè)值,則可以將select語(yǔ)句的返回結(jié)果賦予局部變量训枢。局部變量也可以直接嵌入到select,
insert, update以及delete語(yǔ)句的條件表達(dá)式中托修。
局部變量與用戶會(huì)話變量的區(qū)別
1:用戶會(huì)話變量以@開(kāi)頭,局部變量沒(méi)有
2:局部變量用declare命令定義(存儲(chǔ)過(guò)程參數(shù)恒界,函數(shù)參數(shù)除外)睦刃,定義時(shí)必須指定局部變量數(shù)據(jù)類型。局部變量定義后才能使用set或select語(yǔ)句為其賦值十酣。
用戶會(huì)話變量使用set命令或select語(yǔ)句定義并進(jìn)行賦值涩拙,定義用戶會(huì)話變量時(shí)無(wú)需指定數(shù)據(jù)類型,用戶會(huì)話變量時(shí)弱類型耸采。
3:用戶會(huì)話變量作用范圍大于局部變量兴泥。用戶會(huì)話變量在本次會(huì)話期間一直有效,直至關(guān)閉服務(wù)連接虾宇。 局部變量作用于存儲(chǔ)程序或begin-end塊搓彻。
4:如果局部變量嵌入到SQL語(yǔ)句中,由于局部變量前沒(méi)有@符號(hào)文留,這就要求局部變量不能與表字段同名好唯,否則將出現(xiàn)無(wú)法預(yù)期的結(jié)果竭沫。
算術(shù)運(yùn)算符
- 燥翅, - ,* 蜕提,/, % ,以及 div (求商)
比較運(yùn)算符
<
=
<=
<>, !=
<=> 相等或都等于空
Is null 是否為NULL
between and
in
like
regexp
邏輯運(yùn)算符
not 或 !
and 或 &&
or 或 ||
xor 邏輯異或
位運(yùn)算符
& 按位與
| 安位或
^ 按位異或
~ 按位取反
位右移
<< 位左移
重置命令結(jié)束標(biāo)記
delimiter 結(jié)束標(biāo)記
如:
delimiter
delimiter ;
select * from student where student_name like '張_';
自定義函數(shù):
create function 函數(shù)名(參數(shù)1森书,參數(shù)2,……) returns 返回值數(shù)據(jù)類型
[函數(shù)選項(xiàng)]
begin
函數(shù)體;
return 語(yǔ)句;
end;
建議在自定義函數(shù)名統(tǒng)一添加前綴''fn_''或者后綴“_fn”
查看函數(shù)定義
show function status;
show function status like模式;
查看指定數(shù)據(jù)庫(kù)中的函數(shù)
select name from mysql.proc where db = 'choose' and type = 'function';
show create function函數(shù)名 查看函數(shù)名詳細(xì)信息
如: show create function get_name_fn \G;
函數(shù)的信息都保存在information_schema數(shù)據(jù)庫(kù)中的routines表中
select * from information_shema.routines where routine_name = '函數(shù)名';
由于函數(shù)僅僅保存函數(shù)體凛膏,函數(shù)體實(shí)際上是MySQL表達(dá)式杨名,不保存任何數(shù)據(jù),當(dāng)函數(shù)體需要修改時(shí)猖毫,使用drop function 先刪除台谍,再新增,存儲(chǔ)過(guò)程吁断,觸發(fā)器趁蕊,視圖,修改同樣適用仔役。
If 條件表達(dá)式1 then 語(yǔ)句塊1
[elseif 條件表達(dá)式2 then 語(yǔ)句塊2]
[else 語(yǔ)句塊n]
end if;
說(shuō)明: end if 后必須以掷伙;號(hào)結(jié)束。
case 表達(dá)式
when value1 then 語(yǔ)句塊1;
when value2 then 語(yǔ)句塊2又兵;
……
else 語(yǔ)句塊n;
end case;
說(shuō)明:end case后必須以“任柜;”號(hào)結(jié)束。
mysql提供3中循環(huán)語(yǔ)句沛厨,分別是while , repeat,以及l(fā)oop
[循環(huán)標(biāo)簽:] while 條件表達(dá)式 do
循環(huán)體;
end while[循環(huán)標(biāo)簽];
leave語(yǔ)句用于跳出當(dāng)前循環(huán)語(yǔ)句
leave 循環(huán)標(biāo)簽; 必須以“宙地;”號(hào)結(jié)束
iterate語(yǔ)句用于跳出本次循環(huán),繼續(xù)進(jìn)行下次循環(huán)逆皮。
iterate 循環(huán)標(biāo)簽; 同樣必須以“绸栅;”結(jié)束。
當(dāng)條件表達(dá)的值為false時(shí)页屠,反復(fù)執(zhí)行循環(huán)粹胯,直到條件表達(dá)式值為true。
[循環(huán)標(biāo)簽:] repeat
循環(huán)體;
until 條件表達(dá)式
end repeat[循環(huán)標(biāo)簽]辰企; 必須以“;”結(jié)束
loop循環(huán)語(yǔ)句本身沒(méi)有停止循環(huán)的語(yǔ)句风纠,因此loop通常借助leave語(yǔ)句跳出loop循環(huán)。
[循環(huán)標(biāo)簽:] loop
循環(huán)體;
if條件表達(dá)式then
leave[循環(huán)標(biāo)簽]牢贸;
end if;
end loop;
系統(tǒng)函數(shù)
1:數(shù)學(xué)函數(shù)
pi();
radinans(x);
degrees(x);
sqrt() 平方根
pow(x,y);冪運(yùn)算
exp(x) 計(jì)算e的x次方
log(x) x的自然對(duì)數(shù)
log10(x) 以10為底的自然對(duì)數(shù)
round(x) 離x最近的整數(shù)
round(x,y) 計(jì)算離x最近的小數(shù)竹观,小數(shù)點(diǎn)后保留y位
fromat(x,y) 進(jìn)行四舍五入,保留小數(shù)點(diǎn)后y位
truncate(x,y) 舍棄多余的小數(shù)位潜索,不進(jìn)行四舍五入臭增。
floor(x) 小于等于x的最大整數(shù)
ceil(x) 大于等于x的最小整數(shù)
rand() 隨機(jī)函數(shù)
bin(x),oct(x), hex(x) 二進(jìn)制,八進(jìn)制竹习,十六進(jìn)制
ascii(x) 返回字符x的ASCII碼
char(c1,c2,c3,……) 將c1,c2等ASCII碼轉(zhuǎn)換為字符
字符串基本函數(shù)
charset(x) 返回x的字符集
collation(x) 返回x的字符序
convert(x using charset) 返回x的charset字符集數(shù)據(jù)
char_length(x) 獲取字符串x的長(zhǎng)度誊抛, 受MySQL字符集設(shè)置影響。
length(x)獲取字符x占用的字節(jié)數(shù)
不可以逆加密函數(shù)
password(x) 對(duì)x進(jìn)行加密整陌,返回41位字符串拗窃;
md5(x) 對(duì)x進(jìn)行加密瞎领,返回32位字符串;
加密--解密函數(shù)
encode(x,key);
decode(password,key);
aes_encrypt(x,key);
aes_decrypt(x,key);
concat(x1,x2,……); 字符串連接函數(shù)
concat_ws(x,x1,x2,……) 使用x將字符串x1,x2……連接起來(lái)
MySQL命令模式set sql_mode='ansi'; 可以使用管道符 “||” 連接字符串
ltrim(), rtrim() ,trim() 除去空格
trim([leading | both | trailing]) x1 from x2) 從x2的前随夸,或前后,或后去掉字符x1
upper(x),ucase(x) 字母變成大寫(xiě)
lower(x), lcase(x) 字母變成小寫(xiě)
lpad(x1,len,x2)將字符串x2填充到x1的開(kāi)始處九默,使x1長(zhǎng)度達(dá)到len
rpad(x1,len,x2) 填到結(jié)尾處
substring(x,start,length)
mid(x,start,length) 從字符串x的start開(kāi)始獲取length長(zhǎng)度字符串。
locate(x1,x2); position(x1 in x2) ; instr(x2,x1)
都是用字符串x2中獲取字符串x1的開(kāi)始位置宾毒。
字符串替換函數(shù)
Insert(x1,start,length,x2) 將字符串x1從start到length替換成x2
Replace(x1,x2,x3) 將x1中的x2替換成x3
取出指定分隔符前或后子字符串的函數(shù)
substring_index(x,delimiter,count)取出字符串x中出現(xiàn)count次delimiter分隔符的子字符串驼修,count>0表示從左邊,count<0表示從右邊诈铛。
復(fù)制字符串
repeat(x,n)將字符串x復(fù)制n次
space(n) 復(fù)制空格n次
strcmp(x1,x2)比較字符串
show variables like 'collation%';
reverse(x)返回字符x的逆序
類型轉(zhuǎn)換函數(shù) convert(x,type) 與 cast(x as type)
convert(x using charset)
十六進(jìn)制字符串轉(zhuǎn)十六進(jìn)制數(shù)
unhex(x)
條件控制函數(shù)
if(condition,v1,v2) condition條件為真返回v1,否則返回v2
ifnull(v1,v2) 如果v1為null返回v2值邪锌,否則返回v1值
系統(tǒng)函數(shù)
version();
connection_id() 獲取當(dāng)前服務(wù)器連接ID,與@@pseudo_thread_id系統(tǒng)變量值相同
database(), schema();
用戶信息
user(),system_user(),current_user(),session_user()
獲取當(dāng)前日期
curdate(),
current_date(),
獲取當(dāng)前時(shí)間
curtime(),
current_time(),
獲取當(dāng)前日期時(shí)間
now(),
current_timestamp(),
localtime();
UNIX_TIMESTAMP() 獲取mysql服務(wù)器當(dāng)前unix時(shí)間戳
utc_date(), utc_time() 獲取UTC日期癌瘾,時(shí)間觅丰,UTC時(shí)間即世界標(biāo)準(zhǔn)時(shí)間
year(x)
month(x)
dayofmonth(x)
hour(x)
minute(x)
second(x)
microsecond(x)
monthname(x) 獲取日期的x的月份信息
dayname(x) 、weekday(x) , dayofweek(x)
quarter(x) x在本年是第幾季度
week(x) , weekofyear(x) 是第幾個(gè)星期
time_to_sec(x) 時(shí)間x在當(dāng)天的秒數(shù)
sec_to_time(x) 秒數(shù)在當(dāng)天的時(shí)間妨退。
日期時(shí)間間隔函數(shù)
to_day(x) 計(jì)算日期x 距離0000年1月1日的天數(shù)
from_days(x) 計(jì)算從0000年1月1日開(kāi)始n天后的日期
datediff(x1,x2) x1與x2之間的相隔天數(shù)
adddate(d,n)
subdate(d,n)
addtime(t,n) t上加上n秒
subtime(t,n) t上減去n秒
date_add(date,interval 間隔類型);
time_fromat(t,f) 時(shí)間格式化函數(shù)
date_format(d,f)日期格式化函數(shù)
last_insert_id()函數(shù) 返回會(huì)話最后一次insert或update語(yǔ)句妇萄。
IP地址與整數(shù)相互轉(zhuǎn)換
inet_aton(ip) ip地址轉(zhuǎn)換為整數(shù)
inet_ntoa(n) 整數(shù)轉(zhuǎn)換為IP地址
基礎(chǔ)值函數(shù)
benchmark(n,expression) 將表達(dá)式expression重復(fù)執(zhí)行n次,返回結(jié)果為0.
select benchmark(10000000,md5('test'));
uuid()函數(shù) 生成128位
uuid碼由5個(gè)段構(gòu)成咬荷,其中前3段與服務(wù)器主機(jī)時(shí)間有關(guān)冠句,
第4段是一個(gè)隨機(jī)數(shù)
第5段通過(guò)網(wǎng)卡MAC地址轉(zhuǎn)換得到。
在InnoDB存儲(chǔ)引擎中采用聚簇索引幸乒,會(huì)對(duì)插入的記錄按照主鍵進(jìn)行排序懦底,而UUID系統(tǒng)隨機(jī)生成,雖然全球唯一罕扎,但本身無(wú)序聚唐,因此在InnoDB存儲(chǔ)引擎中使用UUID作為主鍵,可能會(huì)造成巨大的I\O開(kāi)銷
Isnull(value) 判斷value值是否為NULL如果為NULL返回1腔召,否則返回0