首先我們用MySQL自帶的可視化管理工具M(jìn)ySQL WorkBench打開(kāi)數(shù)據(jù)庫(kù)及表格,出現(xiàn)此問(wèn)題的主要原因是主鍵已經(jīng)有了名為“XXX”的那項(xiàng),實(shí)際上我寫(xiě)的代碼并沒(méi)有重復(fù)也會(huì)彈出此報(bào)錯(cuò),下面我們看一下我自己的解決方案。
Mysql導(dǎo)入大量數(shù)據(jù)時(shí),會(huì)報(bào)如下錯(cuò)誤,主鍵重復(fù),不能再繼續(xù)執(zhí)行。
Query:
INSERT INTO `FNDCN_MNG` VALUES(787390578, 1, '楊明', 95585, '2015-06-08', '招募說(shuō)明書(shū)', 80100, NULL, '1', NULL, '3', '2015-06-29', NULL, '1', ' 楊明先生,中央財(cái)經(jīng)大學(xué)碩士研究生,14年銀行、基金從業(yè)經(jīng)歷。曾在上海銀行從事信貸員、交易員及風(fēng)險(xiǎn)管理工作。2004年10月加入華安基金管理有限公司,任研究發(fā)展部研究員。2013年6月起擔(dān)任華安策略優(yōu)選股票型基金的基金經(jīng)理。2014年6月起擔(dān)任投資研究部高級(jí)總監(jiān)。', '2015-11-09 12:33:58', '2016-01-06 21:34:41', '2015-12-31 12:14:18', 'JY', '488969752640', NULL, NULL, NULL, NULL)
Error occured at:2016-02-16 15:23:41
Line no.:220
Error Code: 1062 - Duplicate entry '95585-80100-2015-06-29 00:00:00-1--1' for key 'IDX_FNDCN_MNG'
解決方案一:
將主鍵設(shè)置為自動(dòng)增長(zhǎng)??梢栽跀?shù)據(jù)庫(kù)手動(dòng)將相關(guān)表設(shè)置ID為自增長(zhǎng)。
如圖:
再繼續(xù)導(dǎo)入正常。
解決方案二:
問(wèn)題描述:?jiǎn)为?dú)導(dǎo)入出錯(cuò)sql,會(huì)報(bào)如下錯(cuò)誤:
1 queries executed, 0 success, 1 errors, 0 warnings
查詢:INSERT INTO `FNDCN_MNG` VALUES(787192513, 1, '丁進(jìn)', 150150, '2015-12-28', '招募說(shuō)明書(shū)', 80100, NULL, '1', NULL, '3', '20...
錯(cuò)誤代碼: 1062
Duplicate entry '787192513' for key 'PRIMARY'
檢查了下,主鍵生成策略是:@GeneratedValue(strategy=GenerationType.IDENTITY),也沒(méi)問(wèn)題。
刪除導(dǎo)入出錯(cuò)的表;
新建需要導(dǎo)入數(shù)據(jù)的表;
我的問(wèn)題解決是在數(shù)據(jù)庫(kù)中:在數(shù)據(jù)庫(kù)中,沒(méi)有將主鍵設(shè)為自動(dòng)增長(zhǎng)。將已經(jīng)存在的表的主鍵設(shè)為自動(dòng)增長(zhǎng)SQL語(yǔ)句為:
alter table course change course_id course_id int(10) not null auto_increment ;
然后用sql腳本的方式導(dǎo)入所需數(shù)據(jù),這樣也可以很容易定位錯(cuò)誤。
---------------------
1、mysql數(shù)據(jù)庫(kù)設(shè)置數(shù)據(jù)庫(kù)主鍵自增的規(guī)律
·第一,在主鍵字段上增加 AUTO_INCREMENT
`id` int(8) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
·第二,默認(rèn)表的第一條數(shù)據(jù)是從1開(kāi)始計(jì)數(shù)的,但是在建表語(yǔ)句中是可以修改這個(gè)起始值的,比如下面就是設(shè)置為11為基值,下一次插入的是12
CREATE TABLE 'table_name'(
)ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='某某表'
而且通過(guò)可視化工具可以發(fā)現(xiàn),這個(gè)基本值一直是在變化的,即每次增加一個(gè),這個(gè)自動(dòng)增量的意思是,當(dāng)自動(dòng)插入下一個(gè)數(shù)據(jù)時(shí),主鍵的為8
2、問(wèn)題描述
在一個(gè)操作過(guò)程中,出現(xiàn)了這樣的描述,即6這個(gè)主鍵在數(shù)據(jù)庫(kù)中已經(jīng)存在了
Duplicate entry '6' for key 'PRIMARY'
3、問(wèn)題分析
網(wǎng)上大概說(shuō)明有這么幾種情況
1、數(shù)據(jù)庫(kù)該字段已經(jīng)自增到了最大值
2、數(shù)據(jù)庫(kù)表結(jié)構(gòu)損壞(一般是由于頻繁手動(dòng)修改數(shù)據(jù)導(dǎo)致的)
3、由于手動(dòng)插入了較大數(shù)據(jù),導(dǎo)致mysql自增到這個(gè)較大數(shù)值時(shí)主鍵重復(fù)了
4、問(wèn)題復(fù)現(xiàn)
很遺憾在后來(lái)的操作中,問(wèn)題并沒(méi)有能夠復(fù)現(xiàn) 但是在一個(gè)相隔很多天的試驗(yàn)中出現(xiàn)了另外一個(gè)問(wèn)題
開(kāi)始主鍵是自增的,一致自增到了5,后來(lái)修改了數(shù)據(jù)庫(kù)基數(shù)為100
然后自增了一些數(shù)據(jù)
過(guò)來(lái)兩天,再次執(zhí)行自增的時(shí)候居然報(bào)錯(cuò)了,而且不是明顯的錯(cuò)誤
后來(lái)把100等之后添加的數(shù)據(jù)刪除,自增測(cè)試程序又正常了
5、問(wèn)題總結(jié)
對(duì)于mysql 數(shù)據(jù)庫(kù)而言,在自增主鍵的時(shí)候,手動(dòng)修改數(shù)據(jù)要比較慎重,最好遵循三個(gè)原則
1、手動(dòng)添加數(shù)據(jù)和自動(dòng)添加數(shù)據(jù)不要混淆,即手動(dòng)的就是手動(dòng)的,避免和自動(dòng)添加數(shù)據(jù)的主鍵重復(fù)
2、手動(dòng)更改數(shù)據(jù)的時(shí)候,不要更改主鍵,只是修改其余字段
3、自增數(shù)據(jù)情況下,不要修改表的自增基數(shù)
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