SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись '2' для ключа 'PRIMARY'

0

Салют! Я использую следующий raw sql statement в Symfony, чтобы вставить большое количество строк из существующей таблицы INTO в другую таблицу с той же структурой, что содержит также большое количество существующих строк [потому что используемые таблицы динамически создаются для среды выполнения, там нет SYMFONY -ЮРИДИЧЕСКОЕ ЛИЦО]:

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

и по-прежнему получают ту же ошибку:

SQLSTATE [23000]: нарушение ограничения целостности: 1062 Дубликат записи '2' для ключа 'PRIMARY'

Это не работает для каждой записи, только для первой вставленной записи... Пожалуйста, помогите мне решить эту проблему. Как я могу обновить первичный ключ?

  • 1
    Это не имеет ничего общего с Symfony, это основная ошибка MySQL. Не могли бы вы добавить схему обеих таблиц к вашему сообщению?
  • 0
    Полная схема, к сожалению, долго для публикации. Обе таблицы имеют одинаковую схему и 80 столбцов, все они нумеруются от a, b ... ca CREATE TABLE pro_nr_122 ( id int (11) NOT NULL, idofma int (11) DEFAULT NULL, name varchar (100) COLLATE utf8_unicode_ci DEFAULT NULL , VARCHAR (50) COLLATE utf8_unicode_ci DEFAULT NULL, a b VARCHAR (50) COLLATE utf8_unicode_ci DEFAULT NULL, ...
Показать ещё 3 комментария
Теги:
key
duplicates

2 ответа

0

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);
                }
-2

Правильный запрос:

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

Вам нужно обновить ключ для каждого столбца.

Вы можете ссылаться на эту проблему по следующим ссылкам, надеясь, что она решит вопрос:

  1. Обновление дублирующего ключа так же, как вставка

  2. https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню