首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序员在写 SQL 时常犯的10个错误

解决方法: 每次你使用Java实现一个以数据为中心的算法时,问问自己:有没有一种方法可以让数据库代替为我做这种麻烦事。...ON子句中增加相关的判断。这会导致重复的记录,但或许只是在特殊的情况下。有些开发者因此可能选择DISTINCT来消除这些重复记录。...一些数据库理解其它形式的更新插入(UPSERT)语句, 如 MYSQL的重复主键更新语句,但是MERGE在数据库中确是很强大,很重要,以至于大肆扩展SQL标准,例如SQL SERVER。...解决方法: 如果你使用像联合INSERT和UPDATE或者联合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入时,请三思。...如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语 句。

15610

Java 程序员常犯的 10 个 SQL 错误

解决方法: 每次你使用Java实现一个以数据为中心的算法时,问问自己:有没有一种方法可以让数据库代替为我做这种麻烦事。...ON子句中增加相关的判断。这会导致重复的记录,但或许只是在特殊的情况下。有些开发者因此可能选择DISTINCT来消除这些重复记录。...一些数据库理解其它形式的更新插入(UPSERT)语句, 如 MYSQL的重复主键更新语句,但是MERGE在数据库中确是很强大,很重要,以至于大肆扩展SQL标准,例如SQL SERVER。...解决方法: 如果你使用像联合INSERT和UPDATE或者联合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入时,请三思。...如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语 句。

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 程序员常犯的 10 个 SQL 错误!

    ON子句中增加相关的判断。这会导致重复的记录,但或许只是在特殊的情况下。有些开发者因此可能选择DISTINCT来消除这些重复记录。...一些数据库理解其它形式的更新插入(UPSERT)语句, 如 MYSQL的重复主键更新语句,但是MERGE在数据库中确是很强大,很重要,以至于大肆扩展SQL标准,例如SQL SERVER。...解决方法: 如果你使用像联合INSERT和UPDATE或者联合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入时,请三思。...使用窗口函数: 使SQL更易读(但在子查询中没有GROUP BY语句专业) 提升性能,像关系数据库管理系统能够更容易优化窗口函数 解决方法: 当你在子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成...如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语 句。

    1.3K20

    Java 程序员常犯的 10 个 SQL 错误!

    ON子句中增加相关的判断。这会导致重复的记录,但或许只是在特殊的情况下。有些开发者因此可能选择DISTINCT来消除这些重复记录。...一些数据库理解其它形式的更新插入(UPSERT)语句, 如 MYSQL的重复主键更新语句,但是MERGE在数据库中确是很强大,很重要,以至于大肆扩展SQL标准,例如SQL SERVER。...解决方法: 如果你使用像联合INSERT和UPDATE或者联合SELECT .. FOR UPDATE然后在INSERT或UPDATE等更新插入时,请三思。...使用窗口函数: 使SQL更易读(但在子查询中没有GROUP BY语句专业) 提升性能,像关系数据库管理系统能够更容易优化窗口函数 解决方法: 当你在子查询中使用GROUP BY语句时,请再三考虑是否可以使用窗口函数完成...如果你的所有记录都插入到同一个表时,那么就创建一个带有一条SQL语句以及附带很多值集合的插入批处理语 句。

    1.2K20

    MySQL中DML语句和事务的概念「建议收藏」

    penalties SET amount = amount – @avg_amount; ##使用变量 5.update语句中的order by 语句 UPDATE语句中可以使用ORDER BY子句...BY paymentno DESC; ##降序排列后加1 语句释义:把所有罚款的编号增加1 6.update语句中的limit语句 UPDATE语句中可以使用LIMIT子句,指定一次更新的行数 示例...这些sql语句要么全部执行成功,要么全部执行失败 事务是保证数据的完整性和一致性的重要手段 事务类型 DML事务:由一条或者多条DML语句构成 DDL事务:总是由一条DDL语句构成 DCL事务...:总是由一条DCL语句构成 2.在MySQL中,系统变量@@autocommit默认是打开的,这意味着任何1条SQL语句都会开始一个事务,语句执行完后事务自动结束。...自动提交打开或者关闭对这些事务没有影响 对于DML事务,在自动提交关闭的情况下,事务的开始分为隐式开始和显式开始: 隐式开始:程序的第一条DML语句执行时或者在COMMIT或ROLLBACK语句之后执行第一条

    2K20

    MyBatis一级缓存详解

    在应用运行过程中,我们有可能在一次数据库会话中,执行多次查询条件完全相同的SQL,MyBatis 提供了一级缓存的方案优化这部分场景,如果是相同的SQL语句,会优先命中一级缓存,避免直接对数据库进行查询...可以看到,上面代码执行了三条相同的SQL语句,但是只有一条SQL语句进行了输出,其他两条SQL语句都是从缓存中查询的,所以它们生成了相同的 Dept 对象。...探究更新对一级缓存失效的影响 上面的代码执行了三次相同的查询操作,返回了相同的结果,那么,如果我在第一条和第二条SQL语句之前插入更新的SQL语句,是否会对一级缓存产生影响呢?...分别放开不同的更新语句,发现执行效果如下 输出结果: ? 如图所示,在两次查询语句中使用插入,会对一级缓存进行刷新,会导致一级缓存失效。...我们先来看一下 update 更新方法,先来看一下 update 的源码 @Override public int update(MappedStatement ms, Object parameter

    80331

    MySQL 核心模块揭秘 | 49 期 | 更新记录的 Undo 日志

    Update Undo 日志格式 Update 语句更新表中一条记录,先更新主键索引,再更新二级索引。...更新二级索引的流程为:遍历二级索引,每轮循环处理一个二级索引,如果当前二级索引包含 Update 语句的 Set 子句中指定的字段,则更新该二级索引,否则,不更新。...如果更新了 N 个字段(N >= 2),Undo 日志中,按照 Update 语句的 Set 子句中指定的字段顺序,写入更新字段在表中的位置、更新之前的字段值的长度、更新之前的字段值。...Update Undo 日志内容 示例 SQL 更新 t6 表中 的记录产生的 Undo 日志,如下图所示。...2,更新的字段数量。压缩之后占用 1 字节。如果 Update 语句的 Set 子句中指定的字段值,和表中对应字段的值不同,这个属性值就等于 Set 子句中指定的字段数量。

    6800

    Mysql_基础

    因此,要定义列标题必须在第一个查询语 句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。...更新记录 要修改表中已经存在的一条或多条记录,应使用SQL UPDATE语句。同DELETE语句一样,UPDATE语句可以使用WHERE子句来选择更新特定的记录。...WHERE first_column=’Update Me1’ 技巧 SQL忽略语句中多余的空格。你可以把SQL语句写成任何你最容易读的格式。...更新记录 要修改表中已经存在的一条或多条记录,应使用SQL UPDATE语句。同DELETE语句一样,UPDATE语句可以使用WHERE子句来选择更新特定的记录。...WHERE first_column=’Update Me1’ 技巧 SQL忽略语句中多余的空格。你可以把SQL语句写成任何你最容易读的格式。

    2.4K70

    Java开发者编写SQL语句时常见的10种错误

    解决办法 每次你在Java中实现以数据为中心的算法时,要试着问问自己:有没有办法让数据库执行这些工作,而只把结果交付给我?...解决办法 如果你从多个步骤的多个表中进行了SELECT操作,那要慎重考虑一下是否可以在一条语句中表达你所需要的查询功能。...但MERGE真的十分强大,最重要的是在数据库中,它在很大程度上扩展了SQL标准,如SQL Server。 解决办法 如果你通过链接INSERT和UPDATE或链接SELECT......解决办法 当你在一个子查询写一个GROUPBY子句时,仔细想想这是否能用一个窗口函数来完成。...你应该永远可能在Java内存中对数据进行排序,因为你认为: · SQL排序太慢 · SQL排序不能做到这一点 解决办法 如果你在内存中对任何SQL数据进行排序,请仔细想想,你是否能把排序迁移至数据库中

    1.8K50

    【MySQL 系列】MySQL 架构篇

    2.3、查询缓存 如果查询语句(select 语句),MySQL 就会先去查询缓存( Query Cache )里查找缓存数据,看看之前有没有执行过这一条命令,这个查询缓存是以 key-value 形式保存在内存中的...2.4、解析 SQL 在正式执行 SQL 查询语句之前, MySQL 会先对 SQL 语句做解析,这个工作交由解析器来完成。...3、UPDATE 语句执行原理 在数据库里面,我们说的 update 操作其实包括了更新、插入和删除。...3.3、UPDATE 更新过程 有了 Redo Log 和 Undo Log,我们来总结一下一个 Update 操作的流程。...UPDATE user set name = 'lizhengi' where id=1; 在执行前需要:① 连接器连接数据库;② 分析器通过词法分析和语法分析知道这是一条更新语句;③ 优化器决定要使用的索引等

    1.8K20

    【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四)

    MySQL 间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的 sql 语句,死锁发生了如何解决,MySQL 有没有提供什么机制去解决死锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。...在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。...FOR UPDATE语句来获取必要的锁,即使这些行的更改语句是在之后才执行的。...一条sql执行过长的时间,你如何优化,从哪些方面入手? 什么是最左前缀原则?什么是最左匹配原则?...FileSort 效率较低; ORDER BY 满足两种情况,会使用Index方式排序;①ORDER BY语句使用索引最左前列 ②使用where子句与ORDER BY子句条件列组合满足索引最左前列 尽可能在索引列上完成排序操作

    95310

    MySQL(九)插入、更新和删除

    常用的SQL语句,除了select用于查询,还有insert、update、delete等。...语句与上面的SQL语句完成同样的工作,但给出了列名,valuse必须以指定的次序匹配指定的列名,不一定按照列出现在表中的实际次序;优点是:即使表结构改变,此insert语句仍然正确工作。...二、更新数据 如果要更新(修改)表中的数据,可以使用update语句,有以下两种方法: ①更新表中特定行; ②更新表中所有行; update语句由三部分构成: ①要更新的表; ②列名和它们的新值; ③确定要更新行的过滤条件...; 例如:update usertable      set user_email = '3033310371@qq.com'      where user_id = '10086'; 这条SQL语句中...PS:如果用update更新多个行,且更新中一行或多行出现错误,则update操作将被取消(错误发生前执行的动作将被回滚到最初状态。

    2K20

    【建议收藏】MySQL 三万字精华总结 —锁机制和性能调优(四)「建议收藏」

    MySQL 间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的 sql 语句,死锁发生了如何解决,MySQL 有没有提供什么机制去解决死锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。...在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。...FOR UPDATE语句来获取必要的锁,即使这些行的更改语句是在之后才执行的。...如何写sql能够有效的使用到复合索引? 一条sql执行过长的时间,你如何优化,从哪些方面入手? 什么是最左前缀原则?什么是最左匹配原则?...FileSort 效率较低; ORDER BY 满足两种情况,会使用Index方式排序;①ORDER BY语句使用索引最左前列 ②使用where子句与ORDER BY子句条件列组合满足索引最左前列 尽可能在索引列上完成排序操作

    86630

    数据库sql常见优化方法

    查询条件有没有加索引?一语惊醒梦中人,赶紧检查..果然如此! 有时我们写sql语句时,没有考虑它的性能或者完全没有优化意识,虽然能暂时满足基本功能,等到数据量大时,后果可想而知。...下面我们就聊一聊sql优化的一些常见方法: 1)尽量不要用select * from table,除非需要返回数据库表的全部字段,否则不要返回用不到的任何字段。...索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update 的效率。 3) 尽量避免在 where 子句中使用 !...4)尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,引擎将放弃使用索引而进行全表扫描,如: select id from person_info where...11)update 语句,如果只更改1、2个字段,不要update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

    2.4K30
    领券