十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
用相关联的参数进行更新,比如关联的ID,父表中有一个id,子表中也有一个id,这两个id的值是一样的,这样就可以同时更新了
创新互联主要业务有网站营销策划、成都网站制作、做网站、微信公众号开发、小程序开发、H5场景定制、程序开发等业务。一次合作终身朋友,是我们奉行的宗旨;我们不仅仅把客户当客户,还把客户视为我们的合作伙伴,在开展业务的过程中,公司还积累了丰富的行业经验、成都营销网站建设资源和合作伙伴关系资源,并逐渐建立起规范的客户服务和保障体系。
REPLACE INTO A (item, sku, data)
SELECT
item, sku, data
FROM
B main
WHERE
NOT EXISTS (
SELECT 1
FROM B sub
WHERE main.item = sub.item
AND main.`time` sub.`time`
)
没测试过:
就简单解释一下:
REPLACE INTO 是表的合并语句
下面那个
SELECT * FROM WHERE
NOT EXISTS 是查询 相同 item 里面, time 最大的那行数据。
本期我们用 MySQL 提供的 DBUG 工具来研究 MySQL 的 SQL 处理流程。
起手先造个实例
这里得稍微改一下实例的启动文件 start,将 CUSTOM_MYSQLD 改为 mysqld-debug:
重启一下实例,加上 debug 参数:
我们来做一两个实验,说明 DBUG 包的作用:
先设置一个简单的调试规则,我们设置了两个调试选项:
d:开启各个调试点的输出
O,/tmp/mysqld.trace:将调试结果输出到指定文件
请点击输入图片描述
然后我们创建了一张表,来看一下调试的输出结果:
请点击输入图片描述
可以看到 create table 的过程中,MySQL 的一些细节操作,比如分配内存 alloc_root 等
这样看还不够直观,我们增加一些信息:
请点击输入图片描述
来看看效果:
请点击输入图片描述
可以看到输出变成了调用树的形式,现在就可以分辨出 alloc_root 分配的内存,是为了解析 SQL 时用的(mysql_parse)
我们再增加一些有用的信息:
请点击输入图片描述
可以看到结果中增加了文件名和行号:
请点击输入图片描述
现在我们可以在输出中找一下统计表相关的信息:
请点击输入图片描述
可以看到 MySQL 在这里非常机智,直接执行了一个内置的存储过程来更新统计表。
沿着 que_eval_sql,可以找到其他类似的统计表,比如下面这些:
请点击输入图片描述
请点击输入图片描述
本次实验中,我们借助了 MySQL 的 DBUG 包,来让 MySQL 将处理过程暴露出来。MySQL 中类似的技术还有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。
这些技术将 MySQL 的不同方向的信息暴露出来,方便大家理解其中机制。
如果A、B库在同一个mysql实例下(同一执行程序下)可以用A.search,B.room去访问:
update A.search s join B.room r on s.room_id=r.room_id
set s.is_online=r.is_online;
不过你这room如果只有几条,直接把is_online对应room_id的值写在sql里去更新A.search表不就好了
update A.search set is_online=(case when room_id=x1 then y1 when room_id=x2
then y2 when room_id=x3 then y3 ...... else yn end)