MySQL - 我們可以在不同的儲存過程中使用相同的臨時表名嗎?
在我們的數據庫中,我們通過定期呼叫事件中的大量儲存過程來生成統計資訊。
考慮到有兩個SP
auto_update_daily_users
auto_update_daily_orders
temp1
在兩個儲存過程中使用相同的臨時表名(比如說)時是否存在衝突?我檢查了 Stack Overflow 上的問答,他們說臨時表的範圍是目前會話。我認為這意味著當我們將數據庫伺服器與客戶端連接時。
但在我的情況下,所有的 sp 都在伺服器端執行。那麼有人可以解釋一下嗎?
一個SP做完後臨時表會自動銷毀嗎?如果兩個 SP 同時執行會怎樣?他們不是在同一個會話中執行嗎?
在我的情況下,所有的 sp 都在伺服器端執行
任何情況下,SP 都是使用某些客戶端連接(例如,來自 Event Scheduler)執行的。如果它們從某個外部 SP/UDF 中被一一呼叫 - 它們在同一個連接中執行,並且由第一個 SP 創建的臨時表在第二個啟動時存在。如果它們是獨立執行的(例如,作為/來自 2 個單獨的事件過程) - 它們在不同的連接中執行,並且每個都有自己獨立的(本地)臨時表。
伺服器只接受查詢並返回其結果。任何發送查詢並接收其結果的東西都是客戶端。See
SHOW PROCESSLIST
- 您將看到所有客戶端連接,包括 Event Scheduler 服務連接和已執行事件連接,每個單獨事件的單獨連接。一個SP做完後臨時表會自動銷毀嗎?
臨時表具有連接範圍。如果您在兩個不同的連接中執行 2 個 SP,則每個 SP 都有自己的臨時表,具有自己的結構和數據,儘管它們的名稱相同。
如果您先執行一個 SP,然後再執行另一個,但在執行第一個後關閉連接並為執行第二個創建新的 - 每個 SP 將再次擁有自己的臨時表。
但是,如果您執行一個 SP,然後在同一連接中執行另一個 SP,則第 1 個創建的臨時表將在第 2 個啟動時存在,數據由第 1 個插入。-秋名