2016-10-08 114 views
1

進入「XXX」我有一個由2個領域的主鍵表的MySQL,如下MySQL的錯誤:重複的主鍵

Script showing Primary Key

表中已經存在的記錄是:

Existing Records

插入查詢,我發出的是:

The Query

當我運行查詢:顯示

INSERT INTO `case_data` 
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD',*********************** 

的錯誤信息是:

[Err] 1062 - Duplicate entry 'WCD/2016/1000017' for key 'PRIMARY'

我是不是違反了主鍵約束?

在此先感謝。

+0

您只能在主鍵列中添加唯一字符串。這裏「WCD/2016/1000017」已經在表格中佔有一席之地,所以你不能在表中爲主鍵列添加相同的字符串。 –

+0

是的,你違反了主要的禁忌。 –

+0

@Vivek:如果我要將值'** WCD/2016/1000017 **'更改爲其他值,爲什麼我需要使用複合鍵? –

回答

1

您可以檢查是否在表中存在的行你想已經插入主鍵值:

SELECT COUNT(*) 
FROM case_data 
WHERE caseno = 'WCD/2016/1000017' AND iteration = 2; 

如果返回0,那麼你不會違反PK的約束,並安全地插入您希望的行(假設沒有額外的檢查,觸發器和約束條件)。否則它將返回1,這意味着你已經有一行包含這些列中的值,因此你將違反不允許的行的唯一性。

當它返回0時,只發出INSERT命令。此外,請記住在語句中指定列的表從您的VALUES確保每個值被目標表的右欄中提出:

INSERT INTO case_data (caseno, iteration, casedate, casetype) 
VALUES ('WCD/2016/1000017', 2, '2016-09-29', 'WCD'); 

避免周圍使用的列名和表名反引號,如果他們不不包含逗號或空格等替代字符。這會讓你的代碼更具可讀性,並且肯定會加快你的寫作時間。

+0

我試過你建議的SELECT查詢,它返回0.但仍然無法用上面的INSERT查詢插入一行。 –

+0

必須有別的東西阻止你進行INSERT imho。檢查此:http://sqlfiddle.com/#!9/aa8ec –

+0

我在第一個框下面單擊「構建架構」,然後單擊第二個框下面的「運行SQL」。第二個箱子沒有出現。對不起,但我從來沒有使用過** SQL Fiddle **網站。 –