sqlstate[23000]:完整性约束冲突:1062键“primary”的重复条目“2”

ars1skjm  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(570)

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

$sql_insert = "INSERT INTO table1".$proid." SELECT * from ".$tablename." ON DUPLICATE KEY UPDATE table1".$proid.".id = table1".$proid.".id + 1";

但仍然得到同样的错误:
sqlstate[23000]:完整性约束冲突:1062键“primary”的重复条目“2”
它并不适用于每个条目,只适用于第一个插入的条目。。。请帮我解决这个问题。如何更新主键?

8ftvxx2r

8ftvxx2r1#

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);
                }
8i9zcol2

8i9zcol22#

正确的查询是:

INSERT INTO table(column_list)
VALUES(value_list)
ON DUPLICATE KEY UPDATE column_1 = new_value_1, column_2 = new_value_2, …

您需要更新每列的键。
您可以从以下链接参考此问题,希望它能解决问题:
在重复密钥更新时与insert相同
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

相关问题