最近在看公司的存储过程,接触了一些之前没用过的MySQL函数。这篇博客做一个记录总结。
for update :select for update 是为了在查询时,对这条数据进行加锁,避免其他用户以该表进行插入,修改或删除等操作,造成表的不一致性.
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
已存在 不存在
insert 报错 插入 insert into names(name, age) values(“小明”, 23);
insert ignore 忽略 插入 insert ignore into names(name, age) values(“小明”, 24);
replace 替换 插入 replace into names(name, age) values(“小明”, 25);
LOCATE(substr,str) 返回子串 substr 在字符串 str 中第一次出现的位置。 如果子串 substr 在 str 中不存在,返回值为 0
LOCATE(substr,str,pos) 返回子串 substr 在字符串 str 中的第 pos 位置后第一次出现的位置。如果 substr 不在 str 中返回 0
SELECT LOCATE('q', 'asqdfasdfser') 返回 3
SELECT LOCATE('q', 'asqdfasqdfser',4) 返回 8
SELECT * from mydb.new_name where locate('6', logID) 这句话的意思是 从mydb的new_name表中筛选出logID带6的那一行数据
substring(str, pos, len) 从第pos取,取len长度
Cast(字段名 as 转换的类型 )
FIND_IN_SET(str,strlist)
如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N。
如果str不在strlist 或strlist 为空字符串,则返回值为 0
ceil 向上取整
floor 向下取整
round 四舍五入
ELT(n,str1,str2,str3,...) :如果n=1,则返回str1,如果n=2,则返回str2,依次类推。如果n小于1或大于参数个数,返回NULL。
FIELD(str,str1,str2,str,str3,str4...):返回str 在后面的参数列(str1,str2,str,str3,str4...)中的索引,起始索引为1。如果未在参数列中发现str 则返回0。
IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
IFNULL(expr1,expr2),如果expr1的值为null,则返回expr2的值,如果expr1的值不为null,则返回expr1的值。
NULLIF(expr1,expr2),如果expr1=expr2成立,那么返回值为null,否则返回值为expr1的值。
ISNULL(expr),如果expr的值为null,则返回1,如果expr1的值不为null,则返回0。