MySQL:函數(shù)和事務(wù)

一撼泛、函數(shù)

MySQL數(shù)據(jù)庫(kù)中提供了很豐富的函數(shù)挠说。MySQL函數(shù)包括數(shù)學(xué)函數(shù)、字符串函數(shù)愿题、日期和時(shí)間函數(shù)损俭、條件判斷函數(shù)、系統(tǒng)信息函數(shù)潘酗、加密函數(shù)杆兵、格式化函數(shù)等。通過(guò)這些函數(shù)仔夺,可以簡(jiǎn)化用戶的操作琐脏。

(一)數(shù)學(xué)函數(shù)

函數(shù) 功能
ABS(x) 求絕對(duì)值
PI() 返回圓周率
SQRT(x) 平方根函數(shù)
MOD(x,y) 求余函數(shù)
RAND()和RAND(x) 獲取隨機(jī)數(shù)的函數(shù)
ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 四舍五入函數(shù)
SIGN(x) 符號(hào)函數(shù)
POW(x,y)、POWER(x,y)和EXP(x) 冪運(yùn)算函數(shù)
LOG(x)和LOG10(x) 對(duì)數(shù)運(yùn)算函數(shù)

(二)字符串函數(shù)

函數(shù) 功能
CHAR_LENGTH(s) 計(jì)算字符串s的字符數(shù)
LENGTH(s) 計(jì)算字符串s的長(zhǎng)度
CONCAT(s1,s2,...) 將s1日裙、s2等多個(gè)字符串合并成一個(gè)字符串
CONCAT_WS(x,s1,s2,...) 將s1吹艇、s2等多個(gè)字符串合并成一個(gè)字符串,但可將各字符串直接用參數(shù)x隔開(kāi)
UPPER(s)和UCASE(s) 將字符串s的所有字母變成大寫(xiě)字母
LOWER(s)和LCASE(s) 將字符串s的所有字母變成小寫(xiě)字母
REPEAT(s,n) 將字符串s重復(fù)n次
STRCMP(s1,s2) 比較字符串s1和s2昂拂。如果s1大于s2受神,結(jié)果返回1;如果s1等于s2格侯,結(jié)果返回0鼻听;如果s1小于s2,結(jié)果返回-1联四。
REVERSE(s) 將字符串s的順序反過(guò)來(lái)
SUBSTRING(s,a,b) 從字符串s中的第a個(gè)字符開(kāi)始取b個(gè)字符

(三)日期和時(shí)間函數(shù)

函數(shù) 功能
CURDATE()和CURRENT_DATE() 獲取當(dāng)前日期
CURTIME()和CURRENT_TIME() 獲取當(dāng)前時(shí)間
NOW()撑碴、CURRENT_TIMESTAMP()、LOCALTIME()和SYSDATE() 獲取當(dāng)前的日期和時(shí)間
UNIX_TIMESTAMP() 以UNIX時(shí)間戳的形式返回當(dāng)前時(shí)間
UNIX_TIMESTAMP(d) 將時(shí)間d以UNIX時(shí)間戳的形式返回
FROM_UNIXTIME(d) 把UNIX時(shí)間戳的時(shí)間轉(zhuǎn)換為普通格式的時(shí)間
MONTH(d) 返回日期d中的月份值碎连,其取值范圍是1~12
MONTHNAME(d) 返回日期d中的月份的英文名稱
YEAR(d) 返回日期d中的年份值
QUARTER(d) 返回日期d是本年第幾季度灰羽,值的范圍是1~4
HOUR(t) 返回時(shí)間t中的小時(shí)值
MINUTE(t) 返回時(shí)間t中的分鐘值
SECOND(t) 返回時(shí)間t中的秒鐘值

(四)條件判斷函數(shù)

