文章目录
- MySQL编程基础
-
- 常量与变量
-
- 常量
-
- 字符串常量
- 数值常量
- 日期和时间常量
- 布尔值常量
- NULL值
- 变量
-
- 局部变量
- 全局变量
- 常用系统函数
-
- 字符串函数
-
- 计算字符串字符数和长度
- 合并字符串
- 字符串大小写转换
- 删除空格
- 取子串
- 数学函数
- 日期和时间函数
-
- 获取当前系统的日期及取日期的年月日
- 获取当前系统的日期时间
- 系统信息函数
- 条件控制函数
-
- IF
- CASE
- 数据类型转换函数
MySQL编程基础 常量与变量 常量
字符串常量 字符串常量指用单引号或双引号括起来的字符序列。在MySQL中推荐使用单引号。
mysql> SELECT * FROM products WHERE prod_id='BR01';
+----+---------+-------------------+------------+
| id | prod_id | prod_name| prod_price |
+----+---------+-------------------+------------+
|4 | BR01| 8 inch teddy bear |5.99 |
+----+---------+-------------------+------------+
1 row in set (0.00 sec)考虑下面的SQL命令为什么没有输出mysql> SELECT * FROM products WHERE 'prod_id'='BR01';
Empty set (0.04 sec)
数值常量 数值常量可以分为整数常量和小数常量
将产品编号为BR03的产品价格改为1250(用科学计数法表示)
mysql> UPDATE products SET prod_price=1.25E+3 WHERE prod_id='BR03';
Query OK, 1 row affected (0.14 sec)
Rows matched: 1Changed: 1Warnings: 0mysql> SELECT * FROM products WHERE prod_id='BR03';
+----+---------+--------------------+------------+
| id | prod_id | prod_name| prod_price |
+----+---------+--------------------+------------+
|6 | BR03| 18 inch teddy bear |1250.00 |
+----+---------+--------------------+------------+
1 row in set (0.00 sec)
日期和时间常量 新增一列为产品生产日期,默认值为’2022-04-02 12:00:00’
文章图片
对数值稍作修改
文章图片
查询生产日期大于’2022-04-02 13:30:00’的产品
mysql> SELECT * FROM products WHERE prod_date>'2022-04-02 13:30:00';
+----+---------+-------------+------------+---------------------+
| id | prod_id | prod_name| prod_price | prod_date|
+----+---------+-------------+------------+---------------------+
|8 | RYL01| King doll|9.99 | 2022-04-03 12:00:00 |
|9 | RYL02| Queen dool|9.99 | 2022-04-03 12:00:00 |
| 19 | MR01| toy dog|5.00 | 2022-04-03 12:00:00 |
| 23 | MR02| toy dog|2.00 | 2022-04-03 12:00:00 |
+----+---------+-------------+------------+---------------------+
4 rows in set (0.00 sec)
布尔值常量 查询产品价格是否大于7的返回结果
mysql> SELECT prod_name,prod_price>7 FROM products;
+---------------------+--------------+
| prod_name| prod_price>7 |
+---------------------+--------------+
| Fish bean bag toy|0 |
| Bird bean bag toy|0 |
| Rabbit bean bag toy |0 |
| 8 inch teddy bear|0 |
| 12 inch teddy bear|1 |
| 18 inch teddy bear|1 |
| Raggedy Ann|0 |
| King doll|1 |
| Queen dool|1 |
| toy dog|0 |
| toy dog|0 |
+---------------------+--------------+
11 rows in set (0.00 sec)
NULL值 新增一行产品价格为空的信息
mysql> SELECT * FROM products WHERE prod_id='MR03';
+----+---------+-----------+------------+---------------------+
| id | prod_id | prod_name | prod_price | prod_date|
+----+---------+-----------+------------+---------------------+
| 12 | MR03| NULL|NULL | 2022-04-02 12:00:00 |
+----+---------+-----------+------------+---------------------+
1 row in set (0.00 sec)
给为NULL的产品价格加10会返回什么?
给为1250的产品价格加NULL会返回什么?
mysql> UPDATE products SET prod_price=prod_price+10 WHERE prod_id='MR03';
Query OK, 0 rows affected (0.04 sec)
Rows matched: 1Changed: 0Warnings: 0mysql> SELECT * FROM products WHERE prod_id='MR03';
+----+---------+-----------+------------+---------------------+
| id | prod_id | prod_name | prod_price | prod_date|
+----+---------+-----------+------------+---------------------+
| 12 | MR03| NULL|NULL | 2022-04-02 12:00:00 |
+----+---------+-----------+------------+---------------------+
1 row in set (0.00 sec)mysql> UPDATE products SET prod_price=prod_price+NULL WHERE prod_price=1250;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1Changed: 1Warnings: 0mysql> SELECT * FROM products WHERE prod_id='BR03';
+----+---------+--------------------+------------+---------------------+
| id | prod_id | prod_name| prod_price | prod_date|
+----+---------+--------------------+------------+---------------------+
|6 | BR03| 18 inch teddy bear |NULL | 2022-04-02 12:00:00 |
+----+---------+--------------------+------------+---------------------+
1 row in set (0.00 sec)
可以看到NULL+10=NULL; 1250+NULL=NULL;
变量
局部变量 查询产品编号为BR01的产品价格并赋值给变量price
mysql> SET @price=(SELECT prod_price FROM products WHERE prod_id='BR01');
Query OK, 0 rows affected (0.04 sec)mysql> SELECT @price;
+--------+
| @price |
+--------+
|5.99 |
+--------+
1 row in set (0.03 sec)
查询产品编号为BR02的产品名称和产品价格并分别赋值给name_v和price_v
mysql> SELECT prod_name,prod_price INTO @name_v,@price_v FROM products WHERE prod_id='BR02';
Query OK, 1 row affected (0.00 sec)mysql> SELECT @name_v,@price_v;
+--------------------+----------+
| @name_v| @price_v |
+--------------------+----------+
| 12 inch teddy bear |8.99 |
+--------------------+----------+
1 row in set (0.00 sec)
根据变量所给的值查询指定产品的信息
mysql> SET @p_id='BR03';
Query OK, 0 rows affected (0.00 sec)mysql> SELECT * FROM products WHERE prod_id=@p_id;
+----+---------+--------------------+------------+---------------------+
| id | prod_id | prod_name| prod_price | prod_date|
+----+---------+--------------------+------------+---------------------+
|6 | BR03| 18 inch teddy bear |NULL | 2022-04-02 12:00:00 |
+----+---------+--------------------+------------+---------------------+
1 row in set (0.00 sec)
全局变量
mysql> SELECT @@back_log;
/*返回MySQL主要连接请求的数量*/
+------------+
| @@back_log |
+------------+
|151 |
+------------+
1 row in set (0.00 sec)mysql> SELECT @@basedir;
/*返回MySQL安装基准目录*/
+-----------+
| @@basedir |
+-----------+
| D:\MySQL\ |
+-----------+
1 row in set (0.00 sec)mysql> SELECT @@license;
/*返回服务器的许可类型*/
+-----------+
| @@license |
+-----------+
| GPL|
+-----------+
1 row in set (0.00 sec)mysql> SELECT @@port;
/*返回服务器侦听TCP/IP连接所用的端口*/
+--------+
| @@port |
+--------+
|3306 |
+--------+
1 row in set (0.00 sec)mysql> SELECT @@version;
/*返回服务器版本号*/
+-----------+
| @@version |
+-----------+
| 8.0.19|
+-----------+
1 row in set (0.00 sec)
查看所有的全局变量
mysql> SHOW GLOBAL VARIABLES;
会返回很多信息,建议模糊查找,比如
mysql> SHOW GLOBAL VARIABLES LIKE 'sto%';
+---------------------------------+-------+
| Variable_name| Value |
+---------------------------------+-------+
| stored_program_cache| 256|
| stored_program_definition_cache | 256|
+---------------------------------+-------+
2 rows in set, 1 warning (0.00 sec)
常用系统函数 字符串函数
计算字符串字符数和长度 CHAR_LENGTH:返回字符串所包含的字符个数
LENGTH:返回字符串的字节长度,一个汉字3个字节,一个数字或字母是一个字节
mysql> SELECT CHAR_LENGTH('mysql');
+----------------------+
| CHAR_LENGTH('mysql') |
+----------------------+
|5 |
+----------------------+
1 row in set (0.04 sec)mysql> SELECT LENGTH('mysql');
+-----------------+
| LENGTH('mysql') |
+-----------------+
|5 |
+-----------------+
1 row in set (0.00 sec)mysql> SELECT CHAR_LENGTH('汉字');
+-----------------------+
| CHAR_LENGTH('汉字')|
+-----------------------+
|2 |
+-----------------------+
1 row in set (0.00 sec)mysql> SELECT LENGTH('汉字');
+------------------+
| LENGTH('汉字')|
+------------------+
|6 |
+------------------+
1 row in set (0.00 sec)
合并字符串
mysql> SELECT CONCAT('MySQL版本:',@@version) 版本信息;
+--------------------+
| 版本信息|
+--------------------+
| MySQL版本:8.0.19|
+--------------------+
1 row in set (0.00 sec)
字符串大小写转换
mysql> SELECT LOWER(@str1) 转换为小写,UPPER(@str1) 转换为大写;
+-----------------+-----------------+
| 转换为小写| 转换为大写|
+-----------------+-----------------+
| mysql| MYSQL|
+-----------------+-----------------+
删除空格 只能删除前后空格,不能删除字符串中间的空格
mysql> SET @str1=' MySQL ';
mysql> SELECT LTRIM(@str1) 删除前导空格,RTRIM(@str1) 删除尾部空格,TRIM(@str1) 删除两侧空格;
+--------------------+--------------------+--------------------+
| 删除前导空格| 删除尾部空格| 删除两侧空格|
+--------------------+--------------------+--------------------+
| MySQL|MySQL| MySQL|
+--------------------+--------------------+--------------------+
取子串 SUBSTRING(str,start,length)
首字母为M的产品编号
mysql> SELECT * FROM products WHERE SUBSTRING(prod_id,1,1)='M';
+----+---------+-----------+------------+---------------------+
| id | prod_id | prod_name | prod_price | prod_date|
+----+---------+-----------+------------+---------------------+
| 10 | MR01| toy dog|5.00 | 2022-04-03 12:00:00 |
| 11 | MR02| toy dog|2.00 | 2022-04-03 12:00:00 |
| 12 | MR03| NULL|NULL | 2022-04-02 12:00:00 |
+----+---------+-----------+------------+---------------------+第四个字符为3的产品编号
mysql> SELECT * FROM products WHERE SUBSTRING(prod_id,4,1)='3';
+----+---------+--------------------+------------+---------------------+
| id | prod_id | prod_name| prod_price | prod_date|
+----+---------+--------------------+------------+---------------------+
|6 | BR03| 18 inch teddy bear |NULL | 2022-04-02 12:00:00 |
| 12 | MR03| NULL|NULL | 2022-04-02 12:00:00 |
+----+---------+--------------------+------------+---------------------+
数学函数
mysql> SELECT ABS(-1) 绝对值,PI() AS π,SQRT(9) AS 平方根,MOD(9,4) AS 余数,ROUND(2.568,2) AS 四舍五入保留2位小数;
+-----------+----------+-----------+--------+------------------------------+
| 绝对值| π| 平方根| 余数| 四舍五入保留2位小数|
+-----------+----------+-----------+--------+------------------------------+
|1 | 3.141593 |3 |1 |2.57 |
+-----------+----------+-----------+--------+------------------------------+
日期和时间函数
获取当前系统的日期及取日期的年月日 CURDATE():返回当前系统日期
YEAR(d)、MONTH(d)、DAY(d):分别返回日期或日期时间d的年月日的值
mysql> SET @d=CURDATE();
Query OK, 0 rows affected (0.00 sec)mysql> SELECT @d,YEAR(@d),MONTH(@d),DAY(@d);
+------------+----------+-----------+---------+
| @d| YEAR(@d) | MONTH(@d) | DAY(@d) |
+------------+----------+-----------+---------+
| 2022-04-03 |2022 |4 |3 |
+------------+----------+-----------+---------+
查询产品生产日期距今几天(也可以是几年)
mysql> SELECT prod_name 产品名称,DAY(CURDATE())-DAY(prod_date) 距今几日 FROM products;
+---------------------+--------------+
| 产品名称| 距今几日|
+---------------------+--------------+
| Fish bean bag toy|2 |
| Bird bean bag toy|2 |
| Rabbit bean bag toy |2 |
| 8 inch teddy bear|1 |
| 12 inch teddy bear|1 |
| 18 inch teddy bear|1 |
| Raggedy Ann|1 |
| King doll|0 |
| Queen dool|0 |
| toy dog|0 |
| toy dog|0 |
| NULL|1 |
+---------------------+--------------+
获取当前系统的日期时间
mysql> SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
+---------------------+---------------------+---------------------+---------------------+
| CURRENT_TIMESTAMP() | LOCALTIME()| NOW()| SYSDATE()|
+---------------------+---------------------+---------------------+---------------------+
| 2022-04-03 21:42:10 | 2022-04-03 21:42:10 | 2022-04-03 21:42:10 | 2022-04-03 21:42:10 |
+---------------------+---------------------+---------------------+---------------------+
系统信息函数
mysql> SELECT USER() AS 用户,DATABASE() AS 当前数据库;
+----------------+-----------------+
| 用户| 当前数据库|
+----------------+-----------------+
| root@localhost | learn|
+----------------+-----------------+
条件控制函数
IF 返回前6条记录,如果产品价格为NULL时显示0,否则显示当前字段值。
mysql> SELECT prod_id 产品编号,IF(prod_price IS NULL,0,prod_price) 产品价格 FROM products LIMIT 6;
+--------------+--------------+
| 产品编号| 产品价格|
+--------------+--------------+
| BNBG01|3.49 |
| BNBG02|3.49 |
| BNBG03|3.49 |
| BR01|5.99 |
| BR02|8.99 |
| BR03|0 |
+--------------+--------------+
CASE 如果产品价格小于5元,为便宜,否则为贵;
mysql> SELECT prod_id 产品编号,prod_price 产品价格,
-> CASE
-> WHEN prod_price < 5 THEN '便宜'
-> ELSE '贵'
-> END 价格类型
-> FROM products;
+--------------+--------------+--------------+
| 产品编号| 产品价格| 价格类型|
+--------------+--------------+--------------+
| BNBG01|3.49 | 便宜|
| BNBG02|3.49 | 便宜|
| BNBG03|3.49 | 便宜|
| BR01|5.99 | 贵|
| BR02|8.99 | 贵|
| BR03|9.00 | 贵|
| RGAN01|4.99 | 便宜|
| RYL01|9.99 | 贵|
| RYL02|9.99 | 贵|
| MR01|5.00 | 贵|
| MR02|2.00 | 便宜|
| MR03|5.00 | 贵|
+--------------+--------------+--------------+
12 rows in set (0.00 sec)
数据类型转换函数
【SQL|MySQL数据库编程01】CAST(x AS 新类型)
CONVERT(x 新类型)
mysql> SELECT prod_name,prod_price INTO @name,@price FROM products WHERE prod_id='BR02';
Query OK, 1 row affected (0.00 sec)mysql> SELECT CONCAT(@name,'的价格是',CAST(@price AS CHAR(7))) 信息;
+------------------------------------+
| 信息|
+------------------------------------+
| 12 inch teddy bear的价格是8.99|
+------------------------------------+
推荐阅读
- SQL|关系数据库标准语言SQL02
- SQL|关系数据库标准语言SQL01
- 正则表达式教程(30分钟让你精通正则表达式语法)
- 云栖号技术分享|专访李飞飞 (从清华附中高材生到阿里飞刀,一口井钻出「云原生」)
- java|主题(JAVA 桥接模式)
- SQL|如何实现高性能的数据处理\数据库性能优化
- 架构|Java大牛带你4小时开发一个SpringBoot+vue前后端分离博客项目
- 一文读懂 MySQL Explain 执行计划
- MySQL索引(一)