函数:
在mysql里支持很多的函数,函数就如java的方法一般,都会有一个返回值,函数帮助我们完成sql语句无法做到的事情,而且数据库是可以进行数据库编程的,所以也会有流程控制语句,不过一般来讲程序员不需要使用到那么复杂的函数组合和流程控制语句。那些都是DBA数据库管理员需要干的事情,程序员只需要了解掌握一些必须和经常使用的函数和控制语句即可。
函数示例:
PASSWORD() 将文本加密成MD5密码
NOW() 拿到当前时间
TRIM() 去除空格
CONCAT() 字符串合并
USER() 获得当前登录的用户名
时间函数:
TIME() 只返回时间
DATE() 只返回日期
YEAR() 只从日期中返回年份
MONTH() 只从日期中返回月份
数学函数:
PI() 圆周率
RAND() 随机数
SELECT ASCII('a') 将字符转换成ASCII码
SELECT CHAR(65) 将ASCII码转换成字符
SELECT LTRIM(' assda') 去除左边空格
SELECT RTRIM(' asdfsf ') 去除右边空格
SELECT TRIM(' fdg sdg ') 去除左右空格
SELECT CONCAT('Zero','One','123456'); 将字符串合并在一起
SELECT LEFT('abcdefg',5); 从左边开始截取5位
SELECT RIGHT('abcdefg',3); 从右边开始截取3位
SELECT UCASE('abcdefg'); 转换成大写
SELECT UPPER('ABCDEFG'); 转换成小写
往一个字符串里插入一个字符串
SELECT INSERT('abcdefg',5,5,'java'); 从字符串的第5个位置开始替换5个字符
SELECT INSERT('abcdefg',5,0,'java'); 从字符串的第5个位置开始插入一个字符串
SELECT LENGTH('AAAAAAAAAA'); 得到字符串的长度
SELECT REVERSE('abcdefg'); 将字符串倒序
SELECT DAYOFWEEK(SYSDATE()) 获得给的时间是这个星期的第几天(从星期天开始算)
SELECT WEEKDAY(SYSDATE()) 获得这是这个月的第几周
SELECT DAYOFMONTH(SYSDATE()) 获得这个月的第几天
SELECT DAYOFYEAR(SYSDATE()) 获得给的时间是今年的第几天
SELECT DAYNAME(SYSDATE()) 返回星期几(英文格式)
SELECT YEAR(SYSDATE()) 返回年
SELECT MONTH(SYSDATE()) 返回月
SELECT DAY(SYSDATE()) 返回日
SELECT HOUR(SYSDATE()) 返回小时
SELECT MINUTE(SYSDATE()) 返分钟
SELECT QUARTER(SYSDATE()) 获得当前时间是第几个季度
SELECT NOW() 获得现在的时间
SELECT DATE_FORMAT(SYSDATE(),'%Y-%m-%d %r') 转换日期格式
SELECT DATE_FORMAT(SYSDATE(),'%Y-%m-%d %H:%i:%s') 转换日期格式
SELECT ABS() 绝对值
SELECT ROUND(3.2322) 舍去小数
SELECT ROUND(3.1223,2) 后面保留两位小数
SELECT RAND() 1以内的随机数
SELECT RAND()*10 获得10以内的随机数
SELECT PASSWORD() mysql的MD5加密
SELECT MD5() MD5库的加密
流程控制:
SELECT IF(1=2,45,78) 类似于三元运算
SELECT IFNULL(NULL,'asdasdasda') 返回一个不是NULL的值
SELECT NULLIF(NULL,'asdasdasdasd') 返回为NULL的值
分支条件:
SELECT sid,IF(sex=0,'男','女') sex
WHEN 0 THEN '女'
WHEN 1 THEN '男'
ELSE '人妖'
END sex, NAME FROM stu;
SELECT CAST('2018-08-08' AS DATE) 字符串转换成日期类型
SELECT CAST('2018-08-08 22:22:22' AS DATETIME) 字符串转换成日期时间类型
SELECT CAST('11:11:11' AS TIME)字符串转换成时间类型
匹配范围值1(使用关键字):
BETWEEN 匹配范围关键字
SELECT * FROM stu WHERE DATE(times) BETWEEN '2017-10-12' AND '2017-11-11'; 查询日期为2017-10-12到2017-11-11范围内皰据
匹配范围值2(使用时间函数):
SELECT * FROM stu WHERE YEAR(times)=2017 AND MONTH(times)=9; 查询2017年9月份的所有数据
SELECT CASE sname WHEN 'java' THEN 'JAVA' ELSE 'null'
END sname FROM student1
查询读音相近的
SELECT * FROM student1 WHERE SOUNDEX(sname)=SOUNDEX('java')
触发器:
触发器就是一段代码,触发器里面可以写任意的sql语句,写了触发器后只要对表格进行了操作,都会调用触发器,调用触发器后就会执行里面写的代码,不过触发器分为前置触发器和后置触发器,触发器可以用来做日志、对表格操作、表格被操作后的通知:
1.前置触发器 在对表格操作的时候先调用触发器
2.后置触发器 在对表格操作的时候先操作完之后才调用触发器
触发器是申请在表格里面的,使用UPDATE DELETE INSERT语句对表格操作的时候就会调用触发器,使用SELECT语句是不会调用触发器的。
创建触发器的语句必须要在触发器创建的界面才可以执行:
创建触发器:
代码示例:
这是一个前置触发器,触发器的名称为dogs_tri,对dogs表格进行update操作的时候就会调用这个触发器,调用触发器后会在触发器表里插入一条数据,这条数据记录的是对dogs表格进行插入的那条数据。new是用来获得对dogs表插入的新数据,然后将获得的数据插入到dogs_log这张表格里。
Update触发器示例:
这个触发器写两条insert语句是因为一条插入旧的数据,一条插入新的数据,old可以获得dogs表执行update语句前的数据,然后将获得的两个新旧数据插入到dogs_log这张表格里。
Delete触发器示例:
删除表格数据的时候自然是记录删除前的数据。
删除触发器:
使用结构删除语句来删除,因为触发器也属于表格的一种。