主流数据库之MySQL函数和MySQL数据操作基础知识及示例

文章目录

目录

文章目录

前言

4.3、MySQL函数

数学函数

字符串函数

日期和时间函数

条件判断函数

系统信息函数

加密函数

其他函数

4.4、MySQL数据操作

数据管理

数据添加

插入单行或多行记录

利用子查询插入数据

简单数据查询

数据更新

数据删除

数据删除(TRUNCATE)


前言

本文主要讲了关于数据库中的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()输出10~50和15~55之间的任意整数。随机函数rand()返回的随机数大于等于0小于1。 round(x,y)返回x保留到小数点后y位的值,在截取时进行四舍五入处理。

SELECT RAND(),ROUND(40*RAND(),0), 10+round(40*rand(),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开始。

猜你喜欢

转载自blog.csdn.net/qq_46007633/article/details/123946709