2014-06-18 148 views
1

已經連接我有兩個表:連接在表中的字段,當表通過其他字段

CREATE TABLE `osoby_dane` (
`os_id` int(6) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`imie` text, 
`status` int(1) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `osoby_rank` (
`os_id` int(6) NOT NULL PRIMARY KEY, 
`os_rank` int DEFAULT 1000, 
`status` int(1), 
    CONSTRAINT `fk_rank` FOREIGN KEY (os_id) REFERENCES osoby_dane(os_id) on update cascade on delete restrict 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

實施例:
osoby_dane:

os_id | imie | status | 
1  |John |1  |

osoby_rank:

os_id | os_rank | status | 
1 | 1400 | 1  |

我的問題是我怎麼能(如果我可以......)連接在同一行中的字段(狀態欄)一對一(如果我編輯一個表中的狀態字段,然後在第二個它會自動更改)。而我不想使用觸發功能

+0

如果它是多餘的數據,刪去的一個考慮正火狀態並在閱讀時簡單地加入記錄。 –

+0

您可以創建一個[具有ON UPDATE CASCADE的FOREIGN KEY](http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html)。 – amenadiel

+0

@MarcusAdams,鮮爲人知的事實是InnoDB可以對任何索引列執行外鍵引用,而不僅僅是PRIMARY或UNIQUE鍵。這是非標準的,但可能導致一些非常奇怪的效果。 –

回答

0

在osoby_rank對級聯更新讓CONSTRAINT fk_status外鍵(OS_ID,狀態)參考osoby_dane(OS_ID,狀態)和osoby_dane使KEY status_idx(os_id, status)應該工作

+0

它的工作原理,謝謝 – user3753409

1

如果你不想使用觸發器或外鍵,那麼沒有辦法自動使osoby_rank.status更新匹配osoby_dane.status

你必須改變在兩列的status明確當你改變之一。

例如,可以執行多表更新:

UPDATE osoby_dane INNER JOIN osoby_rank USING (os_id) 
SET osoby_dane.status = 2, 
    osoby_rank.status = 2 
WHERE osoby_dane.os_id = 1; 

另一種解決方案,如@MarcusAdams建議,是存儲status只在一個表或其他的,以避免冗餘列。