J'essaie de quelque chose comme ça:
INSERT INTO dir_pictures SET filename=CONCAT(picture_id,'-test');
5 Réponses :
Insérez d'abord un enregistrement. Puis séparez vos déclarations avec un point-virgule et utilisez last_insert_id () Pour aller chercher l'ID d'autocrampe automatique nouvellement inséré. Exécuter en une fois.
insert into dir_pictures .... ;
update dir_pictures set filename=CONCAT(LAST_INSERT_ID(),'-test') where id = LAST_INSERT_ID()
Cela pourrait causer une condition de course ... Voir
Comment pourrait-il? last_insert_id () est censé être spécifique à la connexion. Pour citer le manuel: «Utiliser simultanément les colonnes de Last_Insert_ID (Id () et AUTO_INCREMENTE à partir de plusieurs clients est parfaitement valide. Chaque client recevra le dernier identifiant inséré pour la dernière instruction que le client a exécuté. '
Eh bien, vous ne connaissez pas l'identifiant de la ligne jusqu'à ce que l'insert soit terminé ... Donc, je ne pense pas que cela ne fonctionne jamais!
Pourquoi ne pas simplement calculer le nom de fichier lorsque vous récupérez la ligne Au lieu de cela? P>
INSERT INTO dir_pictures (file_extension) VALUES ('-data')
SELECT picture_id, CONCAT(picture_id, file_extension) as filename
FROM dir_pictures
Ce n'est pas vraiment possible, ce serait probablement dans votre intérêt à conciser simplement sur le point de sortir au lieu de la manière de. P>
Sélectionnez Concat (ID, '-Text') en tant que nom de fichier de dir_pictures p> blockQuote>
Si vous voulez vraiment le faire dans une déclaration SQL, vous pouvez essayer un piratage comme: p>
méfiez-vous des conditions de course s'il s'agit d'une application multi-threadée ... p>
En outre, je doute que cela fonctionne sur une table vide ... p> Insérer dans Dir_Pictures Set FileName = Concat ((Sélectionnez max (image_id) +1 de dir_pictures), '- test'); code> p> p>
Je pense que si une ligne a été supprimée avant, cela ne sera pas précis
Oui, merci, bonne prise. Si la ligne ajoutée la plus récemment i> a été supprimée, cela échouerait.
Il suffit de sélectionner la valeur actuelle AUTO_INCREMENTE pour le formulaire de tableau. Le tableau Information_schema dans votre insertion:
INSERT INTO dir_pictures SET filename=CONCAT((SELECT auto_increment FROM information_schema.tables WHERE table_name='dir_pictures'), '-test')
Yup, ce serait la façon de le faire dans une déclaration ... mais ce n'est vraiment pas une bonne idée. Je ferais certainement un insertion, puis mettez à jour.
C'est moche et il y a une petite condition de race entre lorsque la sélection interne complète et l'insert fonctionne.