![](/img/trans.png)
[英]Importing MySQL tables from other database in live site with mysqldump can cause trouble?
[英]Database: Importing data from other tables to another tables
这是我的数据库groupofficecom
我正在将元素从source
导入到cal_events
和cf_cal_events
。 数据库中有一些我无法更改的规则:
cal_events.id
是主键,具有AUTO_INCREMENT cf_cal_events.model_id
是主键,并没有 AUTO_INCREMENT cf_cal_events.model_id = cal_events.id
ID_ELEMENT
是VIEW source
的PRIMARY KEY cf_cal_events.col_10 = source.ID_ELEMENT
我正在尝试执行一个查询,该查询定期将source
元素添加到cal_events
和cf_cal_events
,因此它需要应用以下内容:
INSERT
新事件(要素) INTO
两个表,考虑到:
cal_events.id
是auto_incremented,并且cf_cal_events.model_id
从cal_events.id
获取其值, cal_events.id
图所示。 source
和目标之间的关系是通过cf_cal_events.col_10
列进行的。 UPDATE
事件在源数据库中发生更改。
在源数据库中删除的DELETE
事件(在源数据库中,有一个参数tinyint列ASUPPRIMER='1'
)
我并不是要别人做我的工作,而是要寻求有关我在代码中遇到的问题的帮助:
我可以将新项目插入cal_events
,但不能将项目插入cf_cal_events
(结果是所有重复项)。 这些是我的尝试。
WHERE cf_cal_events.model_id = cal_events.id
和
INNER JOIN cf_cal_events ON cf_cal_events.model_id = cal_events.id
都返回空结果
当我执行查询时,由于该列的AUTO_INCREMENT,它会再次添加具有新id
的元素。 问题是我不能使用REPLACE INTO
或ON DUPLICATE KEY UPDATE
因为PRIMARY KEY必须相同才能正常工作。
这是我数据库的SQL Fiddle 。 谢谢大家!
这是我的插入代码:
INSERT INTO groupofficecom.cal_events (
calendar_id,
user_id,
start_time,
end_time,
name,
description,
location,
ctime,
mtime,
muser_id,
status
)
SELECT '5' AS calendar_id,
'3' AS user_id,
UNIX_TIMESTAMP(source.DATEDEBUT),
UNIX_TIMESTAMP(source.DATEFIN),
CONCAT(source.C219PRNOM,' ',source.C218NOM),
source.TYPEACTIONS,
source.C222LIEU,
UNIX_TIMESTAMP(source.CREATEDATE),
UNIX_TIMESTAMP(source.MODIF_DATE),
'',
'CONFIRMED' AS status
FROM source;
INSERT INTO groupofficecom.cf_cal_events (
model_id,
col_4,
col_5,
col_6,
col_7,
col_8,
col_9,
col_10
)
SELECT groupofficecom.cal_events.id,
source.C221CODECLIENT,
'' AS col_5,
'0' AS col_6,
source.C218NOM,
source.C219PRNOM,
source.TYPEACTIONS,
source.ID_ELEMENT
FROM source, groupofficecom.cal_events
INNER JOIN cf_cal_events
ON groupofficecom.cf_cal_events.model_id = groupofficecom.cal_events.id;
第一个INSERT
工作正常,但是另一个返回空结果
SELECT groupofficecom.cal_events.id,
source.C221CODECLIENT,
'' AS col_5,
'0' AS col_6,
source.C218NOM,
source.C219PRNOM,
source.TYPEACTIONS,
source.ID_ELEMENT
FROM source
INNER JOIN groupofficecom.cal_events
ON groupofficecom.cal_events.calendar_id = 5
AND groupofficecom.cal_events.user_id = 3
AND groupofficecom.cal_events.start_time = UNIX_TIMESTAMP(source.DATEDEBUT)
AND groupofficecom.cal_events.end_time = UNIX_TIMESTAMP(source.DATEFIN)
...
LEFT JOIN cf_cal_events
ON groupofficecom.cf_cal_events.model_id = groupofficecom.cal_events.id
WHERE groupofficecom.cf_cal_events.model_id IS NULL
这是您对cf_cal_events的插入查询。 您必须根据条件从源连接到cal_events,以及如何迁移数据,以获取先前已插入的cal_events行。 然后,您必须加入到model_id上方的cf_cal_events才能获得这些cal_events,而cf_cal_events中尚无参考。 最后,您必须选择cal_events.id作为cf_cal_events的model_id。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.