2015-11-19 2 views
0

J'essaye d'insérer dans une de mes tables (de la même table). J'ai besoin de changer 1 des valeurs, donc j'ai essayé d'insérer avec select comme here. J'ai un pk d'incrémentation automatique, et je voudrais que le pk nouvellement inséré continue le compte. l'insertion entraînerait donc l'ajout de 1 au pk.Insert de contradiction MySQL

INSERT INTO test.pp_publication_info 
(id, 
publication_fk, 
template_fk, 
allow_excel_upload) 
SELECT 
id, 55, template_fk, allow_excel_upload 
FROM pp_publication_info where id = "1"; 

J'obtiens une erreur 1062, qui est une entrée en double pour 1 pour PRIMARY KEY. Je l'aurais bien fait car à cause de l'IA, il aurait +1 la colonne ID. J'ai donc vérifié pour voir si je pouvais ajouter un ON DUPLICATE KEY UPDATE id. Malheureusement, peu importe où je l'ai mis dans la requête.

Donc en un mot: puis-je INSERT de cette façon, avec select tout en maintenant la fonction AI? Si oui, où vais-je me tromper et si non, existe-t-il des alternatives?

Addition: create de ma table:

CREATE TABLE `pp_publication_info` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`publication_fk` int(10) unsigned NOT NULL, 
`template_fk` int(10) unsigned DEFAULT NULL, 
`allow_excel_upload` tinyint(1) DEFAULT '0', 
PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; 

Répondre

1

Votre colonne id est AUTO_INCREMENT:

`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 

Cela signifie que la base de données génère un identifiant pour vous lorsque l'enregistrement est inséré. Il suffit donc de ne pas insérer de valeur dans ce champ. Il sera rempli automatiquement.

donc quelque chose comme ceci:

INSERT INTO test.pp_publication_info 
    (publication_fk, 
    template_fk, 
    allow_excel_upload) 
SELECT 
    55, template_fk, allow_excel_upload 
FROM pp_publication_info where id = 1; 

Après l'INSERT est exécuté, vous trouverez que la colonne id de tout nouveau dossier (s) a été rempli avec la valeur suivante (s) dans la séquence . (À l'exclusion de toute lacune dans la séquence, ce qui pourrait se produire pour un certain nombre de raisons.)

+0

Qui a glissé passé. Merci d'avoir fait remarquer cela. Acceptera ceci comme ma réponse. – Nina