mysql数据库中同步两个表中的数据的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库中同步两个表中的数据的问题相关的知识,希望对你有一定的参考价值。
问问大家 假如我在数据库database中有两个表 分别是players 和users players里有一列为playername 一列为ipadress users表里两列分别是username 和ip
实际上playername和username里的数据是相同的 但出于技术原因,users表中的ip地址为空,让playername表中每一行playername对应users表中的usersname 并将ipadress全部写入对应的ip中 这样如何搞定?最好不只是能处理当前录入的数据 而是让以后ipadress里写入数据的时候ip里会同步数据
写得累死了,还加了注释 不加分 天理难容 累觉不爱
create or replace procedure publish_users is
cursor c_record_players is
select * from players;
v_cur c_record_players%rowtype;
v_db players%rowtype;
begin
--打开游标,处理结果集
open c_record_players;
loop
fetch c_record_players
into v_cur;
exit when c_record_players %notfound;
--如果是刚开始 users表是空的就插入数据
begin
select count(*)
into v_record_num
from users t
where t.id = v_cur.id;
if v_record_num = 0 then
insert into users
( Ip ,
username)
values
( v_cur.ipadress ,
v_cur.playername
);
else
--方便以后处理如果users不是空的那么就更新数据
update users
set ip = v_cur.ipadress ,
username = v_cur.playername ,
where username = v_cur.playername;
end if;
--数据量大的话 每5000条提交一次
if mod(c_record_players%rowcount,5000) = 0 then
commit;
end if;
end loop;
close c_record_players;
end publish_users;本回答被提问者和网友采纳
从 MySQL 中的两个表中选择数据
【中文标题】从 MySQL 中的两个表中选择数据【英文标题】:SELECT data FROM two tables in MySQL 【发布时间】:2013-02-13 08:12:36 【问题描述】:我有什么:下一个结构:
table_zero -> id (带自动增量的PRIMARY) -> 其他
table_1 -> id (表零 id 的外键) -> varchar(80) 示例值:(aahellobbb) -> one_field
table_2 -> id (表零 id 的外键) -> varchar(160) 示例值:(aaececehellobbb) -> 其他字段
我想要什么: 搜索并获得一个 (id,varchar) 数组,其中包含在 varchar 字段上与 LIKE '%str%' 匹配的所有匹配项。例如,如果我使用“hello”字符串进行搜索,那么我应该得到两个示例值及其各自的 id。这些 id 总是不同的,因为它们是对 PRIMARY KEY 的引用。
我尝试了什么:我尝试使用 UNION ALL,但在我的示例中它不适用于 LIMITS。
【问题讨论】:
【参考方案1】:通过使用UNION
,您可能会获得多次具有相同 ID 的行。使用LEFT JOIN
怎么样?
如果我理解了你的问题:
SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
FROM table_zero
LEFT JOIN table_1 ON table_zero.id = table_1.id
LEFT JOIN table_2 ON table_zero.id = table_2.id
WHERE table_1.varchar_field LIKE '%str%'
OR table_2.varchar_field LIKE '%str%'
【讨论】:
感谢您的回答。它对我来说很好,但我得到了一对名为“name”的两个字段。每对都有一个 NULL 值和匹配的字符串。这是正常的吗?我知道这是由于双表搜索......但是,它看起来很奇怪。感谢您的回答;) 如果您希望结果中只有一个字段包含匹配的字符串,您可以使用COALESCE(table_1.varchar_field, table_2.varchar_field) AS matched_string
而不是table_1.varchar_field, table_2.varchar_field
【参考方案2】:
试试这个
SELECT *
FROM
(
SELECT table_zero.id AS ID, table_1.varchar_field AS field
FROM table_zero
JOIN table_1 ON table_zero.id = table_1.id
WHERE table_1.varchar_field LIKE '%str%'
UNION
SELECT table_zero.id, table_2.varchar_field AS field
FROM table_zero
JOIN table_2 ON table_zero.id = table_2.id
) tbl
WHERE
tbl.field LIKE '%str%'
【讨论】:
谢谢,但 Frostys 是最权威的 ;D 还是要投票! 内存占用过多,intent按一列排序时,20秒内选择200.000行限制0、10。【参考方案3】:SELECT table_zero.id, table_1.varchar_field, table_2.varchar_field
FROM table_zero
LEFT JOIN table_1 ON table_zero.id = table_1.id
LEFT JOIN table_2 ON table_zero.id = table_2.id
WHERE table_1.varchar_field LIKE '%str%'
OR table_2.varchar_field LIKE '%str%'
【讨论】:
以上是关于mysql数据库中同步两个表中的数据的问题的主要内容,如果未能解决你的问题,请参考以下文章