Mysql关键字闭坑
INTERVAL
因为需求,所以数据设计时用到了一个INTERVAL字段,程序编译及启动都没有任何问题,但是到了查询的时候,直接控制台报语法异常,这就奇怪了,用的是MP插件作为查询,为啥报出语法错误,一脸懵! 排查了半个小时,摁是没有看出所以然,突然眼睛一亮看到,上面的控制台的sql无任何异常,果断拿到数据执行,依旧报语法错误,但是发现了INTERVAL字段变了颜色,第一反应就是关键字,后面一查果真如此,这个关键字很隐蔽,不经常使用,所以又整理了下面几个容易误导的关键字(举一反三哈哈哈),同时把interval用法梳理了一下,另外觉得几个有趣的函数也贴了出来分享:
CHECK:用于定义表级约束。
COLUMN:用于指定列的名称、数据类型和约束。
CREATE:用于创建数据库、表、视图、索引等。
DROP:用于删除数据库、表、视图、索引等。
INDEX:用于创建索引。
MODIFY:用于修改表中列的数据类型和约束。
RENAME:用于重命名数据库、表、列等。
TRUNCATE:用于清空表数据。
其他重要关键字:
union :连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。
column_name 为列名,table 为表名,[] 为可选条件,where conditions 为检索条件,
all 结果集中包含重复数据,distinct 为默认 结果集中不包含重复数据
select column_name1,column_name2...from table1[where conditions] union [all | distinct]select column_name1,column_name2...from table2[where conditions]
case:条件判断关键词
CASE [column_name] WHEN [value1] THEN [result1]... ELSE [default] END
selectCASE 'a'WHEN 'a' THEN '1'WHEN 'b' THEN '2'ELSE '3' END; -- 1
CASE WHEN [expr] THEN [result1]... ELSE [default] END
selectCASEWHEN 1 >= 2 THEN 'a'WHEN 3 >= 2 THEN 'b'ELSE 'c' END; -- b
在设计数据库和表结构时,为了避免与关键字冲突,建议遵循以下最佳实践:
字段命名规范:使用有意义的字段名,并遵循一定的命名规则,例如使用下划线分隔单词。
避免使用关键字:尽量不要使用MySQL的关键字作为字段名、表名或数据库名。
使用引号:如果确实需要使用关键字作为标识符(尽管不推荐这样做),可以使用反引号(`)将其括起来。但请注意,这可能会在未来的MySQL版本中引发问题,因为关键字列表可能会变化。
1.日期运算:
获取当前日期的前一天:
SELECT DATE(NOW() - INTERVAL 1 DAY);
-
时间运算:
获取当前时间的前 5 小时:SELECT TIME(NOW() - INTERVAL 5 HOUR);
-
数据查询:
查询最近一周的订单数据:SELECT * FROM orders WHERE order_date >= DATE(NOW() - INTERVAL 1 WEEK); 这将返回最近一周内的订单数据。
查询过去一个季度的销售额:
SELECT SUM(sales_amount) FROM sales WHERE sales_date >= DATE(NOW() - INTERVAL 3 MONTH)AND sales_date <= DATE(NOW()); 这将返回过去一个季度内的销售额总和。
查询今年的生日在本月的客户:
SELECT * FROM customers WHERE MONTH(birthday) = MONTH(NOW())AND YEAR(birthday) = YEAR(NOW());这将返回今年生日在当前月份的客户信息。