数据库对象
数据库对象是构成数据库结构的基本单位,它们定义了数据库存储的数据类型、数据的组织方式以及数据之间的关系。在数据库中,对象可以包括表,视图,索引,触发器,存储过程,函数等多种类型,每种类型的对象都有其特定的用途和功能。
数据库函数
MySQL函数是MySQL数据库提供的内部函数,这些内部函数可帮助用户更加方便的处理表中的数据。函数就像预定的公式一样存放在数据库里,每个用户都哭调用已经存在的函数来完成某些功能。
⚠️函数就是输入值然后得到相应的输出结果,输入值称为参数,输出值称为返回值。
函数库方便地实现业务逻辑的重用,并且MySQL数据库允许用户自己创建函数,以适应实际的业务操作。正确使用函数会让读者在编写sql语句时起到事半功倍的效果。
MySQL函数用来对数据表中的数据进行相应的处理,以便得到用户希望得到的数据,使MySQL数据库的功能更加强大。
MySQL函数包括数学函数,字符串函数,日期和时间函数,条件判断函数,系统信息函数和加密函数等。
数值型函数
1.取余函数MOD(x,y)
返回x被y除后的余数,MOD()对于带有小数部分的数值也起作用,它返回除法运算后的余数。
案例:
mysql> select mod(63,8),mod(120,10),mod(15.5,3);
+-----------+-------------+-------------+
| mod(63,8) | mod(120,10) | mod(15.5,3) |
+-----------+-------------+-------------+
| 7 | 0 | 0.5 |
+-----------+-------------+-------------+
1 row in set (0.00 sec)
2.取整函数
CEIL(X)和CEILING(X)的意义相同,返回不小于x的最小整数值,返回值转换为一个bigint。
案例1:
mysql> select ceil(-2.5),ceiling(2.5);
+------------+--------------+
| ceil(-2.5) | ceiling(2.5) |
+------------+--------------+
| -2 | 3 |
+------------+--------------+
1 row in set (0.01 sec)
FLOOR(X)函数返回小于x的最大整数值。
案例2:
mysql> select floor(5),floor(5.66),floor(-4),floor(-4.66);
+----------+-------------+-----------+--------------+
| floor(5) | floor(5.66) | floor(-4) | floor(-4.66) |
+----------+-------------+-----------+--------------+
| 5 | 5 | -4 | -5 |
+----------+-------------+-----------+--------------+
1 row in set (0.00 sec)
RAND()函数被调用时,可以产生一个在0和1之间的随机数。
案例3:
mysql> select rand(),rand(),rand();
+--------------------+--------------------+----------------------+
| rand() | rand() | rand() |
+--------------------+--------------------+----------------------+
| 0.6713687541627965 | 0.6082631588059134 | 0.027209562274822557 |
+--------------------+--------------------+----------------------+
1 row in set (0.00 sec)
由运行结果可知,每次调用rand()函数,都会随机生成一个0~1之间的随机数。
当时用整数作为参数时,rand()使用该值作为随机数的种子发生器。每次种子使用给定值生成,rand()将产生一个可重复的系列数字。
案例:
mysql> select rand(1),rand(),rand(1);
+---------------------+---------------------+---------------------+
| rand(1) | rand() | rand(1) |
+---------------------+---------------------+---------------------+
| 0.40540353712197724 | 0.31125836569001747 | 0.40540353712197724 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)
round(x)函数返回最接近x的整数
案例4:
mysql> select round(-6.6),round(-8.44),round(3.44);
+-------------+--------------+-------------+
| round(-6.6) | round(-8.44) | round(3.44) |
+-------------+--------------+-------------+
| -7 | -8 | 3 |
+-------------+--------------+-------------+
1 row in set (0.00 sec)
3.字符串函数
length(str)函数返回值为字符串str的字节长度。
案例1:
mysql> select length('name'),length('数据库');
+----------------+------------------+
| length('name') | length('数据库') |
+----------------+------------------+
| 4 | 6 |
+----------------+------------------+
1 row in set (0.00 sec)
concat(s1,s2,s3,…)函数返回结果为连接参数产生的字符串,或许有一个或者多个参数。
若有一个参数为null,则返回值为null。
案例2:
mysql> select concat('mysql','zbc'),concat('mysql',null);
+-----------------------+----------------------+
| concat('mysql','zbc') | concat('mysql',null) |
+-----------------------+----------------------+
| mysqlzbc | NULL |
+-----------------------+----------------------+
1 row in set (0.01 sec)
替换字符串函数insert(s1,x,len,s2)返回字符串s1,起始于x位置,并且用len个字符串长的字符串代替s2。
若 x 超过字符串长度,则返回值为原始字符串。假如 len 的长度大于其他字符串的长度,则从位置 x 开始替换。若任何一个参数为 NULL,则返回值为 NULL。
案例3:
mysql> select insert('mysql',2,4,'zbc') as col1,insert ('mysql',-1,4,'zbc') as col2 ,insert('mysql',3,20,'zbc') as col3;+------+-------+-------+
| col1 | col2 | col3 |
+------+-------+-------+
| mzbc | mysql | myzbc |
+------+-------+-------+
1 row in set (0.01 sec)
lower函数将字符串中所有的字母字符转换成小写
案例4:
mysql> select lower('BLUE'),lower('bule');
+---------------+---------------+
| lower('BLUE') | lower('bule') |
+---------------+---------------+
| blue | bule |
+---------------+---------------+
1 row in set (0.00 sec)
字母大写转换函数 UPPER(str) 可以将字符串 str 中的字母字符全部转换成大写。
案例5:
mysql> select upper('green'),upper('GREen');
+----------------+----------------+
| upper('green') | upper('GREen') |
+----------------+----------------+
| GREEN | GREEN |
+----------------+----------------+
1 row in set (0.00 sec)
LEFT(s,n) 函数返回字符串 s 最左边的 n 个字符。
案例6:
mysql> select left('mysql',3);
+-----------------+
| left('mysql',3) |
+-----------------+
| mys |
+-----------------+
1 row in set (0.00 sec)
RIGHT(s,n) 函数返回字符串 s 最右边的 n 个字符。
mysql> select right('mysql',3);
+------------------+
| right('mysql',3) |
+------------------+
| sql |
+------------------+
1 row in set (0.00 sec)
案例7:
使用 REPLACE 函数进行字符串替换操作
mysql> select replace('aaa.mysql.com','a','w');
+----------------------------------+
| replace('aaa.mysql.com','a','w') |
+----------------------------------+
| www.mysql.com |
+----------------------------------+
1 row in set (0.00 sec)
案例8:
使用 REVERSE 函数反转字符串
mysql> select reverse('hello');
+------------------+
| reverse('hello') |
+------------------+
| olleh |
+------------------+
1 row in set (0.00 sec)
4.日期和时间函数
CURDATE() 和 CURRENT_DATE() 函数的作用相同,将当前日期按照“YYYY-MM-DD”或“YYYYMMDD”格式
的值返回,具体格式根据函数用在字符串或数字语境中而定。
案例1:
mysql> SELECT CURDATE(),CURRENT_DATE();
+------------+----------------+
| CURDATE() | CURRENT_DATE() |
+------------+----------------+
| 2025-02-01 | 2025-02-01 |
+------------+----------------+
1 row in set (0.00 sec)
CURTIME() 和 CURRENT_TIME() 函数的作用相同,将当前时间以“HH:MM:SS”或“HHMMSS”格式返回,具体格式根据函数用在字符串或数字语境中而定。
案例2:
mysql> select curtime(),current_time();
+-----------+----------------+
| curtime() | current_time() |
+-----------+----------------+
| 16:52:17 | 16:52:17 |
+-----------+----------------+
1 row in set (0.00 sec)
NOW() 和 SYSDATE() 函数的作用相同,都是返回当前日期和时间值,格式为“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS”,具体格式根据函数用在字符串或数字语境中而定。
案例3:
mysql> select now(),sysdate();
+---------------------+---------------------+
| now() | sysdate() |
+---------------------+---------------------+
| 2025-02-01 16:53:17 | 2025-02-01 16:53:17 |
+---------------------+---------------------+
1 row in set (0.00 sec)
案例4:
使用month函数返回指定日期中的月份
mysql> select month('2025-02-01');
+---------------------+
| month('2025-02-01') |
+---------------------+
| 2 |
+---------------------+
1 row in set (0.00 sec)
案例5:
使用 MONTHNAME() 函数返回指定日期中月份的名称
mysql> select monthname('2025-02-01');
+-------------------------+
| monthname('2025-02-01') |
+-------------------------+
| February |
+-------------------------+
1 row in set (0.01 sec)
案例6:
使用 DAYNAME(date) 函数返回指定日期的工作日名称。
mysql> select dayname('2025-02-01');
+-----------------------+
| dayname('2025-02-01') |
+-----------------------+
| Saturday |
+-----------------------+
1 row in set (0.00 sec)
DAYOFWEEK(d) 函数返回 d 对应的一周中的索引(位置)。1 表示周日,2 表示周一,……,7 表示周六。这些索引值对应于ODBC标准。
案例7:
mysql> select dayofweek('2025-02-01');
+-------------------------+
| dayofweek('2025-02-01') |
+-------------------------+
| 7 |
+-------------------------+
1 row in set (0.00 sec)
案例8:
使用week函数查询指定日期是一年中的第几周
mysql> select week('2025-02-01');
+--------------------+
| week('2025-02-01') |
+--------------------+
| 4 |
+--------------------+
1 row in set (0.00 sec)
案例9:
DAYOFYEAR(d) 函数返回 d 是一年中的第几天,范围为 1~366。
mysql> select dayofyear('2025-02-01');
+-------------------------+
| dayofyear('2025-02-01') |
+-------------------------+
| 32 |
+-------------------------+
1 row in set (0.00 sec)