键“P​​RIMARY”的重复条目“制造商名称-0”

Posted

技术标签:

【中文标题】键“P​​RIMARY”的重复条目“制造商名称-0”【英文标题】:Duplicate entry 'Manufacturer Name-0' for key 'PRIMARY' 【发布时间】:2021-08-16 01:47:58 【问题描述】:

我充其量只是一名中级人员,我们将不胜感激。我正在尝试上传包含药物、制造商、通用名称等数据库的 csv 文件。

我将它用于 .php

$this->db->insert('acc_coa',$manufacturer_coa);

    $check_category = $this->db->select('*')->from('product_category')->where('category_name',$insert_csv['category_id'])->get()->row();
    if(!empty($check_category))
        $category_id = $check_category->category_id;
    else
            $categorydata=array(
        'category_name'         => $insert_csv['category_id'],
        'status'                => 1
        );
              if ($count > 0) 
    $this->db->insert('product_category',$categorydata);

这对于数据库:

创建表acc_coa ( HeadCode varchar(50) 整理 utf8_unicode_ci 非空, HeadName varchar(100) 整理 utf8_unicode_ci NOT NULL AUTO_INCREMENT, PHeadName varchar(50) 整理 utf8_unicode_ci 非空, HeadLevel int(11) 非空, IsActive tinyint(1) 非空, IsTransaction tinyint(1) 非空, customer_id int(11) 默认为空, manufacturer_id int(11) 默认为空, IsGL tinyint(1) 非空, HeadType char(1) 整理 utf8_unicode_ci 非空, IsBudget tinyint(1) 非空, IsDepreciation tinyint(1) 非空, DepreciationRate十进制(18,2)不为空, CreateBy varchar(50) 整理 utf8_unicode_ci 非空, CreateDate 日期时间不为空, UpdateBy varchar(50) 整理 utf8_unicode_ci 非空, UpdateDate 日期时间不为空, 主键 (HeadName) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

但任何时候我尝试都会得到这个

错误号:1062

键“PRIMARY”的重复条目“制造商名称-0”

插入acc_coa (HeadCode, HeadName, PHeadName, HeadLevel, IsActive, IsTransaction, IsGL, HeadType, @98765435@@, @98765435@@, @98765435@@, 987654352@,DepreciationRateCreateByCreateDate) 值('502020000001','制造商名称-0','应付帐款','3','1','1','0',' L', '0', 0, '0', '0', '1', '2021-05-27 18:15:47')

文件名:C:/wamp64/www/efkwa/system/database/DB_driver.php

行号:691

【问题讨论】:

表中已存在HeadName = 'Manufacturer Name-0' 的行。您不能使用此值再插入一行。 【参考方案1】:

是否已插入任何行?看起来主键值“制造商名称-0”已经存在。 也许您的插入被执行了两次?

尝试执行

DELETE FROM acc_coa;

然后尝试再次插入。

【讨论】:

【参考方案2】:

此错误表明您已经输入了具有该值(制造商名称-0)的示例/行,主键充当每个示例的唯一标识符,因此不能在表的其他示例/行中重复

【讨论】:

【参考方案3】:

已经解决了……

我从第 691 行删除了

            // Display errors
            return $this->display_error(array('Error Number: '.$error['code'], `enter code here`$error['message'], $sql));

但我想知道为什么?

【讨论】:

通常,在真实的编程世界中,删除/压缩错误消息并不能修复错误。 是的,我想通了。不过,我仍在尝试找出原因。 您可以继续阅读:INSERT ... ON DUPLICATE KEY UPDATE Statement,这是要采用的方法【参考方案4】:

您可以在 mysql 客户端中执行以下操作:

创建数据并将其插入到临时表或中间表中:

CREATE TABLE acc_coa_tmp AS SELECT * FROM acc_coa WHERE 1 = 0;

注意:新表acc_coa_tmp上没有主键。

在 PHP 中:

try 
   :
   $db->insert(...);
 catch (SqlException $ex) 
   // Failed insert CSV
   // SQL insert into new table acc_coa_tmp
   $db->insert(...);

【讨论】:

我试过了,但它在实时服务器上不起作用。

以上是关于键“P​​RIMARY”的重复条目“制造商名称-0”的主要内容,如果未能解决你的问题,请参考以下文章

键“P​​RIMARY”的重复条目。忽略字符串的空格

[23000][1062] 键 'PRIMARY' 的重复条目 '0'

MySQL PHPMyAdmin 错误 #1062 - 键 'PRIMARY' 的重复条目 '0'

#1062 - 键 'PRIMARY' 的重复条目 '19'

如何避免没有主键和唯一键的重复条目?

Hibernate @OneToMany 错误:键 'PRIMARY' 的重复条目 '0'