我終於成功地做到這一點(按照我的意見),但爲了做到這一點,我不得不寫一些代碼。最後,我創建了一些虛擬表格,以便跟蹤舊ID與新ID的關係。當用FK約束複製記錄時,我只是根據舊的查找新的ID。有點囉嗦,但它的工作。
這篇文章現在有點過時了,所以我將其標記爲答案。如果任何人有更好的想法/解決方案,我會高興地'取消'它作爲接受的答案。
編輯:這裏要求的是一些僞代碼,我希望解釋我是如何做到的。
我有兩個相關的表如下:
CREATE TABLE tblCustomers (
Id int NOT NULL AUTO_INCREMENT,
Name varchar(50) DEFAULT NULL,
Address varchar(255) DEFAULT NULL,
PRIMARY KEY (Id)
)
ENGINE = MYISAM
ROW_FORMAT = fixed;
CREATE TABLE tblQuotes (
Id int NOT NULL AUTO_INCREMENT,
CustomerId int(11) DEFAULT NULL,
QuoteReference varchar(50) DEFAULT NULL,
PRIMARY KEY (Id)
)
ENGINE = MYISAM
ROW_FORMAT = fixed;
我創造,我會用它來追蹤老IDS對新的ID
CREATE TABLE tblLookupId (
Id int NOT NULL AUTO_INCREMENT,
TableName varchar(50) DEFAULT NULL,
OldId int DEFAULT NULL,
NewId int DEFAULT NULL,
PRIMARY KEY (Id)
)
ENGINE = MYISAM
ROW_FORMAT = fixed;
的想法是,我複製了額外的表tblCustomer一次一排地跟蹤ID,像這樣:
// copy each customer row from dev to live and track each old and new id
//
foreach (customer in tblCustomers)
{
// track the old id
var oldid = customer.id; // e.g. 1
// insert the new record into the target database
INSERT newdb.tblCustomers (...) VALUES (...);
// get the new id
var newid = SELECT LAST_INSERT_ID() // e.g. 245
// insert the old id and the new id in the id lookup table
INSERT idlookup (TableName, OldId, NewId) VALUES ('tblCustomers', oldid, newid); // this maps 1->245 for tblCustomers
}
當我來複制t能夠(tblQuote)與外鍵我必須先查找基於舊的新ID。
// copy each quote row from dev to live and lookup the foreign key (customer) from the lookup table
//
foreach(quote in tblQuotes)
{
// get the old foreign key value
var oldcustomerid = quote.CustomerId; // e.g 1
// lookup the new value
var newcustomerid = SELECT newid FROM tblIdLookup WHERE TableName='tblCustomers' AND oldid=oldcustomerid; // returns 245
// insert the quote record
INSERT tblQuotes (CustomerId, ...) VALUES (newcustomerid, ...);
}
我試圖保持這個簡短點和點(和語言不可知),所以可以看到技術。在我的真實場景中,我有大約15個'級聯'表,所以我必須跟蹤每個表的新ID,而不僅僅是tblCustomer
你能更具體地說明你做了什麼來解決這個問題嗎?我知道這已經有一段時間了 - 但這是一個很好的問題,一個完整的答案會很棒。 – kittykittybangbang
@kittykittybangbang我已經添加了一些僞代碼,我希望能解釋這種技術。我現在做了很多次,這不是很快,不漂亮,但它的作用像一個魅力。 –
非常感謝! :d – kittykittybangbang