J'ai le code suivant
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 ;
cette table existe déjà dans la base de données, mais lorsque j'importe un fichier SQL avec phpmyadmin, l'erreur suivante se produit
--
-- 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'
je pensais que puisqu'il existe déjà, il ne tentera pas de le créer. Pourquoi se comporte-t-il comme tel?
Sur la CREATE TABLE,
AUTO_INCREMENT of abuse_id a la valeur 2. MySQL pense maintenant que 1 existe déjà.
Avec l'instruction INSERT, vous essayez d'insérer abuse_id avec l'enregistrement 1. Veuillez définir AUTO_INCREMENT sur CREATE_TABLE sur 1 et réessayer.
Sinon, définissez abuse_id dans l'instruction INSERT sur 'NULL'.
Comment puis-je résoudre ça?
c'est parce que vous avez déjà défini 'abus_id' comme incrémentation automatique, il n'est donc pas nécessaire d'insérer sa valeur. il sera inséré automatiquement. L'erreur vient du fait que vous insérez plusieurs fois une duplication de données. la clé primaire doit être unique. ne devrait pas être répété.
la chose que vous devez faire est de changer votre requête d'insertion comme ci-dessous
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 ) ;
Selon ce que vous souhaitez accomplir, vous pouvez remplacer INSERT par INSERT IGNORE dans votre fichier. Cela évitera de générer une erreur pour les lignes que vous essayez d'insérer et qui existent déjà.
Si vous voulez vraiment insérer cet enregistrement, supprimez le champ `abuse_id`
et la valeur correspondante de la INSERT
statement:
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 ) ;
Dans votre cas, la première valeur à insérer doit être NULL, car c'est AUTO_INCREMENT.