函數(shù) 功能
IF(expr,v1,v2) 如果表達(dá)式expr成立,返回結(jié)果v1鱼辙;否則廉嚼,返回結(jié)果v2。
IFNULL(v1,v2) 如果v1的不為空倒戏,就顯示v1的值怠噪;否則就顯示v2的值。
(五)系統(tǒng)信息函數(shù)
函數(shù) 功能
VERSION() 返回?cái)?shù)據(jù)庫(kù)的版本號(hào)
CONNECTION_ID() 返回服務(wù)器的連接數(shù)杜跷,也就是到現(xiàn)在為止MySQL服務(wù)的連接次數(shù)
DATABASE()和SCHEMA() 返回當(dāng)前數(shù)據(jù)庫(kù)名
USER()傍念、SYSTEM_USER()、SESSION_USER()葛闷、CURRENT_USER()和CURRENT_USER 返回當(dāng)前用戶的名稱
LAST_INSERT_ID() 返回最后生成的AUTO_INCREMENT值

(六)加密函數(shù)

函數(shù) 功能
PASSWORD(str) 可以對(duì)字符串str進(jìn)行加密
MD5(str) 可以對(duì)字符串str進(jìn)行加密
DECODE(crypt_str,pswd_str) 可以使用字符串pswd_str來(lái)為crypt_str解密

二憋槐、自定義函數(shù)

(一)語(yǔ)法

Create function function_name(參數(shù)列表)returns返回值類(lèi)型

(二)敘述

  • 函數(shù)體、函數(shù)名淑趾,應(yīng)合法的標(biāo)識(shí)符阳仔,不應(yīng)與系統(tǒng)關(guān)鍵字沖突。
  • 一個(gè)函數(shù)應(yīng)該屬于某個(gè)數(shù)據(jù)庫(kù)扣泊,可以使用db_name.funciton_name的形式執(zhí)行當(dāng)前函數(shù)所屬數(shù)據(jù)庫(kù)近范,否則為當(dāng)前數(shù)據(jù)庫(kù)。
  • 參數(shù)部分延蟹,由參數(shù)名和參數(shù)類(lèi)型組成评矩。
  • 返回值類(lèi)類(lèi)型。注意阱飘,一定要有return返回值語(yǔ)句斥杜。

(三)舉例

DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `ZZZ1`(PARA_VAR varchar(30)) 
RETURNS varchar(100) CHARSET latin1
BEGIN
DECLARE NAYIBU_FIR VARCHAR(30) DEFAULT 'THIS IS MY FIRST,';
SET NAYIBU_FIR = concat(NAYIBU_FIR,PARA_VAR);
RETURN NAYIBU_FIR;
END$$

(四)查看自定函數(shù)

show function status;

三虱颗、事務(wù)

應(yīng)用中的一個(gè)業(yè)務(wù)邏輯,往往由多條語(yǔ)句組合完成蔗喂。那么我們就可以簡(jiǎn)單地將事務(wù)理解為一組SQL語(yǔ)句的集合上枕,要么這個(gè)集合全部成功集合,要么這個(gè)集合就全部失敗退回到第一句之前的狀態(tài)弱恒。

(一)語(yǔ)法

  1. 開(kāi)啟事務(wù)start transaction,可以簡(jiǎn)寫(xiě)為 begin
  2. 然后記錄之后需要執(zhí)行的一組sql
  3. 提交commit
  4. 如果所有的sql都執(zhí)行成功棋恼,則提交返弹,將sql的執(zhí)行結(jié)果持久化到數(shù)據(jù)表內(nèi)。
  5. 回滾rollback
  6. 如果存在失敗的sql爪飘,則需要回滾义起,將sql的執(zhí)行結(jié)果,退回到事務(wù)開(kāi)始之時(shí)师崎。
  7. 無(wú)論回滾還是提交默终,都會(huì)關(guān)閉事務(wù)!需要再次開(kāi)啟犁罩,才能使用齐蔽。
  8. 還有一點(diǎn)需要注意,就是事務(wù)只針對(duì)當(dāng)前連接床估。

(二)舉例

使用第一個(gè)鏈接A

Start transaction;
Insert into students values('qreal',5);

