55 votes

Insérer et définir une valeur avec des problèmes max()+1

J'essaie d'insérer une nouvelle ligne et de définir le customer_id avec max()+1. La raison en est que la table a déjà un auto_increatment sur une autre colonne nommée id et la table aura plusieurs lignes avec le même customer_id.

Avec ça:

 INSERT INTO customers
  ( customer_id, firstname, surname )
VALUES 
  ((SELECT MAX( customer_id ) FROM customers) +1, 'jim', 'sock')

... J'obtiens toujours l'erreur suivante :

 #1093 - You can't specify target table 'customers' for update in FROM clause

De plus, comment empêcher que 2 clients différents soient ajoutés en même temps et n'aient pas le même customer_id ?

107voto

EmCo Points 1355

Vous pouvez utiliser l' INSERT ... SELECT pour obtenir la valeur MAX()+1 et insérer en même temps :

 INSERT INTO 
customers( customer_id, firstname, surname )
SELECT MAX( customer_id ) + 1, 'jim', 'sock' FROM customers;

Note: Vous devez laisser tomber le VALUES de votre INSERT et assurez - vous que le SELECT champs sélectionnés correspondent au INSERT a déclaré champs.

15voto

Sharath Nadig Points 149

Utilisez le nom d'alias pour la requête interne comme ceci

 INSERT INTO customers
  ( customer_id, firstname, surname )
VALUES 
  ((SELECT MAX( customer_id )+1 FROM customers cust), 'sharath', 'rock')

5voto

test Points 59
insert into table1(id1) select (max(id1)+1) from table1;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X