web-dev-qa-db-fra.com

MySQL CREATE TABLE SI NON EXISTE dans l'importation PHPmyadmin

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?

7
Frank Ly

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?

3
user6494166

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 ) ;
2
Rafeeque KP

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à.

Voir http://dev.mysql.com/doc/refman/5.5/fr/insert.html .

1
Marc Delisle

Si vous voulez vraiment insérer cet enregistrement, supprimez le champ `abuse_id` et la valeur correspondante de la INSERTstatement:

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
Fabien TheSolution

Dans votre cas, la première valeur à insérer doit être NULL, car c'est AUTO_INCREMENT.