那么既然要说跟进,后面的情节才够真实和现实,开发同学找到语句,修改花了些时间,今天突然联系到我,说已经修改完成了。我也从v$sql中抓取了几条语句,发现执行计划已经改变。...,他们反馈出现问题后,立即回退了代码,但是日志保留了下来,让我看看是什么问题。...原来他们也在debug,我告诉他们,不报错不代表没错,还是需要搞明白最根本的原因。...update确实能够正常执行,似乎也是预期的结果,那么做一条insert,看看效果。...这个我觉得也就是为什么开发的同学没有选用这个方法的根本原因。但是似乎他们没有找到更好的方法, 那么继续改进,就是我上次分享的,加入union all的部分。
如果 binlog 格式不为 row,那么在误操作数据后就没有办法做闪回操作,只能老老实实地走备份恢复流程。...最新 MySQL 面试题整理好了,大家可以在Java面试库小程序在线刷题。...slave until 我在测试环境搭建了两个 MySQL 节点,节点二延迟600秒,新建 a,b 两个表,每秒插入一条数据模拟业务数据插入。...*/; DROP TABLE `b` /* generated by server */ 从结果中我们可以看到 drop 所在语句的前一句开始位置是 35134,所以我们同步到 35134 (这个可别选错了...最新 MySQL 面试题整理好了,大家可以在Java面试库小程序在线刷题。
在状态 1 中,虽然节点 B 没有被直接访问,但是我依然建议你把节点 B(也就是备库)设置成只读(readonly)模式。这样做,有以下几个考虑: 1....接下来,我们再看看节点 A 到 B 这条线的内部流程是什么样的。下 图 2 中画出的就是一个 update 语句在节点 A 执行,然后同步到节点 B 的完整流程图。 ?...binlog 的三种格式对比 我在 第15篇 答疑文章中,和你提到过 binlog 有两种格式,一种是 statement,一种是 row。...所以,如果你在执行完一条 delete 语句以后,发现删错数据了,可以直接把 binlog 中记录的 delete 语句转成 insert,把被错删的数据插入回去就可以恢复了。...如果你是执行错了 insert 语句呢?那就更直接了。row 格式下,insert 语句的 binlog 里会记录所有的字段信息,这些信息可以用来精确定位刚刚被插入的那一行。
在状态 1 中,虽然节点 B 没有被直接访问,但是我依然建议你把节点 B(也就是备库)设置成只读(readonly)模式。这样做,有以下几个考虑: 1. ...接下来,我们再看看节点 A 到 B 这条线的内部流程是什么样的。下 图 2 中画出的就是一个 update 语句在节点 A 执行,然后同步到节点 B 的完整流程图。...binlog 的三种格式对比 我在 第15篇 答疑文章中,和你提到过 binlog 有两种格式,一种是 statement,一种是 row。...所以,如果你在执行完一条 delete 语句以后,发现删错数据了,可以直接把 binlog 中记录的 delete 语句转成 insert,把被错删的数据插入回去就可以恢复了。...如果你是执行错了 insert 语句呢?那就更直接了。row 格式下,insert 语句的 binlog 里会记录所有的字段信息,这些信息可以用来精确定位刚刚被插入的那一行。
在文章之前先提一下~~~ Jdrops0同学问到上次的黑客技能训练网址是这个:https://www.vulnhub.com国外的一个不错的网站。...> 输入一撇 ’ ,报错了,因为这样造成引号没有闭合导致了sql引号成双成对的爱情梦破灭。 那么同样,我们可以进行union查询。 为什么注入中要用哦order by 进行字段数的判断呢?...我们要查询users表中的admin 和admin对应的password没错,但是要用1,2,3来补齐字段。 那为什么我查询出来的这条记录不死admin呢?你要知道。...这个两个字段中不止admin这条记录,数据库一般会显示出第一条记录。 默认的语句就是: http://192.168.217.128/1.php?...以下是常见的注入叫法: POST注入:注入字段POST数据中。 Cookie注入:注入字段在cookie字段中。 延时注入:使用数据库延时特性注入。 搜索注入:注入处为搜索的地点。
来源:https://www.aneasystone.com/archives/2018/06/insert-locks-via-mysql-source-code.html 在之前的博客中,我写了一系列的文章...到这里我突然想起之前做过的 insert 加锁的实验,执行 insert 之后,如果没有任何冲突,在 show engine innodb status 命令中是看不到任何锁的,这是因为 insert...什么是隐式锁?隐式锁的意思就是没有锁! 点击关注公众号,Java干货及时送达 所以,根本就不存在之前说的先加插入意向锁,再加排他记录锁的说法,在执行 insert 语句时,什么锁都不会加。...这个锁的释放非常快,但是这个锁足以保证在插入数据的过程中其他事务无法访问记录所在的页。...另外,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的 Java/ MySQL 系列面试题和答案,非常齐全。
基础:在字符串中拼装数组时候应该用 { 与 } 括起来。 基础:!$re_1 || $re_2应该是!$re_1 && !$re_2或者!($re_1 || $re_2)。...基础:insert语句的values部分两个字段顺序错了。 性能:uname与email两个语句应该拼装成一个OR语句。...该题给出的答案并不太令人满意,通过这道题让我想到的是,应该怎么做才能尽量避免SQL注入? 使用mysqli批处理技术,bind_param() <?...has type string 字符串 b corresponding variable is a blob and will be sent in packets 二进制包 原理说明:为什么...:无论传多少值都是安全的,因为她已经被定义成一个参数,而非一条语句的部分; 预编译模式:在数据库层已经被编译成特定的执行方式,如select、insert等,不会因为后续的参数而改变执行方式; 内部自动转义特殊字符
那么,如果我把 binlog 的格式改为 binlog_format=‘row’, 是不是就没有这个问题了呢?我们先来看看这时候 binog 中的内容吧。...把格式改成row的话,我们是看不到详细信息的。还需要借助mysqlbinlog工具,用下面这个命令解析和查看binlog中的内容。从上图可以得知,这个事务的binlog是从8900这个位置开始的。...如果我执行的是 delete 语句,row 格式的 binlog 也会把被删掉的行的整行信息保存起来。...所以,如果你在执行完一条 delete 语句以后,发现删错数据了,可以直接把 binlog 中记录的 delete 语句转成 insert,把被错删的数据插入回去就可以恢复了。...如果你是执行错了 insert 语句呢? 那就更直接了。row 格式下,insert 语句的 binlog 里会记录所有的字段信息,这些信息可以用来精确定位刚刚被插入的那一行。
那为什么我单独把SQL拿出就报错了?...因为我通过Navicate美化了SQL,然后那个status好像被当作一个关键字来处理了,所以自动给将它转化成了大写,但是表里的字段是其实是小写的,所以导致这个问题。...__loadFromFields(invoice_headers.java:2162) ... 12 more 我也有点纳闷,这里的时间格式好像是对上了,这时候HIVE中的字段类型是String,MySQL...WHERE中的子查询 在hive中的子查询会有各种问题,这里的解决方法是将子查询改成JOIN的方式 先看一段在MySQL中的SQL,下不管这段SQL从哪来的,我也不知道从哪里来的 SELECT...CASE中的子查询 这个与上面是一样的,都是改成JOIN的方式。
JUL 是什么 JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框 架使用方便,学习简单,能够在小型应用中灵活使用。 ?...代码中如何使用(控制台输出) 1 首先创建一个maven项目 ? 2 写对应代码 ? ?...自定义输出级别 Java默认的只能输出3个级别,并且默认的还是输出到控制台。我们现在想要输出其他多个级别,并且输出到文件里面。那么如何做? 只能自定义输出级别了。...以上就是默认的,进行解释这个默认的配置: ? ?...UTF-8 # 指定日志消息格式 java.util.logging.SimpleFormatter.format = %4$s: %5$s [%1$tc]%n 我们还可以在配置自己的处理器,在配置文件里面把默认的关掉
大家好,我是渔夫子。今天我们学习gorm中的Save操作。...大纲如下: 概述 跟gorm.Create函数的行为不同,gorm.Save函数大体上有两个行为: 在待更新的数据不存在的情况下做插入操作 在待更新的数据存在的情况下做更新操作 数据是否存在的一个重要依据就是待更新的记录里是否存在主键字段..._01` (`name`,`userid`) VALUES ('Stone',100) 理由:在row中没有对应的主键Id字段,所有只做插入操作。...那为什么这里会再执行一次 Insert ... ON DUPLICATE KEY UPDATE 呢?这个主要是应用于存在唯一索引的情况下,因为主键本身就是一个特殊的唯一索引。...1.4 指定where条件 在Save函数中,Where条件和模型的主键若同时存在,则sql语句的where条件会转换成指定的where条件以及主键。
关于MySQL里的change和modify,总是看到两种不同的语法,在Oracle中语法有modify,如果修改表名有rename。...| name | address | +----+-------+----------+ | 1 | name1 | address1 | +----+-------+----------+ 这个没什么多说的...1 Duplicates: 0 Warnings: 0 如果使用change语句来做,就是下面的这样,两者在这方面是一样的功能。...,就会报错了,因为默认值还是0,就和已有的数据冲突了。...> delete from test_cm where id=1; Query OK, 1 row affected (0.00 sec) 这个时候的数据如下。
绝大部分开发者都意识到SQL注入漏洞的存在,在本文我想与读者共同去探讨另一种与SQL数据库相关的漏洞,其危害与SQL注入不相上下,但却不太常见。...在SQL中执行字符串处理时,字符串末尾的空格符将会被删除。...换句话说“vampire”等同于“vampire ”,对于绝大多数情况来说都是成立的(诸如WHERE子句中的字符串或INSERT语句中的字符串)例如以下语句的查询结果,与使用用户名“vampire”进行查询时的结果是一样的...接下来,当执行INSERT查询语句时,它只会插入前25个字符。...这个攻击已经在MySQL和SQLite上成功通过测试。我相信在其他情况下依旧适用。 防御手段 毫无疑问,在进行软件开发时,需要对此类安全漏洞引起注意。
问题排查 这张表是一个简单的接口服务在使用,每天大数据会统计一大批信息,然后推送给小A,小A将信息更新到数据库中,如果是新数据就插入,旧数据就更新之前的数据,对外接口就只有查询了。...ON DUPLICATE KEY UPDATE ...对主键的影响 这个语句跟REPLACE INTO ...类似,不过他并不会变更该条记录的主键,还是上面t1这张表,我们执行下面的语句,执行完结果是什么呢...当插入的语句类似insert into select ...这种复杂语句的时候,提前不知道插入的行数,这个时候就要要锁表(一个名为AUTO_INC的特殊表锁)了,这样auto_increment才是准确的...ON DUPLICATE KEY UPDATE ...也属于这种,这个时候会分析语句,然后按尽可能多的情况去分配auto_incrementid,这个要怎么理解呢,我看下面这个例子: truncate...此处 @总是迟到 多谢指出,看官方文档理解错了 模式0的话就是不管什么情况都是加上表锁,等语句执行完成的时候在释放,如果真的添加了记录,将auto_increment加1。
mapper configuration是用foreach循环做的,差不多是这样。...Docs中也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作中。...它强调,当插入数量很多时,不能一次性全放在一条语句里。可是为什么不能放在同一条语句里呢?这条语句为什么会耗时这么久呢?...在我们的项目中,会不停地使用批量插入这个方法,而因为MyBatis对于含有的语句,无法采用缓存,那么在每次调用方法时,都会重新解析sql语句。...如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。 点击领取2022最新10000T学习资料
点击关注公众号,Java干货及时送达 近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。...Docs中也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作中。...它强调,当插入数量很多时,不能一次性全放在一条语句里。可是为什么不能放在同一条语句里呢?这条语句为什么会耗时这么久呢?...另外,最新 MyBatis 面试题整理好了,大家可以在Java面试库小程序在线刷题。...在我们的项目中,会不停地使用批量插入这个方法,而因为MyBatis对于含有的语句,无法采用缓存,那么在每次调用方法时,都会重新解析sql语句。
大体的翻译就是:MySQL触发器仅由SQL语句对表级触发,视图不可以,API级别的表级操作也不会触发。 这个描述看起来没什么问题,毕竟触发器是确实存在于具体的表上的,由表来触发听起来无可厚非。...当然我也按捺不住,自己也测试一把,当然我是在在他的基础上做了调整,适当简化了下测试过程。 我们创建一个两个表,一个是基表,一个是记录表,一个是视图。...,update,delete操作 CREATE TRIGGER trigger_after_insert after INSERT ON main_table FOR EACH ROW INSERT...这里看起来没有什么特别的,我们来看看视图的情况,也是这里测试的一个关键。...table view_main_table_temp of the INSERT is not insertable-into 这个时候不确定before insert的触发器触发了吗,可以再补充一个触发器
一次线上数据恢复过程 这个周末过得相当充实,当我们做一些有意思的事情的时候,就会觉得周末的时间特别长。...了解到这个情况之后,我首先询问这个表现在还有没有数据写入,答案是没有,这个表只有在每天晚上固定的时间有数据写入,嗯,这是一个好现象,没有数据写入,那么恢复起来就不是什么大问题,当时我能想到的大体上可以通过下面几个方法来恢复...这个场景下,数据只有1000多条,很适合使用DML闪回的方法,直接从binlog中解析出数据,但是有一个先决条件,就是binlog的模式应该是row模式,binlog_row_images的值是image...,这个工具其实是github上面的一个开源工具,这里给出地址:https://github.com/danfengcao/binlog2sql 它可以比较快速的将binlog中的DML语句进行闪回,翻译成反向的...(0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 为了看的更加清楚,我们在创建表之前使用了flush logs语句对binlog进行了刷新
大家好,又见面了,我是你们的朋友全栈君。...原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。...2 JDBC接口、类介绍 1 JDBC中的主要类(接口) 在JDBC中常用的类有: l DriverManager – 类,用来获取Connection; l Connection – 接口; l...ClassNotFoundException:这个异常是在第1句上出现的,出现这个异常有两个可能: l 你没有给出oracle的jar包; l 你把类名称打错了,查看类名是不是oracle.jdbc.OracleDriver...如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。