clause

MySQL多版本的时间类型问题

那年仲夏 提交于 2021-02-17 13:57:16
这是学习笔记的第 1758 篇文章 今天在处理一个业务的时候,碰到开发同学提交的一个需求。他在线上环境(MySQL5.5)中提交了一条SQL,期望创建几张表,但是抛出了错误。 其中一张表的建表SQL类似于: create table test( xxxxx, `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', ); 根据MySQL 5.5的特性,datetime还支持不了动态默认值。 所以他们斟酌再三,决定改写为timestamp类型。 我看到另外一张表的建表SQL: create table test2( xxxxx, `create_time` timestamp DEFAULT NULL COMMENT '创建时间', xxxx ); 显然在MySQL 5.5里面,timestamp类型是不支持default null的这种方式的。 在这一点上不存在额外的特性,就是timestamp的一个限制,在5.5,5.7都不支持default null。 哪怕我们改下需求,支持基于timestamp类型的动态默认值,下面的SQL也会抛出问题。 CREATE TABLE `qc_apeal` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT

《高性能MySQL》- 查询性能优化

99封情书 提交于 2021-02-17 02:11:15
二、查询性能优化 2.1 优化数据访问 2.1.1 只查询需要的列 2.1.2 只查询需要的行 响应时间 扫描行数和返回的行数 扫描行数和访问类型 如果扫描行数远远大于返回行数,优化方法: 使用覆盖索引 改变表结构。使用汇总表 重写复杂SQL 2.2 重构查询方式 2.2.1 一个复杂查询还是多个简单查询 连表数据重复很多时,减少冗余记录查询 可以使用缓存 可以使用异步查询 可以支持应用层分库分表 2.2.2 切分查询 使用分治思想,切分大查询为小查询,然后归并。在DML语句可以减少长事务对连接的持有时间,减少锁冲突 2.2.3 分解关联查询 连表数据重复很多时,减少冗余记录查询 可以使用缓存 可以使用异步查询 可以支持应用层分库分表 可能提升性能。比如IN按ID顺序查询,比连表随机查找更快 相当于使用了哈希索引,而不是嵌套循环查询 2.3 查询优化器局限 循环优化器不是每次都是最优结果。 2.3.1 关联子查询优化 一般建议使用左外连接来替代子查询 当返回结果只有一个表的某些列时,关联子查询会更好 不过每个具体的案例会各有不同,有时候子查询写法也会快些。例如,当返回结果中只有一个表中的某些列的时候。听起来,这种情况对于关联查询效率也会很好。具体情况具体分析,例如下面的关联,我们希望返回所有包含同一个演员参演的电影,因为一个电影会有很多演员参演,所以可能会返回一些重复的记录:

IBM DB2 SQL error code list

冷暖自知 提交于 2021-02-13 13:57:09
SQL return codes that are preceded by a minus sign (-) indicate that the SQL statement execution was unsuccessful. IBM DB2 SQL error code list 官方文档地址: https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/codes/src/tpc/db2z_n.html -007 STATEMENT CONTAINS THE ILLEGAL CHARACTER invalid-character -010 THE STRING CONSTANT BEGINNING string IS NOT TERMINATED -011 COMMENT NOT CLOSED -029 INTO CLAUSE REQUIRED -051 identifier-name (sql-type) WAS PREVIOUSLY DECLARED OR REFERENCED -056 AN SQLSTATE OR SQLCODE VARIABLE DECLARATION IS IN A NESTED COMPOUND STATEMENT -057 THE RETURN STATEMENT IN AN SQL

【Database】MySQL实战45讲

。_饼干妹妹 提交于 2021-02-09 20:29:57
01 | 基础架构:一条SQL查询语句是如何执行的? 1. MySQL 的基本架构图: MySQL可以分成: Server层 和 存储引擎层 两部分。 Server层:包含连接器、查询缓存、分析器、优化器、执行器等等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(日期,时间,数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程,触发器,视图等。 存储引擎层:负责数据的存储和提取,架构模式是插件式的,支持 InnoDB(默认的存储引擎) , MyISAM, Memory 等多个存储引擎。 【1】连接器 连接器负责和客户端建立连接,获取权限,维持和管理连接。 mysql -h$ip -P$port -u$user -p 连接器要和服务端建立连接。 (1)TCP握手 (2)认证user身份 (3)去权限表里面查询user拥有的权限。(此后这个连接里面的权限判断逻辑,都将依赖于此时读到的权限) 这就意味着,一个用户建立成功连接之后,即使你用管理员账号对这个用户的权限做了修改,也不会影响到已经存在连接的权限。 修改完成之后,只有再新建的连接才会使用新的权限设置。 MySQL查看现在所有的连接: mysql> show processlist; command 列的 Sleep 状态表示现在系统里面有一个空闲连接。 客户端如果太长时间没有动静

MySQL 8.0 incompatible with sql_mode=only_full_group_by问题解决

十年热恋 提交于 2021-02-02 00:32:25
1、问题 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'yysc.rjscid' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 2、 解决办法 2.1、暂时关闭 先执行 select @@sql_mode 将值查询出来,然后将结果中的ONLY_FULL_GROUP_BY去掉 set @@SESSION.sql_mode='去掉ONLY_FULL_GROUP_BY的@@sql_mode值'; 2.2、永久解决 linux下使用vim 打开mysql /etc/my.cnf(windows是安装目录下的my.ini)文件,加上以下配置,然后重启 sql_mode=select @@sql_mode查出sql_mode以后去掉ONLY_FULL_GROUP_BY的值 来源: oschina 链接: https://my.oschina.net/u/4111991/blog/4940904

基于机智云物联网平台MCU模式基础教程及远程OTA

对着背影说爱祢 提交于 2021-01-26 19:42:31
编写背景: 用户如果将开发了的产品发布上线销售,后期需要更新固件和程序,就需要用到远程OTA固件升级,就能对已发布的产品进行远程升级。 材料准备: 1. 机智云 4G模组GC211,此模组采用中移模组ML302,需烧录机智云 GAgent 固件,可在机智云淘宝店铺购买或者联系商务获取,此模组支持网络,移动,联通,电信4G网络,可前往机智云官方和淘宝店铺购买。 https://shop159680395.taobao.com/ 2.秉火【F103开发板-指南者】 正文: 云端部署 创建新产品,可根据自己需求选择。 添加如下数据点,可根据自己需求 生成 STM32 F103代码下载备用 简述STM32 启动 ARM7/ARM9 内核的控制器在复位后,CPU 会从存储空间的绝对地址0x000000 取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC =0x000000)同时中断向量表的位置并不是固定的。然而,Cortex-M3 内核启动有3 种情况: 1、通过boot 引脚设置可以将中断向量表定位于SRAM 区,即起始地址为0x2000000,同时复位后PC 指针位于0x2000000 处; 2、通过boot 引脚设置可以将中断向量表定位于FLASH 区,即起始地址为0x8000000,同时复位后PC 指针位于0x8000000 处; 3

API 分页设计与实现探讨

我的梦境 提交于 2021-01-26 07:10:07
对于设计和实现 API 来说,当结果集包含成千上万条记录时,返回一个查询的所有结果可能是一个挑战,它给服务器、客户端和网络带来了不必要的压力,于是就有了分页的功能。 通常我们通过一个 offset 偏移量或者页码来进行分页,然后通过 API 实现类似请求: GET /api/products?page= 10 { "items" : [.. .100 products]} 如果要继续访问后续数据,则修改分页参数即可。 GET /api/products?page= 11 { "items" : [...another 100 products]} 在使用 offset 的情况下,通常使用 ?offset=1000 和 ?offset=1100 这种大家都熟悉的方法。它要么直接调用 OFFSET 1000 LIMIT 100 的 SQL 查询数据库,要么使用 LIMIT 乘以 page 作为查询参数。无论如何, 这是一个次优的解决方案 ,因为无论哪种数据库都要跳过前面 offset 指定的 1000 行。而跳过额外的offset,不管是 PostgreSQL,ElasticSearch还是 MongoDB 都存在额外开销,数据库需要对它们进行排序,计数,然后将前面不用的数据扔掉。 粉丝福利: 手撸了 50 个 Java 项目实战后,我超神了! 这是一种低效的方法,但由于它使用简单

API 分页探讨:offset 来分页真的有效率?

浪尽此生 提交于 2021-01-25 13:46:55
对于设计和实现 API 来说,当结果集包含成千上万条记录时,返回一个查询的所有结果可能是一个挑战,它给服务器、客户端和网络带来了不必要的压力,于是就有了分页的功能。 通常我们通过一个 offset 偏移量或者页码来进行分页,然后通过 API 实现类似请求: GET /api/products? page =10 { "items" : [ .. .100 products]} 如果要继续访问后续数据,则修改分页参数即可。 GET /api/products? page =11 { "items" : [ .. .another 100 products]} 在使用 offset 的情况下,通常使用 ?offset=1000 和 ?offset=1100 这种大家都熟悉的方法。它要么直接调用 OFFSET 1000 LIMIT 100 的 SQL 查询数据库,要么使用 LIMIT 乘以 page 作为查询参数。 无论如何, 「这是一个次优的解决方案」 ,因为无论哪种数据库都要跳过前面 offset 指定的 1000 行。而跳过额外的offset,不管是 PostgreSQL,ElasticSearch还是 MongoDB 都存在额外开销,数据库需要对它们进行排序,计数,然后将前面不用的数据扔掉。 这是一种低效的方法,但由于它使用简单,所以大家重复地用这个方法,也就是直接把 API

MySQL出现SELECT list is not in GROUP BY clause..

坚强是说给别人听的谎言 提交于 2021-01-19 18:16:13
[toc] 报错现象 执行SQL报错如下: SELECT student.s_no,student.s_name,SUM(result.mark) FROM student,result WHERE student.s_no=result.s_no GROUP BY student.s_no > 1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db_ketest.student.s_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by > 时间: 0.081s 原因 MySQL5.7.5及以上版本有依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认开启),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。) 解决方法

一条MySQL查询语句的执行流程

强颜欢笑 提交于 2021-01-18 06:32:41
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的。 比如,在我们从student表中查询一个id=2的信息: select * from student where id = 2; 在解释这条语句执行流程之前,我们看看MySQL的基础架构。 MySQL的逻辑架构 Server层包括连接器、查询缓存、分析器、优化器、执行器 ,涵盖 MySQL 的大多数核心服务功能,以及所有的 内置函数 ,所有 跨存储引擎的功能 都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取 。其架构模式是插件式的,支持InnoDB、MyISAM、Memory 等多个存储引擎,MySQL默认的存储引擎是InnoDB。 1, 连接器 我们在使用数据库之前,需要连接到数据库,连接语句是 mysql -h $ip -u $username -p $password 而我们的连接器就是处理这个过程的,连接器的主要功能是 负责跟客户端建立连接、获取权限、维持和管理连接 ,连接器在使用的过程中如果该用户的权限改变,是不会马上生效的,因为用户权限是在连接的时候读取的,只能重新连接才可以更新权限 连接器与客户端通信的协议是 tcp 协议的,连接以后可以使用 show processlist; 看到执行的连接数 MySQL [abc]> show processlist; +------+