Mariadb
MariaDB 在更新時自動遞增
我有一個奇怪的問題,我找不到錯誤。我有一個 4 行的 MariaDB 表
[id] [clientid] [lastcheck] [Version]
id 欄位設置為 AutoIncrement。我的腳本在添加和更新值時一切正常
INSERT INTO $dbtable_update (clientid, lastcheck, currentversion) VALUES ('$clientid', '$lastcheck', '$currentversion') ON DUPLICATE KEY UPDATE lastcheck = '$lastcheck', currentversion = '$currentversion'
但是,一旦我更新現有條目的值,AutoIncement 就會計算 id 行。有人可以幫助我嗎,我做錯了什麼?
注意(來自評論):有
UNIQUE(clientid)
.
以下假設您認為
id
序列中的間隙是一個問題。這通常不是問題,除非這些差距變得巨大並且有可能在某些時候超過最大值id
。我將進一步假設該表的定義類似於:
CREATE TABLE clients( id int unsigned AUTO_INCREMENT, clientid varchar(30) UNIQUE NOT NULL, lastcheck datetime, version varchar(10), PRIMARY KEY (id) );
如果您
INSERT ... ON DUPLICATE KEY UPDATE
對該表執行一條語句,那麼該id
列將在每次嘗試INSERT
第一次後增加,然後如果失敗,它會執行UPDATE
.為避免這種情況,您可以
SELECT
先對錶執行 a 以查看是否clientid
存在,然後根據結果執行 anINSERT
或 an 。UPDATE
但是,如果您有這樣的表:
CREATE TABLE clients ( clientid varchar(30) NOT NULL, lastcheck datetime, version varchar(10), createtime datetime NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (clientid) );
…那麼您可以使用與
INSERT ... ON DUPLICATE KEY
以前相同的語句。無需id
擔心列,clientid
它將是唯一的(因為它是主鍵),並且可以從新createtime
列中看到序列(這可能單獨有用)。您可以使用類似於以下的語句更改目前表以獲取新表:
ALTER TABLE clients DROP PRIMARY KEY, DROP id, ADD PRIMARY KEY (clientid), ADD COLUMN createtime datetime NOT NULL DEFAULT current_timestamp();
(但是請注意,
createtime
當您執行 時,現有記錄的所有 s 都將設置為目前時間戳ALTER
。)