Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQLSTATE[23000]:完整性约束冲突:密钥“PRIMARY”的1062重复条目“2”_Mysql_Duplicates_Key - Fatal编程技术网

Mysql SQLSTATE[23000]:完整性约束冲突:密钥“PRIMARY”的1062重复条目“2”

Mysql SQLSTATE[23000]:完整性约束冲突:密钥“PRIMARY”的1062重复条目“2”,mysql,duplicates,key,Mysql,Duplicates,Key,敬礼!我在Symfony中使用以下原始sql语句将现有表中的大量行插入到具有相同结构的其他表中,这些表也包含大量现有行[因为使用的表是在运行时动态创建的,所以没有Symfony-ENTITY]: $sql_insert = "INSERT INTO table1".$proid." SELECT * from ".$tablename." ON DUPLICATE KEY UPDATE table1".$proid.".id = table1".$proid.".id + 1"; 但仍然得到相

敬礼!我在Symfony中使用以下原始sql语句将现有表中的大量行插入到具有相同结构的其他表中,这些表也包含大量现有行[因为使用的表是在运行时动态创建的,所以没有Symfony-ENTITY]:

$sql_insert = "INSERT INTO table1".$proid." SELECT * from ".$tablename." ON DUPLICATE KEY UPDATE table1".$proid.".id = table1".$proid.".id + 1";
但仍然得到相同的错误:

SQLSTATE[23000]:完整性约束冲突:密钥“PRIMARY”的1062重复条目“2”


它不适用于每个条目,只适用于第一个插入的条目。。。请帮我解决这个问题。如何更新主键?

正确的查询是:

INSERT INTO table(column_list)
VALUES(value_list)
ON DUPLICATE KEY UPDATE column_1 = new_value_1, column_2 = new_value_2, …
您需要更新每列的键

您可以从以下链接参考此问题,希望它能解决问题:


Symfony帮助解决了重复密钥问题,如下所示:

$conn = $this->getDoctrine()->getManager()->getConnection();    
$sql_insert = " SELECT * from ".$tablename."";
            $stmt = $conn->prepare($sql_insert);
            $stmt->execute();
            $result = $stmt->fetchAll();

            foreach($result as $item => $row) {
                $dataArray1 = array(
                    'a' => $row['a'], 
                    'b' => $row['b'], 
                    ...);

                    $conn->insert('pro'.$id.'', $dataArray1);
                }

这与Symfony无关,这是一个基本的MySQL错误。请将这两个表的模式添加到您的帖子中好吗?不幸的是,完整的模式对帖子来说太长了。两个表都有相同的模式和80列,都是从a、b。。。ca CREATE TABLE pro_nr_122 id int11 NOT NULL、idofma int11 DEFAULT NULL、name varchar100 COLLATE utf8_unicode_ci DEFAULT NULL、varchar50 COLLATE utf8_unicode_ci DEFAULT NULL、b varchar50 COLLATE utf8_unicode_ci DEFAULT NULL……您获得此结果的原因是因为您试图获取所有列。很可能这两个表都有系统生成的键值,所以它的意思是主键值“2”已经存在于目标表中,并且您正试图将源表中的键值放入其中。如果要执行此操作,需要列出所有的“入”列和“出”列,并从所选的“自”或“源”表中排除主键。@T Gray:是的,我知道发生此错误的原因,但不太可能,事实上,这些键是由“自动生成”设置的。我想,在最坏的情况下,我需要foreach结果,并插入其他表中的每一行,但这并不是最好的解决方案:或者我尝试在重复键更新时覆盖,但我有80列,这是相同的时间输入,我想如果我有两个表,table1id int auto,somechar varchar30和table2id int auto,someotherchar varchar30为了避免这个问题,我将SomeChar插入到表1中,从表2中选择someotherchar;如果我想保留原始id,我在table1 archiveid int no autogen中创建另一列,我的插入是插入table1 archiveid,somechar select id,someotherchar from table2;这完全避免了重复的关键问题,无论哪种解决方案都有效。基本上,你的选择*就是问题所在。