美文网首页
MySQL数据库:函数和事务

MySQL数据库:函数和事务

作者: 虞锦雯 | 来源:发表于2017-06-14 13:59 被阅读1075次
    一、函数

    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数据库:函数和事务

          本文链接:https://www.haomeiwen.com/subject/phdjqxtx.html