Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

At-Sign na instrução SQL antes do nome da coluna


O @ sign é uma variável em SQL.

No MySQL é usado para armazenar um valor entre execuções consecutivas de uma consulta ou para transferir dados entre duas consultas diferentes.

Um exemplo

Transferir dados entre duas consultas
SELECT @biggest:= MAX(field1) FROM atable;
SELECT * FROM bigger_table WHERE field1 > @biggest;

Outro uso é no ranking, para o qual o MySQL não tem suporte nativo.

Armazenar um valor para execuções consecutivas de uma consulta
INSERT INTO table2
  SELECT @rank := @rank + 1, table1.* FROM table1
  JOIN( SELECT @rank := 0 ) AS init
  ORDER BY number_of_users DESC

Observe que, para que isso funcione, a ordem em que as linhas são processadas na consulta deve ser corrigida, é fácil errar.

Veja:
http://dev.mysql .com/doc/refman/5.0/en/user-variables.html
classificação mysql e declaração de classificação
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

ATUALIZAÇÃO
Este código nunca funcionará.
Você acabou de abrir a conexão antes e em nenhum lugar os @fields estão definidos.
Então, atualmente eles mantêm null valores.
Além disso, você não pode usar @vars para denotar nomes de campo , você pode somente use @vars para valores.
$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)";