Mysql
 sql >> Base de données >  >> RDS >> Mysql

At-Sign dans l'instruction SQL avant le nom de la colonne

Le @ signe est une variable en SQL.

Dans MySQL, il est utilisé pour stocker une valeur entre des exécutions consécutives d'une requête ou pour transférer des données entre deux requêtes différentes.

Un exemple

Transférer des données entre deux requêtes

SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;

Une autre utilisation concerne le classement, pour lequel MySQL n'a pas de support natif.

Stocker une valeur pour des exécutions consécutives d'une requête

INSERT INTO table2
  SELECT @rank := @rank + 1, table1.* FROM table1
  JOIN( SELECT @rank := 0 ) AS init
  ORDER BY number_of_users DESC

Notez que pour que cela fonctionne, l'ordre dans lequel les lignes sont traitées dans la requête doit être fixe, il est facile de se tromper.

Voir :
http://dev.mysql .com/doc/refman/5.0/en/user-variables.html
déclaration de tri et de classement mysql
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

MISE À JOUR
Ce code ne fonctionnera jamais.
Vous venez d'ouvrir la connexion auparavant et nulle part les @champs ne sont définis.
Donc, ils contiennent actuellement null valeurs.
Pour couronner le tout, vous ne pouvez pas utiliser @vars pour désigner les noms de champs , vous ne pouvez que utilisez @vars pour les valeurs.

$sql1 = "
LOAD DATA LOCAL INFILE 'import.csv'
REPLACE INTO TABLE tablename
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'
IGNORE 1 LINES
(`normalField`, @field1, @field2, `normalField2`, @field3, @field4)";