2013-09-13 2 views
5

У меня есть следующий кодMySQL CREATE TABLE IF NOT EXISTS в PhpMyAdmin импорта

CREATE TABLE IF NOT EXISTS `abuses` (
    `abuse_id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL DEFAULT '0', 
    `abuser_username` varchar(100) NOT NULL DEFAULT '', 
    `comment` text NOT NULL, 
    `reg_date` int(11) NOT NULL DEFAULT '0', 
    `id` int(11) NOT NULL, 
    PRIMARY KEY (`abuse_id`), 
    KEY `reg_date` (`reg_date`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Table with abuse reports' AUTO_INCREMENT=2 ; 

эта таблица уже существует в базе данных, но когда я импортировать SQL файл с PHPMyAdmin, следующая ошибка

-- 
-- Dumping data for table `probid_abuses` 
-- 
INSERT INTO `abuses` ( `abuse_id` , `user_id` , `abuser_username` , `comment` , `reg_date` , `auction_id`) 
VALUES (1, 100020, 'artictundra', 'I placed a bid for it more than an hour ago. It is still active. I thought I was supposed to get an email after 15 minutes.', 1338052850, 108625) ; 

#1062 - Duplicate entry '1' for key 'PRIMARY' 

Я думал, что, поскольку он уже существует, он не будет пытаться его создать, почему он ведет себя как таковой?

+0

Перед тем, как создавать и заполнять его, откройте стол. –

+0

таблица уже существует, почему я ее бросаю, проблема в том, что она не должна ее создавать в первую очередь –

+0

Или удалите * из таблицы – Mihai

ответ

0

Если вы действительно хотите, чтобы вставить эту запись, удалить `abuse_id` поле и соответствующее значение из INSERT заявления:

INSERT INTO `abuses` ( `user_id` , `abuser_username` , `comment` , `reg_date` , `auction_id`) 
VALUES (100020, 'artictundra', 'I placed a bid for it more than an hour ago. It is still active. I thought I was supposed to get an email after 15 minutes.', 1338052850, 108625) ; 
+0

Прекрасное предложение, но вы можете нарушить внешние ключи, если вы делаете полное восстановление базы данных. Зависит от того, что вы делаете. –

+0

@MikeB Справа ... в случае восстановления ... но OP не упоминал об этом ... просто сказал, что он попытался импортировать файл sql ... –

1

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

См. http://dev.mysql.com/doc/refman/5.5/en/insert.html.

0

это потому, что вы уже определили «злоупотребление» как автоматическое приращение, тогда нет необходимости вставлять его значение. он будет вставлен автоматически. ошибка возникает из-за того, что вы вставляете 1 много раз, что является дублированием данных. первичный ключ должен быть уникальным. не следует повторять.

вещь, которую вы должны сделать, это изменить вставки запроса, как показано ниже

INSERT INTO `abuses` ( `user_id` , `abuser_username` , `comment` , `reg_date` , `auction_id`) 
VALUES (100020, 'artictundra', 'I placed a bid for it more than an hour ago. It is still active. I  thought I was supposed to get an email after 15 minutes.', 1338052850, 108625) ; 
0

В вашем случае первое значение для вставки должно быть NULL, потому что это AUTO_INCREMENT.

2

На CREATE TABLE,

AUTO_INCREMENT из abuse_id установлен в 2. MySQL теперь думает 1 уже существует.

С инструкцией INSERT вы пытаетесь вставить abuse_id с записью 1. Установите AUTO_INCREMENT на CREATE_TABLE в 1 и повторите попытку.

В противном случае установите для параметра abuse_id в инструкции INSERT значение «NULL».

Как я могу решить эту проблему?

Смежные вопросы