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

【SQL实用技巧】update,inner join与select语句的联合使用

在实际操作数据库的时候,经常使用将update和select结合使用,例如使用select统计数据,然后update到对应的表,按照常规的实现方式,先select出来对应的数据,然后再执行update语句...先建两个测试表table1和table2,两个表的数据很简单,其记录条数分别为2和4,具体如下: ​假如现在要统计table1的id对应在table2中有多少条记录,保存在total字段里,这是经常会遇到的需求...如果按照常规的实现,就会先用select语句从table2中统计好数值,然后再写一个update语句更新到table1中,更新语句还得循环。...这个过程还有很多问题,例如如果更新语句中,有些成功,有些失败,这时怎么处理,这是比较难搞的问题。 可以如下实现: ​执行完成之后,table1中的total字段的值就会被改成2和4。...其实就是update可以和inner join联合使用,这样就可以使用另一个表的数据更新到当前的表。 这个很实用,只是以前一直没有注意。

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

    老司机总结的12条 SQL 优化方案(非常实用)

    一、SQL语句及索引的优化 SQL语句的优化 1....只返回必要的列,用具体的字段列表代替 select * 语句 SELECT * 会增加很多不必要的消耗(cpu、io、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前者也需要经常更新...,就是“小表”)首先连接,再去连接结果集比较大的表,尽量减少join语句中的Nested Loop的循环总次数 优先优化Nested Loop的内层循环(也就是最外层的Join连接),因为内层循环是循环中执行次数最多的...,每次循环提升很小的性能都能在整个循环中提升很大的性能; 对被驱动表的join字段上建立索引; 当被驱动表的join字段上无法建立索引的时候,设置足够的Join Buffer Size。...比如有一个varchar(255)的列,如果该列在前10个或20个字符内,可以做到既使前缀索引的区分度接近全列索引,那么就不要对整个列进行索引。

    91030

    MySQL性能优化的最佳20+条经验

    因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例: 上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。...EXPLAIN 你的 SELECT 查询 使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。...查看rows列可以让我们找到潜在的性能问题。 ? type列: 连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别 key列: 使用到的索引名。如果没有选择索引,值是NULL。...这样,MySQL内部会启动为你优化Join的SQL语句的机制。 而且,这些被用来Join的字段,应该是相同的类型的。...无缓冲的查询 正常的情况下,当你在当你在你的脚本中执行一个SQL语句的时候,你的程序会停在那里直到没这个SQL语句返回,然后你的程序再往下继续执行。你可以使用无缓冲查询来改变这个行为。

    65010

    考前复习必备MySQL数据库(关系型数据库管理系统)

    sql的目录也整理一个思维导图: sql语句简介 结构化查询语言简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。...sql 语句就是对数据库进行操作的一种语言。 sql分三种类型: DDL语句,数据定义语句,定义了不同数据库,表,列,索引等数据库对象。...DML语句,数据操作语句,用于添加,删除,更新和查询数据库记录,并检查数据完整性。 DCL语句,数据控制语句,定义数据库,表,字段,用户的访问权限和安全级别。...事务由事务开始和事务结束之间执行的全体操作组成。 事务就是一组由sql语句组成的业务逻辑,只有事务内的所有sql语句都成功执行,整个事务才算成功,否则就是失败。...sql语句 sql语句: select lastname from persons select从数据库表中获取数据 update更新数据库表中的数据 delete从数据库表中删除数据 insert into

    6K10

    MySQL查询优化之道

    在 SQL 语句整个执行过程中,Optimizer 是最耗时的,但是也有第三方工具为了提高性能绕开 MySQL 的 Query Optimizer 模块,比如:handlersocket。...优化更需要优化的 Query 语句 应该优化并发高的 Query 语句,不至于高并发下,由于 SQL 导致应用程序卡死,比如 php-fpm 的大量等待,而且一个高并发的 Query 语句,如果走错执行计划...MySQL 的 join 只有一种算法 nested loop 也就是程序中的 for 循环,通过嵌套循环实现,驱动结果集越大,所需要循环的次数越多,访问被驱动表的次数也越多。...坏处: 假设表 a 其中有列 column ca 给其创建索引 indxaca: 每次更新 ca 的操作,都会调整因为更新所带来的键值变化后的索引信息,这样就会增加 IO 损耗,索引列也是要占用空间的,...join 语句中 join 条件字段类型不一致的时候 MySQL 无法使用索引。

    1.4K40

    1000行 MySQL 学习笔记,不怕你不会,就怕你不学!

    一般需用合计函数才会用 having SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。 f....-- 事务开启 START TRANSACTION; 或者 BEGIN; 开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。...执行多个语句,可使用BEGIN...END复合语句结构 -- 删除 DROP TRIGGER [schema_name.]trigger_name 可以使用old和new代替旧的和新的数据 更新操作...-- 退出循环 退出整个循环 leave 退出当前循环 iterate 通过退出的标签决定退出哪个循环 --// 内置函数 ---------- -...列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv 当使用REVOKE时,您必须指定与被授权列相同的列。

    1.7K40

    超过500行的Mysql学习笔记

    适用于简化列标识,避免多个列标识符重复。 - 使用 as 关键字,也可省略 as. select stu+10 as add10 from tb; b. from 子句 用于标识查询来源。...因为执行WHERE代码时,可能尚未确定列值。 where 不可以使用合计函数。一般需用合计函数才会用 having SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。...执行多个语句,可使用BEGIN...END复合语句结构 -- 删除 DROP TRIGGER [schema_name.]trigger_name 可以使用old和new代替旧的和新的数据 更新操作,更新前是...-- 退出循环 退出整个循环 leave 退出当前循环 iterate 通过退出的标签决定退出哪个循环 --// 内置函数 ---------- -- 数值函数 abs(x)-- 绝对值 abs(-10.9...列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv 当使用REVOKE时,您必须指定与被授权列相同的列。

    1.3K60

    一千行 MySQL 详细学习笔记(值得学习与收藏)

    一般需用合计函数才会用 having SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。 f....-- 事务开启 START TRANSACTION; 或者 BEGIN; 开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。...执行多个语句,可使用BEGIN...END复合语句结构 -- 删除 DROP TRIGGER [schema_name.]trigger_name 可以使用old和new代替旧的和新的数据 更新操作...-- 退出循环 退出整个循环 leave 退出当前循环 iterate 通过退出的标签决定退出哪个循环 --// 内置函数 ---------- -...列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv 当使用REVOKE时,您必须指定与被授权列相同的列。

    2.8K20

    1000行 MySQL 学习笔记,不怕你不会,就怕你不学!

    一般需用合计函数才会用 having SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。 f....-- 事务开启 START TRANSACTION; 或者 BEGIN; 开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。...执行多个语句,可使用BEGIN...END复合语句结构 -- 删除 DROP TRIGGER [schema_name.]trigger_name 可以使用old和new代替旧的和新的数据 更新操作...-- 退出循环 退出整个循环 leave 退出当前循环 iterate 通过退出的标签决定退出哪个循环 --// 内置函数 ---------- -...列层级:列权限适用于一个给定表中的单一列,mysql.columns_priv 当使用REVOKE时,您必须指定与被授权列相同的列。

    1.5K10

    MySQL 最经常使用的一千行

    适用于简化列标识,避免多个列标识符反复。 - 使用 as keyword,也可省略 as....where 不能够使用合计函数。一般需用合计函数才会用 having SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。f. order by 子句。...运行多个语句,可使用BEGIN...END复合语句结构-- 删除DROP TRIGGER [schema_name.]trigger_name能够使用old和new取代旧的和新的数据 更新操作,更新前是...-- 退出循环 退出整个循环 leave 退出当前循环 iterate 通过退出的标签决定退出哪个循环--// 内置函数 ------------ 数值函数abs...列层级:列权限适用于一个给定表中的单一列。mysql.columns_priv 当使用REVOKE时,您必须指定与被授权列同样的列。

    1.4K10
    领券