2017-05-04 42 views
-1

現在,我有下面的表結構和查詢,我認爲這是一個不好的做法,並將更大的負載放在服務器上比它應該,這裏的表結構使用或查詢所需的列:如果在第一個表上存在值,則在一個查詢中運行多個表的查詢

tbl1 :

id : int (primary key) 
customer : varchar 
license : int (fk_license --> tbl2) 

tbl2:

license : int 
count : int 

現在,每當我不得不從tbl刪除數據我想1.現在我正在運行多個查詢

SELECT license FROM tbl1 WHERE id = $x 
//then storing license as a var, lets say $license for example 

DELETE FROM tbl1 WHERE id = $x 
UPDATE tbl2 SET count = count - 1 WHERE license = $license 

我使用PDO和有約束力的PARAMS但爲了簡單起見只是撲滅,減少來自tbl2計數這裏的sql查詢儘可能簡單。

我的問題是我可以在一次訪問數據庫中執行這些操作嗎?或者至少兩次,如果不是一次?

+1

爲什麼u需要保持單獨的表計,你可以從第一張表做一個SELECT COUNT(*)> 沒有必要爲第二個表 –

+0

可以說表並不像他們那樣簡單看,我只是在這裏列出了幾列用過的列,實際上tbl2本身有大約27列,而tbl1大得多 – mrahmat

回答

0

在這種情況下使用觸發器。

步驟1更改分隔符:

delimiter $$ 

第2步創建觸發器:

CREATE TRIGGER `reduce_count`  
    AFTER DELETE ON `tbl1`  
    FOR EACH ROW  
BEGIN 
    UPDATE tbl2 SET count = count - 1 WHERE license = OLD.license ; 
END 
$$ 

第3步恢復分隔符:

delimiter ; 

修訂:我每次創建類似的表描述如下, T3就像table1和t4像table2。 從t3刪除時,從t4開始計數減少。 enter image description here

+0

#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,在正確的語法附近使用'' - 我在這裏做錯了什麼? – mrahmat

+0

此過程返回了錯誤代碼? –

+0

我只是試圖從phpmyadmin sql部分創建觸發器,不知道應該如何創建觸發器?如果我做錯了,我還沒有在phpmyadmin中處理觸發器和事件。 – mrahmat

相關問題