2010-07-31 44 views
0

我可以更改mysql表中的node id(nid)以更新Drupal中節點的ID嗎?從mysql更改節點ID ..是否有可能?

換句話說,如果我在'node'表中改變nid(注意保持它們對於每個節點是唯一的),直接從phpmyadmin中,我會引入錯誤嗎?

感謝

+0

爲什麼你必須改變節點id?有些東西告訴我,如果你處在一個必須發生的地步,有些事情是非常錯誤的。在任何地方都可以使用nid,最終可能會破壞數據。 – Kevin 2010-07-31 17:11:28

+0

因爲我從外部數據庫導入它們,所以我需要使它們的Drupal ID與原始ID保持一致。我正在考慮添加一個隱藏的CKK字段和要使用的id,但我被告知,替換Drupal nid風險太大,所以我需要另一種解決方案。我需要在創建節點時指定nid。 – aneuryzm 2010-07-31 17:43:00

回答

1

節點ID用在很多地方,所以你必須非常小心地做這樣的事情。它很可能導致事情中斷,就像丟失存儲在別處的節點的內容。

如果節點剛剛導入,它使事情變得不那麼棘手,但很難確定你所做的一切正確。問題在於,只有在太遲時纔會發現問題。

我相信,當您導入節點時,遷移會創建某種連接表,可用於將節點ID與舊ID進行匹配嗎?

+0

mhm ...好的。我想改變它的原因是我需要將由drupal創建的id與從外部表(從中導入節點)導入的id同步。 – aneuryzm 2010-07-31 14:53:32

+0

你是否更新了答案?如果你沒有發佈至少一條評論就更新它,我沒有注意到這個改變!連接表怎麼可以幫助完全?我需要將「答案」分配給「問題」。這就是爲什麼我需要保持一致的nids。 – aneuryzm 2010-07-31 17:44:38

0

我認爲這可能工作

您需要記住,nid不僅可以被其他表引用,還可以在某些序列化數據中定義。如果您通過整個數據庫進行搜索並確保更改每個可能發生的nid,那麼它應該是可行的。

+0

呃,我怎麼能找到每個可能發生的NID?我想這很棘手,風險很大。 – aneuryzm 2010-07-31 14:51:36

+0

絕對是這樣的,但是使用phpmyadmins搜索功能,您應該能夠找到序列化數據中的所有事件。但我懷疑這項努力是否真的值得。 – DrColossos 2010-07-31 14:53:24

+0

是的,但我有成千上萬的節點..我一直堅信其他人不這樣做。我想知道是否可以在創建節點時傳遞nid值。通過這種方式,我不需要稍後改變它。 – aneuryzm 2010-07-31 17:45:58

0

考慮到節點ID可以保存在由第三方模塊創建的數據庫表中,我認爲確實不會產生問題是不可能的。 如果您手工運行SQL查詢,則需要確保您檢查了每個表(包括緩存表),這些表可能包含對節點的引用,以便將其插入序列化的PHP對象或數組中。

相關問題