我可以更改mysql表中的node id(nid)以更新Drupal中節點的ID嗎?從mysql更改節點ID ..是否有可能?
換句話說,如果我在'node'表中改變nid(注意保持它們對於每個節點是唯一的),直接從phpmyadmin中,我會引入錯誤嗎?
感謝
我可以更改mysql表中的node id(nid)以更新Drupal中節點的ID嗎?從mysql更改節點ID ..是否有可能?
換句話說,如果我在'node'表中改變nid(注意保持它們對於每個節點是唯一的),直接從phpmyadmin中,我會引入錯誤嗎?
感謝
節點ID用在很多地方,所以你必須非常小心地做這樣的事情。它很可能導致事情中斷,就像丟失存儲在別處的節點的內容。
如果節點剛剛導入,它使事情變得不那麼棘手,但很難確定你所做的一切正確。問題在於,只有在太遲時纔會發現問題。
我相信,當您導入節點時,遷移會創建某種連接表,可用於將節點ID與舊ID進行匹配嗎?
我認爲這可能工作。
您需要記住,nid不僅可以被其他表引用,還可以在某些序列化數據中定義。如果您通過整個數據庫進行搜索並確保更改每個可能發生的nid,那麼它應該是可行的。
呃,我怎麼能找到每個可能發生的NID?我想這很棘手,風險很大。 – aneuryzm 2010-07-31 14:51:36
絕對是這樣的,但是使用phpmyadmins搜索功能,您應該能夠找到序列化數據中的所有事件。但我懷疑這項努力是否真的值得。 – DrColossos 2010-07-31 14:53:24
是的,但我有成千上萬的節點..我一直堅信其他人不這樣做。我想知道是否可以在創建節點時傳遞nid值。通過這種方式,我不需要稍後改變它。 – aneuryzm 2010-07-31 17:45:58
考慮到節點ID可以保存在由第三方模塊創建的數據庫表中,我認爲確實不會產生問題是不可能的。 如果您手工運行SQL查詢,則需要確保您檢查了每個表(包括緩存表),這些表可能包含對節點的引用,以便將其插入序列化的PHP對象或數組中。
爲什麼你必須改變節點id?有些東西告訴我,如果你處在一個必須發生的地步,有些事情是非常錯誤的。在任何地方都可以使用nid,最終可能會破壞數據。 – Kevin 2010-07-31 17:11:28
因爲我從外部數據庫導入它們,所以我需要使它們的Drupal ID與原始ID保持一致。我正在考慮添加一個隱藏的CKK字段和要使用的id,但我被告知,替換Drupal nid風險太大,所以我需要另一種解決方案。我需要在創建節點時指定nid。 – aneuryzm 2010-07-31 17:43:00