ALTER TABLE 報1062 - Duplicate entry錯誤


mysql版本:5.7.28

表結構

CREATE TABLE `t2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` int(11) DEFAULT NULL,
  `col2` bigint(20) DEFAULT NULL,
  `col3` text,
  `col4` varchar(30) DEFAULT NULL,
  `col5` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `un_index` (`col1`)
) ENGINE=InnoDB AUTO_INCREMENT=11057632 DEFAULT CHARSET=utf8mb4;

在添加字段的時候報錯1062

sql>ALTER TABLE t2 ADD COLUMN col6 INT ( 11 );

1062 - Duplicate entry '2068603194' for key 'un_index', Time: 37.923000s

問題原因:表數據較多在執行alter table期間有其他會話執行了造成duplicate entry的語句使online ddl在執行完結構變更回放緩存的時候報錯。

Oline DDL的原理簡單一點理解就是將DML操作緩存起來,等到DDL執行完成后重新應用緩存中的DML語句,如果在Oline DDL執行過程中,DML操作產生了Duplicate entry錯誤,並不會直接影響DDL操作,而是在DDL執行完成最終應用DML時報錯,導致DDL執行失敗。官方認為該問題是一種限制,並不是Bug,所以目前為止還沒有得到解決。

經過測試只有在唯一鍵沖突的時候(insert,update)才會影響到DDL,主鍵沖突沒有影響。

另外在執行insert into ... on duplicate key...或者replace into語句的時候只要是更新了唯一鍵的字段也會影響online DDL的運行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM