2012-11-28 47 views
0

在舊的基於遺留系統的系統中,我們更新了用戶清單。庫存包含許多不同的項目,用戶將每個項目id有一行,每行都是他們擁有的這個項目的數量。在系統中出牙的問題MySQL

現在,在這個相當老的龐然大物就像代碼的地方是一個問題,由此用戶能夠與項目的減量結束。這絕不應該發生。

而不是從頂部接近的問題,並通過每一段代碼,與我們認爲我們可以嘗試,並創建一些報告,以幫助我們找到問題的庫存表交互去。

我去實現,我認爲可以解決這個問題,我想我把它放在那裏,向社會了解他們將如何處理它的東西之前。

也許可以通過建立在其上插入活動到另一個表仔細檢查等有創意的更新MySQL的規則開始。

+0

雖然'老傳統基於system'尖叫,不,我要問一下,你的系統使用一個數據庫類,你可以擴展? – jeroen

+0

根據_how_「legacy」和您將來需要多長時間支持它,您可能只需創建一個觸發器,以便在'UPDATE'上創建負值。換句話說,如果將來有可能替換這個東西,就把它掃到地毯下。 –

+0

爲建議傢伙歡呼。不幸的是,由於財務原因,我們必須堅持使用這個遺留代碼庫。它有一個DB類,它使用mysqli類,所以它不是太可怕。 – David

回答

1

如果添加一個時間戳字段,那麼你就知道什麼時候最後一次操作進行 - 從,你會發現在mysql日誌TE更新條目,並可能與應用程序日誌調和。

另外,您可以設置在桌子上的觸發器...

CREATE TRIGGER no_negatives_in_yourtable 
BEFORE UPDATE ON yourtable 
FOR EACH ROW 
BEGIN 
    IF (NEW.value<0) THEN 
    /* log it (NB will be rolled back if subsequent statement enabled */ 
    INSERT INTO badthings (....) VALUES (...); 
    /* this forces the operation to fail */ 
    DROP TABLE `less than zero value in yourtable`; 
    END IF; 
END 
+0

觸發器正是我個人的想法。如果我再加上一個額外的參數來標識來自應用程序的內容,那麼我們就可以成爲獲勝者。 – David

+0

有一件讓我擔心的事情是,它並不是代碼的問題,而是因爲在該數據庫中請求的速度。 – David

+0

如果您可以識別所有更新值的位置(爲了注入標識符),那麼您可以捕獲堆棧中較高的事件以查找或*爲什麼*它正在這樣做並解決問題,而不僅僅是測量它。 – symcbean