Mysql
MYSQL 中的自動增量問題
MYSQL 中的目前結構:
CREATE TABLE `JOB_ONPREM` ( `JOB_ID` bigint(20) NOT NULL AUTO_INCREMENT, `JOB_NAME` varchar(255) NOT NULL DEFAULT '', `SANDBOX` varchar(100) NOT NULL DEFAULT '', `JOB_SUB_TYPE` varchar(500) DEFAULT NULL, `PARENT_JOB_NAME` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (JOB_ID,`JOB_NAME`,`SANDBOX`,`PARENT_JOB_NAME`) ) ENGINE=InnoDB AUTO_INCREMENT=10493 DEFAULT CHARSET=utf8
我想將 JOB_NAME
,
SANDBOX,
PARENT_JOB_NAME 作為主鍵,將 JOB_ID 作為自動增量,因為我正在使用“ON DUPLICATE KEY UPDATE”,並且由於自動增量,它正在插入新行並在表中創建重複項。同時從主鍵中刪除 job_id 。我收到錯誤為“表定義不正確;只能有一個自動列,並且必須將其定義為鍵”
CREATE TABLE 文件的內容與您的錯誤消息中的內容大致相同:
每個表只能有一個 AUTO_INCREMENT 列,它必須被索引,並且不能有 DEFAULT 值。
您需要索引該
JOB_ID
列。ALTER TABLE JOB_ONPREM ADD INDEX `dba269102` (`JOB_ID`)
嘗試一下,然後看看是否可以更改主鍵。您也可以將其設為唯一索引,以幫助避免重複。
ALTER TABLE JOB_ONPREM ADD UNIQUE INDEX `dba269102` (`JOB_ID`)
你的問題不完整。
JOB_ID 作為自動增量,因為我使用的是“ON DUPLICATE KEY UPDATE”
IODKU很少
AUTO_INCREMENT
需要。請舉例說明您為什麼需要它。
JOINing
這張桌子上還有其他桌子job_id
嗎?如果沒有,你不能擺脫它。表中是否存在此組合
(JOB_NAME,SANDBOX,PARENT_JOB_NAME)
的重複值?如果沒有重複,那麼您應該可以將其作為唯一的PRIMARY KEY
。IODKU 在檢查
ON DUPLICATE KEY
. 您需要 3-col 測試嗎?4-col? auto_inc 列?或者不止一個?向我們展示面向初學者的 IODKU 聲明。當您使用它時,這些列真的需要 255 和 500 個字元嗎?