这个错误信息表明在尝试向数据库表中插入数据时,遇到了主键(PRIMARY KEY)重复的问题。主键是数据库表中用于唯一标识每一行记录的字段,它具有唯一性和非空性。当尝试插入的数据中主键值已经存在于表中时,就会触发这个错误。
在插入新数据之前,先检查表中是否已存在相同的主键值,并删除重复的记录。
-- 查找重复的主键值
SELECT primary_key_column, COUNT(*)
FROM your_table
GROUP BY primary_key_column
HAVING COUNT(*) > 1;
-- 删除重复的记录(保留一条)
DELETE t1 FROM your_table t1
INNER JOIN your_table t2
WHERE t1.primary_key_column = t2.primary_key_column AND t1.id > t2.id;
在插入数据时使用事务和锁机制,确保同一时间只有一个操作可以修改特定行。
START TRANSACTION;
SELECT * FROM your_table WHERE primary_key_column = '2-1' FOR UPDATE;
-- 插入或更新数据的操作
COMMIT;
如果可能,使用数据库的自增字段(AUTO_INCREMENT)来生成主键,避免手动指定主键值。
CREATE TABLE your_table (
id INT AUTO_INCREMENT PRIMARY KEY,
other_columns ...
);
在从外部数据源导入数据时,先进行数据清洗,去除重复的主键值。
import pandas as pd
# 假设df是导入的数据框
df = pd.read_csv('your_data.csv')
# 去除重复的主键值
df = df.drop_duplicates(subset=['primary_key_column'])
# 导入到数据库
df.to_sql('your_table', engine, if_exists='append', index=False)
通过上述方法,可以有效解决“duplicate entry '2-1' for key 'primary'”错误,保证数据库操作的正确性和稳定性。
领取专属 10元无门槛券
手把手带您无忧上云