Mysql

如何在 mysql 中為兩個單獨的表設置一個自動增量 ID?

  • June 2, 2021

我有 2 個不同的表,每個表都有自己的 id 列。

我需要,如果一個表使用特定的 id,另一個表將不會使用它。這是必需的,因為兩個表中的對象稍後將由應用程序中的另一個組件一起處理,並且另一個組件必須讓它們由 id 唯一標識。

我想有一個counter帶有next_id列的表,並且before insert trigger每​​個表都有一個,它將從 中獲取目前 id counter,將其用於新行並增加它。

我的問題是,這是同步的嗎?即,如果 2 個不同的應用程序或單個應用程序中的執行緒將列插入這些表中的任何一個,會發生什麼情況?

我必須在觸發期間鎖定計數器表嗎?如果是,它將被鎖定直到整個事務結束,還是直到觸發器結束?

這個問題有更好的解決方案嗎?

如果兩個表共享 ID 空間,那麼它們肯定應該有一個共同的父表嗎?

我會創建一個父表,並使用外鍵創建另外兩個表的子表。父級具有自動增量欄位,您必須在插入子級之前先插入該欄位。向父表添加“類型”列,以便您知道在哪個表中查找具有給定 ID 的子表。

這種方法的最大優點是您不需要任何觸發器。無需擔心性能或同步問題。

在 PostgreSQL 中,您將使用繼承來實現這一點,但我認為 MySQL 沒有此功能。

引用自:https://dba.stackexchange.com/questions/103130