文章目录
前言
本文主要讲了关于数据库中的MySQL函数以及MySQL数据操作,其实一些操作在前边也有写过,大家可以去专栏找对应的文章。另外,走过路过的小伙伴们点个赞和关注再走吧,欢迎评论区交流,大家一起努力一起成长吧!
笔芯
4.3、MySQL函数
MySQL函数按功能不同主要分为以下几类:
数学函数
数学函数主要用于处理数字,包括整型、浮点数等。
数学函数包括绝对值函数、正弦函数、余弦函数、获取随机数的函数等。如下:
abs:返回表达式的绝对值
acos:反余弦函数,返回以弧度表示的角度值
asin:反正弦函数,返回以弧度表示的角度值
atan:反正切函数,返回以弧度表示的角度值
ceil:返回大于或等于指定数值表达式的最小整数
cos:返回余弦值
degree:弧度值转换为角度值
exp:返回给定表达式为指数的e值
floor:返回小于或等于指定数值表达式的最大整数
greatest:获得一组数中的最大值
Least:获得一组数中的最小值
log:返回给定表达式的自然对数
log10:返回给定表达式的以10 为底的对数
PI:常量,圆周率
pow:返回给定表达式的指定次方的值
radians:角度值转换为弧度值
rand:返回0~1之间的随机noat数
round:返回指定小数的位数的表达式的值
sign:返回某个数的符号
sin:返回正弦值
sqrt:返回给定表达式的平方根
tan:返回正切值
例:
SELECT mod(31,8), floor(3.67), ceil(4.71), log(2.7);
例:用随机数rand()和四舍五入round()输出1050和1555之间的任意整数。随机函数rand()返回的随机数大于等于0小于1。 round(x,y)返回x保留到小数点后y位的值,在截取时进行四舍五入处理。
SELECT RAND(),ROUND(40RAND(),0), 10+round(40rand(),0),15+round(40*rand(),0);
字符串函数
主要用于处理字符串数据和表达式。MySQL中的字符串函数包括计算字符串长度函数、合并函数、替换函数、比较函数和查找字符串位置函数等。如下:
char_length:返回字符串中字符的个数。
concat:返回连接参数产生的字符串
left:返回从字符串左边开始指定个数的字符
length:返回给定字符串字节长度
lower:将大写字符数据转换为小写字符数据后返回字符表达式
trim:删除起始和结束空格后返回字符表达式
replace:用第3个表达式替换第一个字符串表达式中出现的所有第2个给定字符串表达式
repeat:以指定的次数重复字符表达式
reverse:返回字符表达式的反转
right:返回从字符串右边开始指定个数的字符
ltrim/rtrim:删除起始/尾随空格后返回一个字符串
space:返回由重复的空格组成的字符串
substring:求子串函数
upper:返回将小写字符数据转换为大写的字符表达式
例:用concat()函数连接字符串,lower()函数转变为小写字母。concat()函数返回来自于参数连接的字符串,如果任一参数是null,则返回null。可以有超过2个的参数。数字参数会被变换为等价的字符串形式。
SELECT lower(concat("MY","SQL","8.0")),concat("ABC",null,"DEF"),
concat("ABC","DEF");
例:用trim()函数可删除字符串两侧的空格。再用concat()函数连接起来。
SELECT '( qwe )', concat('(',trim(' qwe '),')');
例:用substring()函数返回指定字符串(如下为第二位到第四位,如果只有一个数字,则表示从那一位到最后),再用reverse()逆序输出
SELECT substring('ABCDEF',2,4), reverse(substring('ABCDEF',2));
日期和时间函数
主要用于处理表中的日期和时间数据。日期和时间函数包括获取当前日期的函数、获取当前时间的函数、计算日期的函数和计算时间的函数等。
curdate:获取当前系统的日期
curtime:获取当前系统的时间
date_add:可以对日期和时间进行加法运算
date_sub:可以对日期和时间进行减法运算
datediff:计算两个日期相隔的天数
date_format:用来格式化日期值
day:获取指定日期的日期整数
dayname:以英文名方式显示,返回指定日期是星期几,如Tuesday等
dayofmonth:返回指定日期在一个月中的序数
dayofweek:返回指定日期在一个星期中的序数
dayofyear:返回指定日期在一年中的序数
hour:返回指定时间的小时数
minute:返回指定时间的分钟数
month:获取指定日期的月份整数
now/sysdayte:返回当前日期和时间
quarter:获取指定日期的季度整数
second:返回指定时间的秒钟数
time_format:用来格式化时间值
例:利用curdate()返回当前日期,curtime()返回当前时间
SELECT curdate(),curtime();
例:返回的指定日期是在一年中第几天、一个月中的第几天、一星期中的第几天(一个星期中第一天是周天来算)。
SELECT dayofyear(20200130),dayofmonth('2022-09-18'),dayofweek(now());
date_add()和date_sub()函数可以分别用来对日期和时间进行增加和减少日期值。
格式:date_add | date_sub(date, interval int keyword);
其中: date表示日期和时间,interval关键字表示一个时间间隔。以下为关键字
以及对应的间隔值的格式
day:日期
minute:分钟
day_hour:日期∶小时
minute_second:分钟∶秒
day_minute:日期∶小时∶分钟
month:月
day_second:日期∶小时∶分钟∶秒
second:秒
hour:小时
year:年
hour_minute:小时∶分钟
year_month:年-月
hour_ second:小时∶分钟∶秒
例:计算指定时间的15分钟前是什么时间(在指定时间上减15分钟)。计算指定时间的15分钟后是什么时间(在指定时间上加15分钟)
SELECT date_sub('2020-09-30 10:10:10' , interval 15 minute),DATE_ADD('2020-09-30 10:10:10',INTERVAL 15 minute);
例:距离9月18日还有多少天。用datediff计算两个日期相隔的天数(嘿嘿嘿,还有168天过生日)
SELECT datediff('2020-12-31',now());
date_format()和time_format()函数可以用来格式化日期和时间值。
格式:date_format/ time_format(date | time, fmt)
date和time是需要格式化的日期和时间值;fmt是日期和时间值格式化的形式。
关键字和间隔值的格式如下:
%oa:缩写的星期名(Sun,Mon...>
%p:AM或PM
%b:缩写的月份名(Jan,Feb...)
%r:时间,12小时的格式
%d:月份中的天数
%S:秒(00,01)
%H %h:小时,分别为24小时和12小时格式
%T:时间,24小时的格式
%i:分钟(00,01..>
%ow :一周中的天数(0,1)
%j:一年中的天数((001,002..)
%w:长型星期的名字(Sunday,Monday...)
%m:月份,2位(00,01...)
%Y:年份,4位
例:按照指定格式码输出日期和输出时间。
SELECT date_format(now(), '%W,%d,%m, %Y ,%T,%p'),
time_format('16:20:10' ,' %H %i %S');
条件判断函数
条件判断函数也称为控制流程函数,根据满足的不同条件,执行相应的流程。
if(expr,v1,v2):如果表达式expr是true(expr<>0 and expr<>NULL),则返回v1,否则返回v2。
ifnull(v1,v2):假如v1不为NULL,则返回v1,否则返回v2。
case expr when v1 then r1 ...[else rn] end
如果expr值等于某个vn,则返回对应then后面的结果,如果所有值都不相等,则返回else后面的rn。
例:使用if()函数进行条件判断
SELECT if(1>2,1,2),if(1>2,'yes' ,'no');
例:用ifnull()函数进行条件判断
SELECT ifnull(1,2),ifnull(null,10),ifnull(1/0,'error');
例:用case when语句执行分支操作
SELECT case 2 when 1 then 'one' when 2 then 'two' else 'more' end;
系统信息函数
系统信息函数用来查询MySQL数据库的系统信息。
函数和对应的功能如下:
Database():返回当前数据库名
benchmark(n,expr):将表达式expr重复运行n次
charset(str):返回字符串str的字符集
connection_id():返回当前客户连接服务器的次数
found_rows():将最后一个MySQL>select查询(没有以limit语句进行限制)返回的记录行数返回
get_lock(str,dur):获得一个由字符串str命名的并且有dur秒延时的锁定
is_free_lock(str):检查以str命名的锁定是否释放
last_insert_id():返回由系统自动产生的最后一个autoincrement id的值
master pos_wait(log,pos,dur):锁定主服务器dur秒直到从服务器与主服务器的日志log指定的位置pos同步
release_lock(str):释放由字符串str命名的锁定
user()或system_user():返回当前登录用户名
version():返回MySQL服务器的版本
例:返回MySQL服务器的版本、当前数据库名和当前用户名信息,并查看当前用户连接MySQL服务器的次数。
SELECT version(), database(), user(), connection_id();
加密函数
加密函数主要用来对数据进行加密和界面处理,以保证某些重要数据不被人获取,从而保证数据库安全。函数如下:
MD5(str):为字符串算出一个md5 12s比特校验和。该值以32位十六进制数字的二进制字符串形式返回。
SHA(str):从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时返回NULL。比md5更加安全。
SHA(str,hash_length):使用hash_length作为长度,加密str。 hash_length支持的值为224、256、384、512和0。其中0等同于256
例:用password(str)函数加密
SELECT md5('ice'), sha('ice'), sha2('ice',256);
其他函数
格式化函数:FORMAT(x,n)把数值x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串的形式返回。若n为0,则返回结果函数不含小数部分。
例:SELECT format(12345.123456,4), format(12345.1,4), format(12345.1,0);
改变字符集的函数:CONVERT(..USING...)用于在不同的字符集之间转换数据
例:将给定字符串字符集转为utf8
SELECT charset('asd'),charset(convert('asd' using utf8));
4.4、MySQL数据操作
数据管理
使用数据操纵语言(DML操作包括对表数据的添加、更新、删除操作。)和数据查询语言(DQL操作包括对表数据的查询操作)可以对表中数据进行管理。
数据添加
使用INSERT INTO语句添加数据
插入单行或多行记录
INSERT INTO 表名 [(列名1,列名2...)] VALUES(列名1的数据1,列名2的数据1...),(列名1的数据2,列名2的数据2)..;
其中:
如果INTO子句中没有指明任何列名,则VALUES子句中列值的个数、顺序、类型必须与表中列的个数、顺序、类型相匹配
如果在INTO子句中指明了列名,则VALUES子句中提供的列值的个数、顺序、类型必须与指定列的个数、顺序、类型按位置对应
【示例】向部门表插入一行记录
INSERT INTO department(deptno,dname,loc)VALUES(50,'name50','loc50');
例:向员工表插入多条记录
INSERT INTO employee VALUES
(1001,'zs ','PROGRAMMER',1002,'2015-10-20',1000,null,50),
(1002,'ls','MANAGER',null,'2010-01-01',3000,500,50),
(1003, 'ww','PROGRAMMER',1002,'2012-12-30',2000,200,50);
例:向员工表的指定字段插入数据
INSERT INTO employee(empno,ename,job,hiredate,sal,deptno)
VALUES(1004,'test ,'CLERK' ,2016-10-20',2000,50);
利用子查询插入数据
INSERT INTO 表名1 SELECT *|[列名1...] FROM 表名2;
向表中插入其他表的数据,这也是成批插入数据的一种方式。但注意要求要有相同的结构。
例:将DEPT表的记录插入DEPARTMENT表中(要注意自己数据库中是否有这两个表,以及DEPT表中有没有数据哦。)
INSERT INTO department SELECT*FROM dept;
例:将EMP表的记录插入EMPLOYEE表中
INSERT INTO user(id,name,age,email)
SELECT id,name,age,email FROM user1;
简单数据查询
SELECT * | 列名1 ,列名2...]FROM 表名 WHERE condition;其中:
“*表示查询该表中的所有列
WHERE用于指定查询条件。如果不省略,则在执行SELECT语句时,系统会
首先根据WHERE子句的条件表达式condition从FROM子句指定的基本表中查找满足条件的记录,再按SELECT子句中的目标列或目标表达式形成结果表。
例:查询员工表中所有列的记录
SELECT * FROM employee;
例:查询符合条件的员工的部分列的信息
SELECT empno,ename,job,sal,comm
FROM employee
WHERE comm IS NULL;
数据更新
UPDATE 表名
SET col_name1=expr1 [,col_name2=expr2 ...][WHERE子句]
说明:
set子句:根据where子句中指定的条件,对符合条件的数据行进行修改。若语句中不设定where子句,则更新所有行。
expr1、expr2……可以是常量、变量或表达式。可以同时修改所在数据行的多个列值,中间用逗号隔开。
例:更新表中所有数据
UPDATE employee SET deptno=50;
将员工表中有奖金的员工的奖金增加200元
UPDATE employee SET comm=comm+200 WHERE comm IS NOT NULL;
数据删除
DELETE FROM 表名 [WHERE condition];
其中WHERE指定被删除记录符合的条件,若省略则删除所有记录。
例:
删除所有员工数据
DELETE FROM employee;
删除1004号员工数据
DELETE FROM employee WHERE empno=1004;
注意:删除的数据与其他表有外键联系时,会提示提示删除失败。应该先删除外键约束子表中所有记录,然后再删除主表相应记录
数据删除(TRUNCATE)
清空数据表
TRUNCATE TABLE 表名;
注意:不仅清空表的全部内容,同时自增长ID也会从0开始。
版权归原作者 ice三分颜色 所有, 如有侵权,请联系我们删除。