2011-08-27 15 views
0

例如,用戶創建產品並將其分配到類別中。如何避免和註銷一些意想不到的事情的數據庫?

中的類,我們有一些記錄:

-phone, id:0 
-computer, id:1 
-pad, id:2 

和用戶創造一種產品,該產品需要分配一個類別,用戶做這樣的事情:

name:iphone 
cat:0 

流程將如下工作:

1. check the cat is exist in db or not 
2a. if not exist prompt error 
2b. if exist, put the record in db. 

但是當完成第1步檢查時,有沒有什麼機會,重新2b是開始。管理員刪除電話類別。如果發生這種情況,數據庫將插入一個沒有cat id watch的記錄。該數據庫將有這樣的事情:

*-phone, id:0* (not any more, because the admin delete it) 
-computer, id:1 
-pad, id:2 

但是有這樣的記載:

name:iphone //but it belong to no category, because the admin delete it. 
cat:0 

如果這樣做的一個機會,我怎樣才能避免這種情況?謝謝。

(使用PHP與MySQL的笨)

回答

1

有兩件事情你應該想想:

  1. Transactions - 他們做的所有更改原子,即所有的修改都沒有對其他用戶不可見,直到你提交他們,所以大家看到數據庫的一致狀態。
  2. 修改您的數據庫模式以使用foreign keys - 它們確保數據關係得以保留,因此如果設置爲使類別必須始終存在並且突然消失,則插入操作將失敗。
0

放在一個嘗試.. catch塊,並做一些記錄值的MySQL作爲NOT NULL(這是需要領域),你會能夠發現異常並顯示錯誤。

+0

這不會工作,第1步後腳本有cat_id。然後腳本進入2b,但在執行2b之前,貓被刪除。該腳本仍然具有變量中的id,現在它被插入。我認爲你沒有完全閱讀/理解這個問題 – trampi

相關問題