簡體   English   中英

如何用外鍵更新表

[英]how to update table with foreign key

實際上,我有兩個數據庫,一個用於升級,一個正在生產中。 一個表(例如,稱為Class(class_id,descr,faculty_id)faculty_id對另一表(稱為Faculty(faculty_id, name,comment)引用Class(class_id,descr,faculty_id)的引用。

我的故事是,我在登台數據庫,教職員工表上做了很多更新,更改了許多教職員工的注釋和姓名,而沒有更改班級表。 我想將登台“教師”表復制到“生產”。 我的原始方法是從登台生成腳本並刪除數據表,在生產中使用Faculty並運行腳本,以便將登台數據表Faculty復制到生產中。 但是我發現我無法刪除Faculty表,因為有外鍵。 但是我不想寫下數百條更新語句,也無法刪除生產中的Class數據,如果我想將Faculty表復制到生產中怎么辦?

暫時刪除classfaculty之間的關系,然后執行任何操作,然后再次建立關系。

嘗試這個:

備份持有外鍵的類表。

截斷類表。

向學院進行更新。

最后還原您的類表。

假設登台Faculty中的所有代理鍵都與生產中的鍵相同。

  1. 將“教師”表復制為“生產”作為“生產”
  2. 更改班級表並將外鍵引用放到學院
  3. 將學院重命名為Faculty_backup
  4. 重命名Faculty_Staging to Faculty
  5. 更改類表並還原外鍵約束

如果重建外鍵引用的嘗試失敗,則登台Faculty表中的代理鍵存在問題。

  1. 將教師重命名為Faculty_Staging
  2. 重命名Faculty_Backup to Faculty
  3. 更改類表並恢復外鍵約束。

注意事項:

  1. Faculty和Faculty_Staging中的代理鍵是否完全匹配?
  2. Faculty和Faculty_Staging中的備用鍵是否完全匹配?
  3. 您是否無意中刪除了Faculty暫存中的任何生產行?

您是否知道可以使用SQL生成SQL腳本? (僅當Faculty在舞台和制作中具有相同的faculty_id時才有效)

這將生成腳本以插入新的學院:

SELECT 'INSERT INTO production.Faculty (faculty_id, name, comment) 
        SELECT TOP 1 '+LTRIM(faculty_id)+','''+name+''','''+comment+'''
          FROM production.Faculty
         WHERE NOT EXISTS (SELECT 1 FROM production.Faculty WHERE faculty_id = '+LTRIM(faculty_id)+');' AS runMeOnProduction
  FROM staging.Faculty

這將生成腳本以更新現有學院:

SELECT 'UPDATE production.Faculty SET name = '''+name+''', comment = '''+comment+'''
         WHERE faculty_id = '+LTRIM(faculty_id)+';' AS runMeOnProduction
  FROM staging.Faculty

如果您在名稱或注釋字段中得到引號,則可能需要將上述SQL語句中的名稱和注釋替換為:

REPLACE(name,'''','''''')
REPLACE(comment,'''','''''')

這不是最佳方法,特別是如果您在兩種環境中都在兩個表上都獲得了插入和更新。 但是,如果教師數據僅在分階段進行中增長,則此方法可行。

另外,當您運行這些SQL語句時,某些查詢軟件也會顯示blob或十六進制,因為它認為該字符串很長才能顯示,如果您將其復制粘貼,它可能仍然正確。 否則,請嘗試另一個SQL查詢工具。 我將DBVisualiser用於這種情況,並且可以正常工作。 我並不需要廣告任何特定的數據庫查詢工具,只是我不得不經常查詢mySQL和MSSQL,所以我發現自己為了完成工作而從一個應用程序跳到另一個應用程序。

如果兩種環境中都有數據輸入,則應考慮使用適當的數據比較工具: http : //en.wikipedia.org/wiki/Comparison_of_database_tools而且一旦開始使用這些工具,您可能會有所疑問。

這可能是古怪的想法,但我之前發現它很方便...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM