sql >> Databasteknik >  >> RDS >> Mysql

At-Sign in SQL-sats före kolumnnamn

@ tecken är en variabel i SQL.

I MySQL används det för att lagra ett värde mellan på varandra följande körningar av en fråga, eller för att överföra data mellan två olika frågor.

Ett exempel

Överför data mellan två frågor

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

En annan användning är i rankning, som MySQL inte har inbyggt stöd för.

Lagra ett värde för på varandra följande körningar av en fråga

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

Observera att för att detta ska fungera måste ordningen i vilken raderna bearbetas i frågan fixas, det är lätt att få fel.

Se:
http://dev.mysql .com/doc/refman/5.0/en/user-variables.html
mysql-sorterings- och rankningsuttalande
http:// www.xaprb.com/blog/2006/12/15/advanced-mysql-user-variable-techniques/

UPPDATERA
Den här koden kommer aldrig att fungera.
Du har precis öppnat anslutningen tidigare och ingenstans är @fälten inställda.
Så för närvarande håller de null värden.
Till råga på det kan du inte använda @vars för att ange fältnamn , du kan bara använd @vars för värden.

$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)";



  1. Vad är det maximala intervallet för varchar i MySQL?

  2. Migrera MySQL till PostgreSQL på AWS RDS, del 1

  3. Matcha utbud med efterfrågan – lösningar, del 3

  4. Använda en NoSQL-databas över MySQL