1068 multiple primary key defined

I export (with Update) my existing My SQL backup and import it to another PC via PHPAdmin but it gives below error message. I need to just replace existing database on backup PC. Is it possible to do this?

«#1068 — Multiple primary key defined»

3 Answers 3

Yes, add drop table option in your export, then on import, your table will be dropped and recreated. This will avoid pk conflicts.

To do a wholesale replacement of an existing database.

One option is to drop the existing database and re-create it. But make sure you really want to do this, and that you are doing it on the MySQL instance you really want to do it on:

Note that this may have an effect on granted privileges, you may need to re-grant privileges on the new database. (In the CREATE DATABASE statement, include a specification for the default characterset and collation, if those differ from the setting of the instance variables.)

SQLyog has a convenient «empty database» menu option, which drops all of the objects in the database without having to drop the database and re-create it. (This may have an effect on privileges granted to individual database objects.)

I’m not sure if phpmyadmin has an equivalent function. To roll your own, it’s a matter of querying the information_schema tables to identify all tables, views, procedures, etc.

For example, to generate a list of the DROP TABLE statements, you could run a query something like this:

I export (with Update) my existing My SQL backup and import it to another PC via PHPAdmin but it gives below error message. I need to just replace existing database on backup PC. Is it possible to do this?

«#1068 — Multiple primary key defined»

3 Answers 3

Yes, add drop table option in your export, then on import, your table will be dropped and recreated. This will avoid pk conflicts.

To do a wholesale replacement of an existing database.

One option is to drop the existing database and re-create it. But make sure you really want to do this, and that you are doing it on the MySQL instance you really want to do it on:

Note that this may have an effect on granted privileges, you may need to re-grant privileges on the new database. (In the CREATE DATABASE statement, include a specification for the default characterset and collation, if those differ from the setting of the instance variables.)

SQLyog has a convenient «empty database» menu option, which drops all of the objects in the database without having to drop the database and re-create it. (This may have an effect on privileges granted to individual database objects.)

I’m not sure if phpmyadmin has an equivalent function. To roll your own, it’s a matter of querying the information_schema tables to identify all tables, views, procedures, etc.

For example, to generate a list of the DROP TABLE statements, you could run a query something like this:

На днях я переносил один из своих сайтов на новый хостинг и столкнулся с проблемой. Подробно о том, как перенести сайт на другой хостинг я расскажу в одной из следующих статей, а пока расскажу о самой проблеме и ее решении.

Файлы сайта я скопировал быстро, сделал экспорт базы данных со старого хостинга, но при попытке импортировать таблицы в базу на новом хостинге возникла ошибка в My SQL вот такого вида:

— — Дамп данных таблицы `rich_blc_instances` — INSERT INTO `rich_blc_instances` (`instance_id`, `link_id`, `container_id`, `container_type`, `link_text`, `parser_type`, `container_field`, `link_context`, `raw_url`) VALUES (1, 1, 1, ‘blogroll’, ‘Документация’, ‘url_field’, ‘link_url’, ”, ‘http://codex.wordpress.org/Заглавная_страница’), (2, 2, 2, ‘blogroll’, ‘Блог WordPress’, ‘url_field’, ‘link_url’, ”, ‘http://wordpress.org/news/’), (3, 3, 3, ‘blogroll’, ‘Форумы поддержки’, ‘url_field’, ‘link_url’, ”, ‘http://ru.forums.wordpress.org/’), (4, 4, 4, ‘blogroll’, ‘Плагины’, ‘url_field’, ‘link_url’, ”, ‘http://wordpress.org/extend/plugins/’), (5, 5, 5, ‘blogroll’, ‘Темы’, ‘url_field’, ‘link_url’, ”, ‘http://wordpress.org/extend/themes/’), (6, 6, 6, ‘blogroll’, ‘Обратная связь’, ‘url_field’, ‘link_url’, ”, ‘http://ru.forums.wordpress.org/forum/20’), (7, 7, 7, ‘blogroll’, ‘Планета WordPr[…]

#1062 – Duplicate entry ‘1’ for key ‘PRIMARY’

Так как в базах данных я полный чайник, пришлось копаться в интернете в поисках решения. На форумах довольно много записей от людей с подобной проблемой, но нигде нет четкого ответа – сделай вот так и так.

В общих чертах я проблему понял, но вот как ее решить было неясно. На всех форумах, где встречалось описание подобной ошибки, люди писали, что она возникает при попытке добавить записи из одной базы данных в уже существующую другую.

Но я импортировал базу данных в пустые таблицы, более того, таблицы создавались в процессе импорта.

Решил проблему с ошибкой «#1062 – Duplicate entry ‘1’ for key ‘PRIMARY’» следующим образом:

Заменил в таблицах базы данных команду INSERT INTO на REPLACE INTO. В тексте ошибки, который я привел выше вы можете посмотреть в каком месте таблицы располагаются эти слова (выделил жирным).

По умолчанию, с помощью директивы insert база пыталась вставить значения в таблицу, но почему-то, находила дублированный key ‘PRIMARY’ и не могла вставить данные (как она их находила, я так и не разобрался). Директива replace заставила базу заменять данные при совпадении значений, не обращая внимания на прошлые записи.

Заменить эту директиву можно открыв сам файл базы данных с помощью текстового редактора – эта команда стоит перед блоком каждой таблицы. Открываете базу данных в текстовом редакторе, например, Akelpad и меняете все команды INSERT INTO на REPLACE INTO.

В моем же случае, получилось сделать проще – я по новой сделал экспорт таблицы на старом хостинге и в настройках экспорта установил этот самый REPLACE вместо INSERT.

Источник: computermaker.info

Понравилась статья? Поделиться с друзьями:
Ок! Компьютер
Добавить комментарий