MySQL存儲過程中的基本函數(shù)和觸發(fā)器的相關(guān)學(xué)習(xí)教程
MySQL存儲過程的常用函數(shù)
一.字符串類
CHARSET(str) //返回字串字符集
CONCAT (string2 [,... ]) //連接字串
INSTR (string ,substring ) //返回substring首次在string中出現(xiàn)的位置,不存在返回0
LCASE (string2 ) //轉(zhuǎn)換成小寫
LEFT (string2 ,length ) //從string2中的左邊起取length個(gè)字符
LENGTH (string ) //string長度
LOAD_FILE (file_name ) //從文件讀取內(nèi)容
LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定開始位置
LPAD (string2 ,length ,pad ) //重復(fù)用pad加在string開頭,直到字串長度為length
LTRIM (string2 ) //去除前端空格
REPEAT (string2 ,count ) //重復(fù)count次
REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替換search_str
RPAD (string2 ,length ,pad) //在str后用pad補(bǔ)充,直到長度為length
RTRIM (string2 ) //去除后端空格
STRCMP (string1 ,string2 ) //逐字符比較兩字串大小,
SUBSTRING (str , position [,length ]) //從str的position開始,取length個(gè)字符,
注:mysql中處理字符串時(shí),默認(rèn)第一個(gè)字符下標(biāo)為1,即參數(shù)position必須大于等于1
mysql> select substring('abcd',0,2);
+-----------------------+ | substring('abcd',0,2) | +-----------------------+ | | +-----------------------+ 1 row in set (0.00 sec) mysql> select substring('abcd',1,2); +-----------------------+ | substring('abcd',1,2) | +-----------------------+ | ab | +-----------------------+ 1 row in set (0.02 sec)
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符
UCASE (string2 ) //轉(zhuǎn)換成大寫
RIGHT(string2,length) //取string2最后length個(gè)字符
SPACE(count) //生成count個(gè)空格
二.數(shù)學(xué)類
ABS (number2 ) //絕對值
BIN (decimal_number ) //十進(jìn)制轉(zhuǎn)二進(jìn)制
CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //進(jìn)制轉(zhuǎn)換
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留小數(shù)位數(shù)
HEX (DecimalNumber ) //轉(zhuǎn)十六進(jìn)制
注:HEX()中可傳入字符串,則返回其ASC-11碼,如HEX('DEF')返回4142143
也可以傳入十進(jìn)制整數(shù),返回其十六進(jìn)制編碼,如HEX(25)返回19
LEAST (number , number2 [,..]) //求最小值
MOD (numerator ,denominator ) //求余
POWER (number ,power ) //求指數(shù)
RAND([seed]) //隨機(jī)數(shù)
ROUND (number [,decimals ]) //四舍五入,decimals為小數(shù)位數(shù)]
注:返回類型并非均為整數(shù),如:
(1)默認(rèn)變?yōu)檎沃?br />
mysql> select round(1.23);
+-------------+ | round(1.23) | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec) mysql> select round(1.56); +-------------+ | round(1.56) | +-------------+ | 2 | +-------------+ 1 row in set (0.00 sec)
(2)可以設(shè)定小數(shù)位數(shù),返回浮點(diǎn)型數(shù)據(jù)
mysql> select round(1.567,2);
+----------------+ | round(1.567,2) | +----------------+ | 1.57 | +----------------+ 1 row in set (0.00 sec)
SIGN (number2 ) //返回符號,正負(fù)或0
SQRT(number2) //開平方
三.日期時(shí)間類
ADDTIME (date2 ,time_interval ) //將time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //轉(zhuǎn)換時(shí)區(qū)
CURRENT_DATE ( ) //當(dāng)前日期
CURRENT_TIME ( ) //當(dāng)前時(shí)間
CURRENT_TIMESTAMP ( ) //當(dāng)前時(shí)間戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或時(shí)間
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式顯示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上減去一個(gè)時(shí)間
DATEDIFF (date1 ,date2 ) //兩個(gè)日期差
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1為星期天
DAYOFYEAR (date ) //一年中的第幾天
EXTRACT (interval_name FROM date ) //從date中提取日期的指定部分
MAKEDATE (year ,day ) //給出年及年中的第幾天,生成日期串
MAKETIME (hour ,minute ,second ) //生成時(shí)間串
MONTHNAME (date ) //英文月份名
NOW ( ) //當(dāng)前時(shí)間
SEC_TO_TIME (seconds ) //秒數(shù)轉(zhuǎn)成時(shí)間
STR_TO_DATE (string ,format ) //字串轉(zhuǎn)成時(shí)間,以format格式顯示
TIMEDIFF (datetime1 ,datetime2 ) //兩個(gè)時(shí)間差
TIME_TO_SEC (time ) //時(shí)間轉(zhuǎn)秒數(shù)]
WEEK (date_time [,start_of_week ]) //第幾周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第幾天
HOUR(datetime) //小時(shí)
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分
附:可用在INTERVAL中的類型
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR
MySql存儲過程和觸發(fā)器
1.創(chuàng)建存儲過程
DELIMITER // DROP PROCEDURE IF EXISTS `PROC_TEST`// CREATE PROCEDURE `PROC_TEST`(TABLE_NAME VARCHAR(20),NUM INT) BEGIN SELECT * FROM TABLE_NAME LIMIT NUM; END// DELIMITER ;
調(diào)用存儲過程:
CALL PROC_TEST('USER',20);
刪除存儲過程:
DROP PROCUDURE productpricing
2.創(chuàng)建觸發(fā)器
~~語法~~
CREATE TRIGGER <觸發(fā)器名稱> --觸發(fā)器必須有名字,最多64個(gè)字符,可能后面會附有分隔符.它和MySQL中其他對象的命名方式基本相象.
{ BEFORE | AFTER } --觸發(fā)器有執(zhí)行的時(shí)間設(shè)置:可以設(shè)置為事件發(fā)生前或后。
{ INSERT | UPDATE | DELETE } --同樣也能設(shè)定觸發(fā)的事件:它們可以在執(zhí)行insert、update或delete的過程中觸發(fā)。
ON <表名稱> --觸發(fā)器是屬于某一個(gè)表的:當(dāng)在這個(gè)表上執(zhí)行插入、 更新或刪除操作的時(shí)候就導(dǎo)致觸發(fā)器的激活. 我們不能給同一張表的同一個(gè)事件安排兩個(gè)觸發(fā)器。
FOR EACH ROW --觸發(fā)器的執(zhí)行間隔:FOR EACH ROW子句通知觸發(fā)器 每隔一行執(zhí)行一次動(dòng)作,而不是對整個(gè)表執(zhí)行一次。
<觸發(fā)器SQL語句> --觸發(fā)器包含所要觸發(fā)的SQL語句:這里的語句可以是任何合法的語句, 包括復(fù)合語句,但是這里的語句受的限制和函數(shù)的一樣。
--你必須擁有相當(dāng)大的權(quán)限才能創(chuàng)建觸發(fā)器(CREATE TRIGGER),如果你已經(jīng)是Root用戶,那么就足夠了。這跟SQL的標(biāo)準(zhǔn)有所不同。
創(chuàng)建觸發(fā)器:t_afterinsert_on_tab1
作用:增加tab1表記錄后自動(dòng)將記錄增加到tab2表中
DROP TRIGGER IF EXISTS `t_afterinsert_on_tab1`; CREATE TRIGGER t_afterinsert_on_tab1 AFTER INSERT ON `tab1` FOR EACH ROW BEGIN insert into tab2(tab2_id) values(new.tab1_id); END;
創(chuàng)建觸發(fā)器:t_afterdelete_on_tab1
作用:刪除tab1表記錄后自動(dòng)將tab2表中對應(yīng)的記錄刪去
DROP TRIGGER IF EXISTS `t_afterdelete_on_tab1`; CREATE TRIGGER `t_afterdelete_on_tab1` AFTER DELETE ON `tab1` FOR EACH ROW BEGIN delete from `tab2` where tab2_id=old.tab1_id; END;
刪除觸發(fā)器:
DROP TRIGGER [schema_name.]trigger_name;
相關(guān)文章
mybatis分頁插件pageHelper詳解及簡單實(shí)例
這篇文章主要介紹了mybatis分頁插件pageHelper詳解及簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05MySQL 按指定字段自定義列表排序的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄狹ySQL 按指定字段自定義列表排序的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03MySQL設(shè)置global變量和session變量的兩種方法詳解
這篇文章主要介紹了MySQL設(shè)置global變量和session變量的兩種方法,每種方法給大家介紹的非常詳細(xì) ,需要的朋友可以參考下2018-10-10MySQL的雙寫緩沖區(qū)Doublewrite Buffer詳解
這篇文章主要介紹了MySQL的雙寫緩沖區(qū)Doublewrite Buffer詳解,InnoDB是MySQL中一種常用的事務(wù)性存儲引擎,它具有很多優(yōu)秀的特性,其中,Doublewrite Buffer是InnoDB的一個(gè)重要特性之一,本文將介紹Doublewrite Buffer的原理和應(yīng)用,需要的朋友可以參考下2023-07-07MySQL到Kafka實(shí)時(shí)數(shù)據(jù)同步
很多 DBA 同學(xué)經(jīng)常會遇到要從一個(gè)數(shù)據(jù)庫實(shí)時(shí)同步到另一個(gè)數(shù)據(jù)庫的問題,同構(gòu)數(shù)據(jù)還相對容易,遇上異構(gòu)數(shù)據(jù)、表多、數(shù)據(jù)量大等情況就難以同步,我自己親測了一種方式,可以非常方便的實(shí)現(xiàn)MySQL Kafka實(shí)時(shí)數(shù)據(jù)同步,需要的朋友可以參考下2024-01-01