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。也就是原子性、一致性、隔离性和持久性。

  • 原子性:事务是不可分割的。
  • 一致性:保证数据在事务的执行周期内,是一致的!
  • 隔离型:多个事务之间的干扰关系!隔离级别!
  • 持久性:事务一旦被提交,就不可能再被回滚!

你可能感兴趣的:(MySQL:函数和事务)