Как я могу настроить MYSQL DB для принятия NULL в качестве первичного ключа в инструкции INSERT, а затем сгенерировать уникальный первичный ключ - PullRequest
1 голос
/ 08 мая 2020

Я использую код ниже из этого ответа stackoverflow , чтобы скопировать строку в таблице и создать новую строку в той же таблице, но с теми же данными и уникальным первичным ключом. Я запускаю код, используя модуль mysql -connector- python.

CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1;
UPDATE tmptable_1 SET primarykey = NULL;
INSERT INTO table SELECT * FROM tmptable_1;
DROP TEMPORARY TABLE IF EXISTS tmptable_1;

Этот код работает в производственной базе данных, но дает следующую ошибку в моей локальной тестовой базе данных.

IntegrityError: 1048 (23000): Column 'primaryKey' cannot be null

Локальная БД:

  • Версия: MYSQL==5.6.47
  • Скомпилировано для: osx10.15 (x86_64)
  • Клиент БД: mysql-connector-python==2.1.3

Производственная БД:

  • Версия: MYSQL==5.6.40
  • Скомпилировано для: Linux (x86_64)
  • Клиент БД: mysql-connector-python==2.1.3

Я использую MYSQL Workbench для экспорта схемы и данных из производственной базы данных и импорта их в мою локальную тестовую базу данных.

Есть ли какие-то настройки конфигурации для MYSQL БД, в чем проблема? Я не уверен, в чем причина разницы в поведении базы данных.

1 Ответ

0 голосов
/ 08 мая 2020

Просто отбросьте этот столбец со стороны INSERT, и вы можете вставить в себя:

INSERT INTO table (a, b, c) SELECT a, b, c FROM table;

Где вы должны указать столбцы в том же порядке, опуская id один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...