MySQL:函数和事务

一、函数

MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。

(一)数学函数

函数 功能
ABS(x) 求绝对值
PI() 返回圆周率
SQRT(x) 平方根函数
MOD(x,y) 求余函数
RAND()和RAND(x) 获取随机数的函数
ROUND(x)、ROUND(x,y)和TRUNCATE(x,y) 四舍五入函数
SIGN(x) 符号函数
POW(x,y)、POWER(x,y)和EXP(x) 幂运算函数
LOG(x)和LOG10(x) 对数运算函数

(二)字符串函数

函数 功能
CHAR_LENGTH(s) 计算字符串s的字符数
LENGTH(s) 计算字符串s的长度
CONCAT(s1,s2,...) 将s1、s2等多个字符串合并成一个字符串
CONCAT_WS(x,s1,s2,...) 将s1、s2等多个字符串合并成一个字符串,但可将各字符串直接用参数x隔开
UPPER(s)和UCASE(s) 将字符串s的所有字母变成大写字母
LOWER(s)和LCASE(s) 将字符串s的所有字母变成小写字母
REPEAT(s,n) 将字符串s重复n次
STRCMP(s1,s2) 比较字符串s1和s2。如果s1大于s2,结果返回1;如果s1等于s2,结果返回0;如果s1小于s2,结果返回-1。
REVERSE(s) 将字符串s的顺序反过来
SUBSTRING(s,a,b) 从字符串s中的第a个字符开始取b个字符

(三)日期和时间函数

函数 功能
CURDATE()和CURRENT_DATE() 获取当前日期
CURTIME()和CURRENT_TIME() 获取当前时间
NOW()、CURRENT_TIMESTAMP()、LOCALTIME()和SYSDATE() 获取当前的日期和时间
UNIX_TIMESTAMP() 以UNIX时间戳的形式返回当前时间
UNIX_TIMESTAMP(d) 将时间d以UNIX时间戳的形式返回
FROM_UNIXTIME(d) 把UNIX时间戳的时间转换为普通格式的时间
MONTH(d) 返回日期d中的月份值,其取值范围是1~12
MONTHNAME(d) 返回日期d中的月份的英文名称
YEAR(d) 返回日期d中的年份值
QUARTER(d) 返回日期d是本年第几季度,值的范围是1~4
HOUR(t) 返回时间t中的小时值
MINUTE(t) 返回时间t中的分钟值
SECOND(t) 返回时间t中的秒钟值

(四)条件判断函数

函数 功能
IF(expr,v1,v2) 如果表达式expr成立,返回结果v1;否则,返回结果v2。
IFNULL(v1,v2) 如果v1的不为空,就显示v1的值;否则就显示v2的值。
(五)系统信息函数
函数 功能
VERSION() 返回数据库的版本号
CONNECTION_ID() 返回服务器的连接数,也就是到现在为止MySQL服务的连接次数
DATABASE()和SCHEMA() 返回当前数据库名
USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()和CURRENT_USER 返回当前用户的名称
LAST_INSERT_ID() 返回最后生成的AUTO_INCREMENT值

(六)加密函数

函数 功能
PASSWORD(str) 可以对字符串str进行加密
MD5(str) 可以对字符串str进行加密
DECODE(crypt_str,pswd_str) 可以使用字符串pswd_str来为crypt_str解密

二、自定义函数

(一)语法

Create function function_name(参数列表)returns返回值类型

(二)叙述

  • 函数体、函数名,应合法的标识符,不应与系统关键字冲突。
  • 一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。
  • 参数部分,由参数名和参数类型组成。
  • 返回值类类型。注意,一定要有return返回值语句。

(三)举例

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$$

(四)查看自定函数

show function status;

三、事务

应用中的一个业务逻辑,往往由多条语句组合完成。那么我们就可以简单地将事务理解为一组SQL语句的集合,要么这个集合全部成功集合,要么这个集合就全部失败退回到第一句之前的状态。

(一)语法

  1. 开启事务start transaction,可以简写为 begin
  2. 然后记录之后需要执行的一组sql
  3. 提交commit
  4. 如果所有的sql都执行成功,则提交,将sql的执行结果持久化到数据表内。
  5. 回滚rollback
  6. 如果存在失败的sql,则需要回滚,将sql的执行结果,退回到事务开始之时。
  7. 无论回滚还是提交,都会关闭事务!需要再次开启,才能使用。
  8. 还有一点需要注意,就是事务只针对当前连接。

(二)举例

使用第一个链接A

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

结果成功,数据已经变成修改之后!但此时我们没有提交。再从其他连接B来查看,发现数据没有插入。此时如果连接A选择提交,也就是commit操作。则连接B的数据也会发生变化。而如果连接A选择回滚,也就是rollback操作。则连接A再次查询则发现数据还原。

(三)基本原理

提交,就会将结果持久化,不提交就不会。如果我们不开启事务,只执行一条sql,马上就会持久化数据,可以看出,普通的执行就是立即提交。这是因为MySQL默认对sql语句的执行是自动提交的。也就是说,开启事务,实际上就是关闭了自动提交的功能,改成了commit手动提交!
我们可以通过简单的对是否自动提交加以设置,完成开启事务的目的!
自动提交的特征是保存在服务的一个autocommit的变量内。可以进行修改:

Set autocommit = 0;

还需要注意一点,就是事务类似于外键约束,只被innodb引擎支持。

(四)事务的特点

事务的特点ACID。也就是原子性、一致性、隔离性和持久性。

  • 原子性:事务是不可分割的。
  • 一致性:保证数据在事务的执行周期内,是一致的!
  • 隔离型:多个事务之间的干扰关系!隔离级别!
  • 持久性:事务一旦被提交,就不可能再被回滚!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容