2013-04-29 44 views
0

我試圖讓外鍵中的操作發生更改(在刪除/更新時)。在外鍵約束中獲取ON DELETE ON UPDATE操作

我試圖檢查在尋找INFORMATION_SCHEMA.key_column_usage:

SELECT * 
FROM `INFORMATION_SCHEMA`.`key_column_usage` 
WHERE `referenced_table_schema` = '{$this->dbName}' 
AND `referenced_table_name` IS NOT NULL 
AND `table_name` = '{$this->tableName}' 

它顯示了這樣的事情:

0 => 
array (size=12) 
    'CONSTRAINT_CATALOG' => string 'def' (length=3) 
    'CONSTRAINT_SCHEMA' => string 'test' (length=4) 
    'CONSTRAINT_NAME' => string 'profiles_ibfk_1' (length=15) 
    'TABLE_CATALOG' => string 'def' (length=3) 
    'TABLE_SCHEMA' => string 'test' (length=4) 
    'TABLE_NAME' => string 'profiles' (length=8) 
    'COLUMN_NAME' => string 'id' (length=2) 
    'ORDINAL_POSITION' => string '1' (length=1) 
    'POSITION_IN_UNIQUE_CONSTRAINT' => string '1' (length=1) 
    'REFERENCED_TABLE_SCHEMA' => string 'test' (length=4) 
    'REFERENCED_TABLE_NAME' => string 'users' (length=5) 
    'REFERENCED_COLUMN_NAME' => string 'id' (length=2) 

.... 

我INFORMATION_SCHEMA.TABLE_CONSTRAITS tryed也和我得到:

0 => 
array (size=6) 
    'CONSTRAINT_CATALOG' => string 'def' (length=3) 
    'CONSTRAINT_SCHEMA' => string 'test' (length=4) 
    'CONSTRAINT_NAME' => string 'PRIMARY' (length=7) 
    'TABLE_SCHEMA' => string 'test' (length=4) 
    'TABLE_NAME' => string 'profiles' (length=8) 
    'CONSTRAINT_TYPE' => string 'PRIMARY KEY' (length=11) 

.... 

2例中沒有關於刪除/更新的操作。

我能明白嗎?怎麼樣?如果我可以的話。

回答

2

選擇UPDATE_RULEDELETE_RULEREFERENTIAL_CONSTRAINTS信息模式:

SELECT CONSTRAINT_NAME, UPDATE_RULE, DELETE_RULE 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
WHERE UNIQUE_CONSTRAINT_SCHEMA = '{$this->dbName}' 
    AND REFERENCED_TABLE_NAME IS NOT NULL 
    AND TABLE_NAME = '{$this->tableName}' 

作爲記載:

的可能值UPDATE_RULEDELETE_RULECASCADE,​​,SET DEFAULTRESTRICTNO ACTION

+0

簡單和偉大的工作,謝謝兄弟。 – 2013-04-29 15:13:34

0

這取決於你想要做什麼。如果您只是希望在相關記錄上更新外鍵,則您正在尋找CASCADE選項的外鍵約束。請參閱this page並閱讀關於級聯的部分。如果你想在記錄的UPDATE/DELETE上執行更復雜的操作,你需要觸發器。有關創建觸發器的語法,請參見this page