二十六画生的博客
国内Top5硕士,先后在京东、字节从事多年后端开发、大数据开发。
展开
-
flinksql的 / 的结果只会保留整数部分,flinksql 不支持 div运算符。hive、 mysql : / 结果是小数, div 结果只会保留整数部分
flinksql的 / 的结果只会保留整数部分,flinksql 不支持 div运算符。hive、 mysql : / 结果是小数, div 结果只会保留整数部分mysql> select 3/2 ;+--------+| 3/2 |+--------+| 1.5000 |+--------+1 row in set (0.00 sec)mysql> mysql> mysql> select 3 div 2 ;+---------+| 3 ..原创 2022-03-29 10:16:53 · 3288 阅读 · 0 评论 -
SQL 10位时间戳 除以60 得到整分钟;group by event_ts/60<==> group by 1min
1648519200 2022-03-29 10:00:00/60 = 274753201648519260 2022-03-29 10:01:00/60= 274753211648519300 2022-03-29 10:01:40/60= 27475321.6666666666666671648519320 2022-03-29 10:02:00/60= 274753221648519360 2022-03-29 10:02:40/60= 27475322.6666666666原创 2022-03-29 10:10:12 · 761 阅读 · 0 评论 -
MySQL 截取整数位、小数位
mysql> select locate('.',7.2);+-----------------+| locate('.',7.2) |+-----------------+| 2 |+-----------------+1 row in set (0.00 sec)mysql> select left(7.2,locate('.',7.2));+---------------------------+| left(7.2,locate('...原创 2022-03-08 16:01:22 · 1978 阅读 · 0 评论 -
MySQL exists 原理/用法
执行过程IN的执行过程如下: 1.首先运行子查询,获取子结果集 2.主查询再去结果集里去找符合要求的字段列表,.符合要求的输出,反之则不输出。Exists执行顺序如下: 1.首先执行一次外部查询 2.对于外部查询中的每一行分别执行一次子查询,而且每次执行子查询时都会引用外部查询中当前行的值。 3.使用子查询的结果来确定外部查询的结果集。(如果外部查询返回100行,SQL 就将执行101次查询,一次执行外部查询,然后为外部查询返回的每一行执行一次子查询。但实际上,SQL的...原创 2022-01-23 18:51:36 · 3336 阅读 · 0 评论 -
Mysql 索引为啥使用B+树?不用哈希或B树?红黑树?
哈希索引:单个记录的增删改查效率高,时间复杂度是O(1);但对于范围查询需要全表扫描;B树:1 范围查询时效率比B+树低(B树的叶子结点缺少有序链表);2 内部节点(非叶子结点)既存储数据也存储索引,需要的存储空间比B+树多(B+树的内部节点不存储数据,只存储索引)红黑树:B树是多路树,红黑树是二叉树(红黑树一个节点只能存储一个值,B树一个节点可以存储多个值)红黑树的高度会更大,查找时红黑树的查找次数会更多(根据磁盘查找存取的次数往往由树的高度所决定)。为什么 MySQL .原创 2022-01-18 21:29:15 · 609 阅读 · 0 评论 -
row_number where 为何会报错?mysql / hive中均报错
为何会报错?1 如果是row_number之后再在where中直接取排名,为何会报错?比如: 1 2 3 4 5 6 7 select tag, uid, row_number()over(partitionbytagorderbytag,max_scoredesc,min_scoredesc,uiddesc)asrank_num--不能写r...原创 2021-11-17 21:28:43 · 7733 阅读 · 3 评论 -
Mysql lead 下一条 ; lag 上一条;用法
mysql> select * from exam_record ;+----+------+---------+---------------------+---------------------+-------+| id | uid | exam_id | start_time | submit_time | score |+----+------+---------+---------------------+----------------...原创 2021-10-24 22:08:25 · 2005 阅读 · 0 评论 -
mysql datetime 差值 diff 分钟,会截断秒数
mysql> select TIMESTAMPDIFF(MINUTE, '2018-03-20 09:00:00', '2018-03-20 09:19:00');+---------------------------------------------------------------------+| TIMESTAMPDIFF(MINUTE, '2018-03-20 09:00:00', '2018-03-20 09:19:00') |+-----------------------..原创 2021-10-24 14:49:21 · 528 阅读 · 0 评论 -
Mysql datetime取日期day,取每月最后一天,取每月天数
mysql> select day('2020-01-01 18:10:10') -> ;+----------------------------+| day('2020-01-01 18:10:10') |+----------------------------+| 1 |+----------------------------+1 row in set (0.00 sec)mysql> select ...原创 2021-10-23 16:10:42 · 1023 阅读 · 0 评论 -
mysql datetime取年月日
submit_time是datetime类型mysql> SELECT DATE_FORMAT( `submit_time`, "%Y-%m-%d" ) from exam_record ;+------------------------------------------+| DATE_FORMAT( `submit_time`, "%Y-%m-%d" ) |+------------------------------------------+| 2021-07-02 .原创 2021-10-23 15:29:06 · 6220 阅读 · 0 评论 -
Mysql表到多大数据量才开始分库分表?垂直切分/水平切分
分库分表是现在应对大量数据常用的手段,使用分库分表主要考虑:1、数据容量单表是否超过1000W2、单表容量到了1000W以上基本上稍微复杂一点的SQL都需要仔细优化,这时候的SQL耗时主要集中在磁盘IO上,数据命中缓存的概率降低,总之不好搞如果是正常的互联网项目,提前分库分表,在前期能做的先做了,后面会省很多时间处理数据迁移的事情...原创 2021-02-22 22:04:47 · 7738 阅读 · 0 评论 -
Mysql 聚簇索引和非聚簇索引的区别
聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。https://blog.csdn.net/alexdamiao/article/details/51934917聚簇索引:将数据存储与索引放到了一块,索引结.转载 2021-01-28 21:58:05 · 5504 阅读 · 0 评论 -
MySQL删除最大id的记录
-- 1报错delete from white_user where id = select max(id) from white_user ;-- 2报错delete from white_user a ,(select max(id) as max_id from white_user) b where a.id=b.max_id;--3正确delete a from...原创 2020-03-18 20:56:59 · 2211 阅读 · 1 评论 -
MySQL删除多余的重复记录,重复记录只保留一条
CREATE TABLE `white_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(100) DEFAULT NULL COMMENT '姓名', `sex` int(11) DEFAULT NULL COMMENT '性别,0是女生,1是男生', `created_ti...原创 2020-03-18 20:44:27 · 829 阅读 · 0 评论 -
union all的坑, FAILED: ParseException cannot recognize input near ‘(‘ ‘SELECT‘ ‘‘ in select clause
union all后面需要是用select查出的子表,不能是直接写一个子表名在那!!!SELECTc1,c2from t1 where ...... union all SELECTc1,c2from t2 where ...... -- 正确SELECTc1,c2from t1 where ...... union all (SELECTc...原创 2020-03-17 19:40:39 · 14373 阅读 · 0 评论 -
Mysql常用面试题(一)
表结构:CREATE TABLE `white_user_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(1000) NOT NULL COMMENT '姓名', `sex` int(11) DEFAULT NULL COMMENT '性别,0是女生,1是男生', `cre...原创 2020-03-05 19:19:39 · 517 阅读 · 0 评论 -
Mysql,delete ...select ,You can't specify target table 'white_user_new' for update in FROM clause 解决
不能依据某字段值做判断再来更新某字段的值(对同一表查询后,不能再delete或update )期望是:男生的name重复记录仅保留1条,其他的多余重复记录删除CREATE TABLE `white_user_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(1000) NOT N...原创 2020-03-05 19:02:34 · 319 阅读 · 0 评论 -
mac安装mysql,忘记初始密码怎么处理
1 去mysql官网下载mysql community 版本,https://dev.mysql.com/downloads/mysql/,点击页面上的Looking for the latest GA version?2 本地打开dmg文件,开始安装3 务必注意安装过程中弹出的窗口:含有初始密码信息!!务必要保留好,不然后续忘记初始密码会比较麻烦!!4 安装完成后,打开终...原创 2019-12-20 21:21:03 · 1676 阅读 · 0 评论 -
dos启动mysql
先切换到mysql所在的bin目录C:\Program Files\MySQL\MySQL Server 5.6\bin>mysql -u root -pEnter password: ****Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 22Server versi原创 2015-11-11 00:49:25 · 1109 阅读 · 0 评论 -
mysql常用命令
建表和建数据库与sql中一样,增删改查与sql也一样mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || db_1 || db_11 |原创 2016-01-23 19:21:30 · 395 阅读 · 0 评论 -
jdbc,if(res.next)判断结果失败
查询应该有结果的,却if(res.next)里面的语句却没有执行花了很长时间,究其原因,1 varchar类型的变量,没有单引号,结果为空,2 单引号与变量之间不能有空格,不然是=‘ 182’这样查询结果也是空,错误的: res = sql.executeQuery(" select id from user where id = " + regis原创 2016-05-24 00:03:36 · 1848 阅读 · 0 评论 -
Mysql多行插入,不使用存储过程
mysql> insert into student(name,address ) values('Tom','Beijing'),('Blak','Nanjing'),('Watt','Hefei');-----这样一次插入多行Query OK, 3 rows affected (2.36 sec)Records: 3 Duplicates: 0 Warnings: 0原创 2016-08-21 18:58:10 · 1130 阅读 · 0 评论 -
Mysql复习--添加字段,删除字段,一次多行插入,修改字段名和类型,分组查询,建类似表,
今天重新复习了下:仅是用到的部分,添加字段,删除字段,一次多行插入,修改字段名和类型,分组查询,建类似表(记录的插入步骤已省略)mysql> alter table score modify cno char(10); ----修改字段类型Query OK, 0 rows affected (2.35 sec)Records: 0 Duplicates: 0 Warnin原创 2016-08-21 18:53:41 · 815 阅读 · 1 评论 -
数据库的日期查询>=,<=
如果不带时分秒的话就是时分秒默认都是0带了的话时分秒才起作用以上是在sqlite数据库中,所以在sql,mysql中应该都一样原创 2016-11-16 23:12:20 · 599 阅读 · 0 评论 -
mysql去除重复
insert into t1 values('100',1,1,'2017-01-25');insert into t1 values('100',1,1,'2017-01-25');insert into t1 values('100',1,1,'2017-01-25');insert into t1 values('100',1,1,'2017-01-25');insert into原创 2017-02-06 23:03:05 · 725 阅读 · 0 评论 -
mysql,时间差值
修改时间在20分钟以内的记录使flag设置为Tselect * from book where id = 2;update book set flag ='T' where id =2 and timestampdiff(SECOND,update_time,now())原创 2017-02-07 14:57:58 · 2019 阅读 · 0 评论 -
mysql,case when else查询
-- 1select * from book ; -- 2select *,(case id when '2' then '二' else '保密' end) as numberfrom book ; -- 3select *,(case id when '%2%' then '二' -- 只能使用== 不能使用like原创 2017-01-17 16:06:11 · 1084 阅读 · 0 评论 -
Mysql,Between And时间
SELECT*FROM taskwhere created_time BETWEEN '2017-07-03' and '2017-07-04' ;表示2017-07-03 00:00:00 --2017-07-04 00:00:00,两个边界都包括,这段时间范围的记录,除此之外,其他时间范围均不包括原创 2017-07-05 15:47:16 · 16860 阅读 · 0 评论 -
Mysql索引类型
> show engines \G;mysql> show engines \G;*************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level lo原创 2017-08-09 19:38:28 · 348 阅读 · 0 评论 -
存储过程和触发器的区别
存储过程,你调用的时候才会执行触发器就是你设定了数据库里比如删除,修改,插入时,才会触发触发器不同于存储过程,触发器主要是通过事件执行触发而被执行的,而存储过程可以通过存储过程名称名字而直接调用。当对某一表进行诸如UPDATE、INSERT、DELETE这些操作时,SQLSERVER就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合这些SQL语句所定义的转载 2017-09-15 21:23:23 · 7354 阅读 · 0 评论 -
Mysql的Text和Blob的比较
MySQL存在text和blob:(1)相同在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格SQL模式,会产生错误,并且值将被拒绝而不是截取并给出警告.BLOB和TEXT列不能有 默认值.当保存或检索BLOB和转载 2017-09-24 20:09:07 · 4561 阅读 · 0 评论 -
mysql外键约束
-- drop table p_table;-- drop table c_table;CREATE TABLE p_table ( -- 父表 id int(11) NOT NULL auto_increment, p_name varchar(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB char set =转载 2017-09-16 13:54:30 · 713 阅读 · 0 评论 -
多线程查询、修改Mysql表会有冲突吗?
我用的存储引擎是MyISAM,有多个连接会同时select这张表,但不会修改这张表,这样操作会不会有冲突,会不会锁表?不会锁表,不会有冲突,MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对 MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;MyISAM表的读操作与写操作之间,以及写操作之间是串行的,读操作是并行的。http://转载 2017-09-16 14:40:21 · 6909 阅读 · 0 评论 -
MyISAM的锁与InnoDB的锁区别
MySQL的表锁有两种模式(即MyISAM引擎):表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般不需要直接用LOCK TABLE命令给MyISA...转载 2017-09-16 16:13:47 · 4491 阅读 · 0 评论 -
MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
InnoDB中,创建的表的表结构存储在.frm文件中(我觉得是frame的缩写吧)。数据和索引存储在innodb_data_home_dir和innodb_data_file_path定义的表空间中。InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frm、M转载 2017-09-16 16:33:45 · 1220 阅读 · 0 评论 -
MyISAM与InnoDb的区别
1 InnoDB支持事务,而MyISAM不支持事务。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。2 InnoDB支持行锁和表锁,MyISAM只支持表锁。即 MyISAM同一个表上的读锁和写锁是互斥的,MyISAM并发读写时如果等待队列中既有读...转载 2017-09-16 12:42:32 · 297 阅读 · 0 评论 -
Mysql,log_bin 与 sql_log_bin的区别
log_bin:二进制日志。说白了,就是把把在mysql里面执行的语句,记录在二进制日志里面而已。那么这些二进制日志有什么作用,你知道吗?1:数据恢复 如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失。 而且,你也可以利用二进制日志来还原你误操作的数据库。不过具体怎么操作还需要学的哟!2:主从服务器之间同步数转载 2018-01-13 14:09:10 · 10031 阅读 · 0 评论 -
SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
这个问题是解决以下问题出现的:java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp问题原因是因为JDBC url=jdbc:mysql://xxx.aliyuncs.com:3306/xxxxx?useUnicode=true&characterEn转载 2018-01-05 21:59:43 · 312 阅读 · 0 评论 -
根据建表语句生成实体类和查询用的ResultMap
import java.io.*;public class Main { public static void main(String[] args) { String filePath = "D:\\00t1.txt"; Main main = new Main(); main.getModel(filePath);原创 2018-01-15 22:17:21 · 1706 阅读 · 1 评论 -
windows cmd进入mysql
在DOS命令窗口输入 mysql -hlocalhost -uroot -p回车 进入mysql数据库,其中-h表示服务器名,localhost表示本地;-u为数据库用户名,root是mysql默认用户名;-p为密码,如果设置了密码,可直接在-p后链接输入,如:-p123456,用户没有设置密码,显示Enter password时,直接回车即可。注意,如果你的mysql没有安装在C盘下原创 2018-01-07 16:58:08 · 1529 阅读 · 0 评论