簡體   English   中英

如何將數據從一個表插入到另一個表,並且在第二個表中匹配該字段

[英]how to insert data from one table to another table and in 2nd table matches the field

我有兩個表購買和項目

Purchases(purchaseID purchaseDate, itemName,itemCost,itemQty)

Item(itemID,itemName,itemCost,itemQty).... itemID is auto Increment

現在,當我在購買表中插入數據時,我希望它以芳香方式插入到項目表中。

例如,對於采購值(pur001,2014-04-09,caltex,2000,5) ,物料表將為(1,caltex,2000,5)

當我在購買表值(pur002,2014-04-09,caltex,4000,10)插入第二條記錄時,項目表應如下所示(1,caltex,6000,15)

我怎樣才能做到這一點?

如果我做對了,您想在數據庫中創建某種統計概覽或“已解決項目計數器”。 這是正確的嗎? 因此,用例是:售出每件商品時,“購買”表中的條目都會更新。

從關系數據庫設計的角度來看,這沒有意義。 創建一個查詢來選擇所有購買項目(按項目ID分組)並對每個購買項目的總計數進行匯總會更容易。 在這種情況下,數據庫中沒有任何“狀態”或計算值。 通常,在數據庫中不需要這樣的值。

盡管如此。 如果仍然想要/需要此功能,則可以使用在INSERT和UPDATE( https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html )上觸發的SQL觸發器。 這些觸發器獲取插入或更新的值。但是使用UPDATE時,戲劇開始了。 如果減少了售出物品的數量,您的策略是什么? 如果取消訂單會怎樣? 您看,也許最好不要在數據庫中保存此類數據:)

芳香地? 插入時會散發出令人愉悅的氣味嗎?

實現此目的的一種方法是創建一個TRIGGER,當在購買表上執行插入操作時將其觸發。

但是,您還需要考慮購買表的更新和刪除。 如果從采購表中刪除一行怎么辦。 如果更改了itemQty或更改了itemName ,該怎么itemQty 保持item.itemQty列“同步”可能需要的不僅僅是活動,而不僅僅是插入。

在開始使用CREATE TRIGGER語法之前,您需要仔細考慮預期的目標。

如果目標是總共購買特定物品:

SELECT p.itemName
     , SUM(p.itemQty) AS total_qty
  FROM purchases p
 WHERE p.itemName = 'caltex'
 GROUP BY p.itemName

適當的索引

... ON purchases (itemName,itemQty)

將制定一個非常有效的查詢計划。

"item"表中添加"itemQty"列可有效地“打破” Codd的3NF規則(“每個屬性均取決於鍵,整個鍵,而僅取決於鍵。” "itemQty"屬性(列)中的"item"實體(表)是不是只依賴於實體(的關鍵"item" ),......它依賴的存在和其他實體的屬性(列在"purchases"表)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM