web-dev-qa-db-fra.com

MySql Comment définir une variable locale dans une instruction de mise à jour (Syntaxe?)

Comment définir une variable tout en faisant une déclaration de mise à jour? Je n'arrive pas à comprendre la syntaxe.

Donc, je veux quelque chose comme ceci ci-dessous, mais il est dit que la syntaxe est fausse:

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
19
Ray

C'est possible :-

 UPDATE myTable SET col1 = 5,
 col2 = (@tempVariable:=@tempVariable+1) // to increment

Pour définir un entier (pas d'incrément)

 UPDATE myTable SET col1 = 5, 
 col2 = (@tempVariable:=100) // to assign any integer
17
ajreal

Si vous voulez obtenir quelque chose comme ça:

SET @tempVariable := 0; UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;

Vous pouvez faire un truc comme ça:

  • Créez une valeur de colonne.

ALTER TABLE Proj ADD col3 numeric;

  • Donnez une valeur à col3 afin de définir la variable dont vous avez besoin (@tempVariable). 

SET @tempVariable := 0; UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;

  • Laisse tomber le col3

ALTER TABLE Proj DROP col3;

De cette manière, vous pouvez affecter des valeurs à une variable sans modifier les attributs d'une table. C'est vraiment utile pour définir des valeurs dinamiques. 

PAR EXEMPLE: @tempVariable := @otherVariable + 100;

6
kiquenet85

La clé est l'opérateur ": =". Variable utilisateur MySQL

Vous pouvez également affecter une valeur à une variable utilisateur dans les instructions other que SET. Dans ce cas, l'opérateur d'affectation doit être: = et non = car ce dernier est traité comme l'opérateur de comparaison = dans non-SET déclarations:

1 Utilisez celle de la colonne de mise à jour 

SET @tempVariable := 0;

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col3 = @tempVariable := col2 + 1;

@tempVariable est toujours 100 et col3 sera toujours 101. Il semblerait que MySQL utilisera la nouvelle valeur affectée au lieu de la valeur d'origine dans la table. Ceci est différent de MS SQL. Pour plus de clarté, essayez l'exemple suivant, la valeur sera 1001 pour col3 et @tempVariable.

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col2 = 1000
    col3 = @tempVariable := col2 + 1;

2 Utilisez une autre colonne du tableau que la colonne de mise à jour.

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col3 = @tempVariable := col4 + 1;

@tempVariable et col3 auront la même valeur. Ils seront la valeur d'origine col4 + 1. 

2
Shen liang

J'ai testé une requête similaire à l'aide d'une sélection et cela a fonctionné pour moi, donc je réécrirais votre requête comme suit

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = (SELECT @tempVariable + 100);

J'espère que cela pourra aider.

0

J'ai utilisé php ou coldfusion pour faire quelque chose comme ça, (exemple php)

function something($param){

   $localVarCleaned = mysql_real_escape_string($param);

   mysql_query("
   UPDATE tablename
   SET col = ".$localVarCleaned."
   ");
}
0
jamesTheProgrammer