2014-10-03 64 views
1

我需要對具有許多「RESTRICTED」約束的複雜DB進行更改。MySql腳本臨時將外鍵約束更改爲級聯然後返回

具體而言,我需要重新編號表UserInfo中的Id字段,許多其他表在更新和刪除上有許多其他表具有「RESTICT」的外鍵。

我想創建一個腳本:

  1. 查找所有的表與約束(外鍵)到「的UserInfo」表的「ID」字段
  2. 加載約束(外鍵)成可變
  3. 改變依賴表(縣)「滴」的外鍵
  4. 改變依賴表(一個或多個),以添加一個外鍵與Delete(刪除)「瀑布」和更新
  5. ...我會插件ERT這裏更新查詢...
  6. 改變依賴表(縣)「滴」的外鍵
  7. 改變依賴表(S)加回原來的外鍵

我只是」弄清楚如何執行第2步,將約束加載到變量中。

我搜索了所有通過information_schema數據庫並找到約束名稱(即userprefs_ibfk_1)。但它沒有定義它們是什麼類型的約束(即「限制刪除」)。是否有一些祕密代碼來確定它們是什麼類型的約束?

我可能能夠使用SHOW CREATE TABLE UserInfo但我找不到一種方法將結果加載到一個變量(我可以執行字符串函數)。

我將不勝感激任何幫助。

回答

0

你接近,你需要檢查referential_constraints.update_ruledelete_rule

SELECT constraint_name 
FROM information_schema.referential_constraints 
WHERE 
    referenced_table_name = 'UserInfo' 
    AND (update_rule <> 'CASCADE' OR delete_rule <> 'CASCADE') 

您可以在stored procedure包裝這個查詢,與a cursor遍歷結果,建立並從中執行prepared statements