結(jié)果成功含滴,數(shù)據(jù)已經(jīng)變成修改之后!但此時(shí)我們沒(méi)有提交丐巫。再?gòu)钠渌B接B來(lái)查看谈况,發(fā)現(xiàn)數(shù)據(jù)沒(méi)有插入。此時(shí)如果連接A選擇提交递胧,也就是commit操作碑韵。則連接B的數(shù)據(jù)也會(huì)發(fā)生變化。而如果連接A選擇回滾缎脾,也就是rollback操作祝闻。則連接A再次查詢則發(fā)現(xiàn)數(shù)據(jù)還原。

(三)基本原理

提交赊锚,就會(huì)將結(jié)果持久化治筒,不提交就不會(huì)。如果我們不開(kāi)啟事務(wù)舷蒲,只執(zhí)行一條sql耸袜,馬上就會(huì)持久化數(shù)據(jù),可以看出牲平,普通的執(zhí)行就是立即提交堤框。這是因?yàn)镸ySQL默認(rèn)對(duì)sql語(yǔ)句的執(zhí)行是自動(dòng)提交的。也就是說(shuō),開(kāi)啟事務(wù)蜈抓,實(shí)際上就是關(guān)閉了自動(dòng)提交的功能启绰,改成了commit手動(dòng)提交!
我們可以通過(guò)簡(jiǎn)單的對(duì)是否自動(dòng)提交加以設(shè)置沟使,完成開(kāi)啟事務(wù)的目的委可!
自動(dòng)提交的特征是保存在服務(wù)的一個(gè)autocommit的變量?jī)?nèi)±拔耍可以進(jìn)行修改:

Set autocommit = 0;

還需要注意一點(diǎn)着倾,就是事務(wù)類(lèi)似于外鍵約束,只被innodb引擎支持燕少。

(四)事務(wù)的特點(diǎn)

事務(wù)的特點(diǎn)ACID卡者。也就是原子性、一致性客们、隔離性和持久性崇决。

  • 原子性:事務(wù)是不可分割的。
  • 一致性:保證數(shù)據(jù)在事務(wù)的執(zhí)行周期內(nèi)底挫,是一致的恒傻!
  • 隔離型:多個(gè)事務(wù)之間的干擾關(guān)系!隔離級(jí)別建邓!
  • 持久性:事務(wù)一旦被提交碌冶,就不可能再被回滾!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涝缝,一起剝皮案震驚了整個(gè)濱河市扑庞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拒逮,老刑警劉巖罐氨,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異滩援,居然都是意外死亡栅隐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)玩徊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)租悄,“玉大人,你說(shuō)我怎么就攤上這事恩袱∑澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵畔塔,是天一觀的道長(zhǎng)潭辈。 經(jīng)常有香客問(wèn)我鸯屿,道長(zhǎng),這世上最難降的妖魔是什么把敢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任寄摆,我火速辦了婚禮,結(jié)果婚禮上修赞,老公的妹妹穿的比我還像新娘婶恼。我一直安慰自己,他們只是感情好柏副,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布熙尉。 她就那樣靜靜地躺著,像睡著了一般搓扯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上包归,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天锨推,我揣著相機(jī)與錄音,去河邊找鬼公壤。 笑死换可,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厦幅。 我是一名探鬼主播沾鳄,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼确憨!你這毒婦竟也來(lái)了译荞?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤休弃,失蹤者是張志新(化名)和其女友劉穎吞歼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體塔猾,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡篙骡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丈甸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糯俗。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖睦擂,靈堂內(nèi)的尸體忽然破棺而出得湘,到底是詐尸還是另有隱情,我是刑警寧澤顿仇,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布忽刽,位于F島的核電站天揖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跪帝。R本人自食惡果不足惜今膊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伞剑。 院中可真熱鬧斑唬,春花似錦、人聲如沸黎泣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抒倚。三九已至褐着,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間托呕,已是汗流浹背含蓉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留项郊,地道東北人馅扣。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像着降,于是被迫代替她去往敵國(guó)和親差油。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容