Mysql

MYSQL 中的自動增量問題

  • June 14, 2020

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 個字元嗎?

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