![](/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.