2011-11-30 3 views
2
CREATE TABLE `d_s_rep` ( 
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`p_id` bigint(20) NOT NULL, 
`i_id` bigint(20) NOT NULL, 
`d_id` bigint(20) NOT NULL, 
`s_id` bigint(20) NOT NULL, 
`t_id` bigint(20) NOT NULL DEFAULT '0', 
`as_id` bigint(20) NOT NULL, 
`ccount` bigint(20) DEFAULT '0', 
`dcount` bigint(20) NOT NULL DEFAULT '0', 
`icount` bigint(20) DEFAULT '0', 
`di` bigint(20) NOT NULL DEFAULT '0', 
`dhi` bigint(20) NOT NULL DEFAULT '0', 
`r` decimal(25,8) DEFAULT '0.00000000', 
`f_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
`t_date` datetime DEFAULT NULL, 
`t_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`,`f_date`), 
KEY `d_id` (`d_id`), 
KEY `p_id` (`p_id`), 
KEY `f_date` (`f_date`), 
KEY `i_id` (`i_id`), 
KEY `s_id` (`s_id`), 
KEY `t_id` (`t_id`), 
KEY `as_id` (`as_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=11064336 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (TO_DAYS(f_date)) (PARTITION p2009OLD VALUES LESS THAN (733863) ENGINE = InnoDB, PARTITION p2009Q2 VALUES LESS THAN (733954) ENGINE = InnoDB, PARTITION p2009Q3 VALUES LESS THAN (734046) ENGINE = InnoDB, PARTITION p2009Q4 VALUES LESS THAN (734138) ENGINE = InnoDB, PARTITION p2010Q1 VALUES LESS THAN (734228) ENGINE = InnoDB, PARTITION p2010Q2 VALUES LESS THAN (734319) ENGINE = InnoDB, PARTITION p2010Q3 VALUES LESS THAN (734411) ENGINE = InnoDB, PARTITION p2010M10 VALUES LESS THAN (734442) ENGINE = InnoDB, PARTITION p2010M11 VALUES LESS THAN (734472) ENGINE = InnoDB, PARTITION p2010M12 VALUES LESS THAN (734503) ENGINE = InnoDB, PARTITION p2011M01 VALUES LESS THAN (734534) ENGINE = InnoDB, PARTITION p2011M02 VALUES LESS THAN (734562) ENGINE = InnoDB, PARTITION p2011M03 VALUES LESS THAN (734593) ENGINE = InnoDB, PARTITION p2011M04 VALUES LESS THAN (734623) ENGINE = InnoDB, PARTITION p2011M05 VALUES LESS THAN (734654) ENGINE = InnoDB, PARTITION p2011M06 VALUES LESS THAN (734684) ENGINE = InnoDB, PARTITION p2011M07 VALUES LESS THAN (734715) ENGINE = InnoDB, PARTITION p2011M08 VALUES LESS THAN (734746) ENGINE = InnoDB, PARTITION p2011M09 VALUES LESS THAN (734776) ENGINE = InnoDB, PARTITION p2011M10 VALUES LESS THAN (734807) ENGINE = InnoDB, PARTITION p2011M11 VALUES LESS THAN (734837) ENGINE = InnoDB, PARTITION p2011M12 VALUES LESS THAN (735173) ENGINE = InnoDB) 

В упомянутый выше таблицы несколько вставок fronm вставки запроса в код с ошибкойMySQL: Ошибка 1022 дубликат ключа в таблице

Total Number of diagnostic records: 1 
SQLSTATE: 23000 
Native Error Code: 1022 
[MySQL][ODBC 3.51 Driver][mysqld-5.1.30-community-log]Can't write; duplicate key in table 'd_s_rep' 

вставка Постулаты «не» включают в себя значения идентификатора (NOT NULL AUTO_INCREMENT) и t_stamp (NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP).

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

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

+1

Это выглядит хорошо для меня, если ваш запрос не включает id (как вы говорите), он всегда должен быть уникальным. Вы выполняете репликацию с помощью записи на обеих машинах? –

+0

Спасибо за ответ. Извините, я не получил ваш вопрос. Таблица FYI, в которой я получаю эту ошибку, реплицируется в резервную систему – dvs

ответ

3

Похоже, что вы пытаетесь установить более одного PRIMARY KEY

PRIMARY KEY (id,f_date) 

Вы можете только иметь один первичный ключ и вы уже установили f_date как KEY, поэтому просто удалите , f_date, и все будет хорошо.

+1

Хм, нет ... есть разница между КЛЮЧЕМ и ПЕРВИЧНЫМ КЛЮЧОМ. Здесь есть только один ПЕРВЫЙ КЛЮЧ. –

+0

спасибо за ответ. f_date должен быть частью PRIMARY KEY в соответствии с mysql «Все столбцы, используемые в выражении разбиения для секционированной таблицы, должны быть частью каждого уникального ключа, который может иметь таблица». Источник: http://dev.mysql.com/doc/refman/5.1/ru/partitioning-limitations-partitioning-keys-unique-keys.html – dvs

0

Вы можете иметь его, как показано ниже; не объявляйте «f_date» как ключ отдельно

PRIMARY KEY (`id`,`f_date`), 
    KEY `d_id` (`d_id`), 
    KEY `p_id` (`p_id`), 
    KEY `i_id` (`i_id`), 
    KEY `s_id` (`s_id`), 
    KEY `t_id` (`t_id`), 
    KEY `as_id` (`as_id`) 
+0

Спасибо за ответ. 'f_date' в качестве ключа требуется иметь индекс в 'f_date' для запросов, которые выбирают данные на основе f_date. «f_date» необходим в PRIMARY KEY, поскольку разделение основано на «f_date» – dvs

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