Anda dapat mengakses variabel yang ditentukan pengguna tanpa mendeklarasikan atau menginisialisasi. Jika Anda merujuk ke variabel yang belum diinisialisasi, itu memiliki nilai NULLdan tipe string.
SELECT@var_any_var_name
Anda dapat menginisialisasi variabel menggunakan SETatau SELECTpernyataan:
SET@start=1,@finish =10;
atau
SELECT@start:=1,@finish :=10;SELECT*FROM places WHERE place BETWEEN@startAND@finish;
Variabel pengguna dapat diberi nilai dari sekumpulan tipe data terbatas: integer, desimal, floating-point, string biner atau non-biner, atau nilai NULL.
Variabel yang ditentukan pengguna khusus untuk sesi. Yaitu, variabel pengguna yang ditentukan oleh satu klien tidak dapat dilihat atau digunakan oleh klien lain.
Server MySQL memelihara banyak variabel sistem yang dikonfigurasikan ke nilai default. Mereka bisa bertipe GLOBAL, SESSIONatau BOTH.
Variabel global memengaruhi operasi server secara keseluruhan sedangkan variabel sesi memengaruhi operasinya untuk koneksi klien individual.
Untuk melihat nilai saat ini yang digunakan oleh server yang berjalan, gunakan SHOW VARIABLESpernyataan atau SELECT @@var_name.
SHOW VARIABLES LIKE'%wait_timeout%';SELECT@@sort_buffer_size;
Mereka dapat diatur pada permulaan server menggunakan opsi pada baris perintah atau dalam file opsi. Sebagian besar dari mereka dapat diubah secara dinamis saat server berjalan menggunakan SET GLOBALatau SET SESSION:
-- Syntax to Set value to a Global variable:SET GLOBAL sort_buffer_size=1000000;SET@@global.sort_buffer_size=1000000;-- Syntax to Set value to a Session variable:SET sort_buffer_size=1000000;SET SESSION sort_buffer_size=1000000;SET@@sort_buffer_size=1000000;SET@@local.sort_buffer_size=10000;
Entah bagaimana =operator tidak bekerja untuk saya. Ini bekerja dengan baik ketika saya menggunakan :=operator.
divinedragon
24
=Operator hanya bekerja dalam SETklausa. Untuk menetapkan nilai ke variabel dalam SELECTkueri, Anda dapat menggunakan :=operator mis.SELECT @start := 1
Omesh
2
Bisakah Anda menjelaskan apa artinya ini: "Tidak perlu mendeklarasikan variabel Sesi yang Ditentukan Pengguna dilambangkan dengan awalan @"?
billynoah
3
@ billynoah Saya berasumsi itu berarti bahwa variabel Sesi yang Ditentukan Pengguna (yang dimulai dengan @) tidak perlu deklarasi eksplisit; Anda bisa langsung menugaskan mereka seolah-olah sudah diumumkan.
jobo3208
2
Dan Anda dapat menetapkan variabel dengan hasil pernyataan pilih seperti ini: SET @subscriptionId = (pilih berlanggananId dari Pengguna di mana emailAddress='[email protected] ');
Perangkat Lunak Prophets
28
SET
SET@var_name = value
ATAU
SET@var := value
kedua operator = dan : = diterima
PILIH
SELECT col1,@var_name := col2 from tb_name WHERE"conditon";
jika beberapa set rekaman hanya ditemukan nilai terakhir di col2 adalah keep (override);
SELECT col1, col2 INTO@var_name, col3 FROM.....
dalam hal ini hasil pilih tidak mengandung nilai col2
Mantan kedua metode yang digunakan
- TRIGGER_BEFORE_INSERT --- mengatur nilai kolom dari perhitungan
...SELECT count(*)INTO@NR FROM a_table WHERE a_condition;SET NEW.ord_col = IFNULL(@NR,0)+1;...
Saya kira sintaks SELECT mysql diperlukan untuk memisahkan arti = (perbandingan) dari: = (asign)
bortunac
1
Dalam kasus tertentu, nilai yang tersisa di variabel mungkin TIDAK sesuai dengan baris terakhir yang dikembalikan. Sebagai contoh, SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10muncul untuk mengevaluasi tugas variabel sebelum pesanan dilakukan, sehingga nilai yang dikembalikan dari @var bahkan mungkin tidak berhubungan dengan salah satu baris yang dikembalikan. Namun, dokumen tidak mengatakan dalam kondisi apa ini bisa terjadi.
variabel lokal (yang tidak diawali oleh @) diketik dan dicakup dengan kuat ke blok program yang disimpan di mana mereka dideklarasikan. Perhatikan bahwa, sebagaimana didokumentasikan dalam DECLARE Syntax :
DECLARE hanya diizinkan di dalam BEGIN ... END pernyataan majemuk dan harus pada awalnya, sebelum pernyataan lainnya.
Variabel pengguna (yang diawali dengan @) diketik longgar dan dilingkupi untuk sesi. Perhatikan bahwa mereka tidak perlu atau tidak dapat dinyatakan — cukup gunakan secara langsung.
Oleh karena itu, jika Anda mendefinisikan program yang disimpan dan benar-benar menginginkan "variabel lokal", Anda harus menghapus karakter @ dan memastikan bahwa pernyataan DECLARE Anda ada di awal blok program Anda. Jika tidak, untuk menggunakan "variabel pengguna", jatuhkan pernyataan DECLARE.
Selain itu, Anda harus mengelilingi kueri Anda dalam tanda kurung untuk menjalankannya sebagai subquery:
SET @countTotal = (PILIH COUNT (*) DARI nGrams);
Atau yang lain, Anda bisa menggunakan SELECT ... KE:
Untuk setiap orang yang menggunakan @variable di fungsi concat_ws untuk mendapatkan nilai yang digabungkan, jangan lupa untuk menginisialisasi ulang dengan nilai kosong. Kalau tidak, bisa menggunakan nilai lama untuk sesi yang sama.
Jawaban:
Ada terutama tiga jenis variabel di MySQL:
Variabel yang ditentukan pengguna (diawali dengan
@
):Anda dapat mengakses variabel yang ditentukan pengguna tanpa mendeklarasikan atau menginisialisasi. Jika Anda merujuk ke variabel yang belum diinisialisasi, itu memiliki nilai
NULL
dan tipe string.Anda dapat menginisialisasi variabel menggunakan
SET
atauSELECT
pernyataan:atau
Variabel pengguna dapat diberi nilai dari sekumpulan tipe data terbatas: integer, desimal, floating-point, string biner atau non-biner, atau nilai NULL.
Variabel yang ditentukan pengguna khusus untuk sesi. Yaitu, variabel pengguna yang ditentukan oleh satu klien tidak dapat dilihat atau digunakan oleh klien lain.
Mereka dapat digunakan dalam
SELECT
kueri menggunakan teknik variabel pengguna MySQL Lanjut .Variabel Lokal (tanpa awalan):
Variabel lokal perlu dideklarasikan menggunakan
DECLARE
sebelum mengaksesnya.Mereka dapat digunakan sebagai variabel lokal dan parameter input di dalam prosedur tersimpan:
Jika
DEFAULT
klausa hilang, nilai awalnya adalahNULL
.Ruang lingkup variabel lokal adalah
BEGIN ... END
blok di mana ia dideklarasikan.Variabel Sistem Server (diawali dengan
@@
):Server MySQL memelihara banyak variabel sistem yang dikonfigurasikan ke nilai default. Mereka bisa bertipe
GLOBAL
,SESSION
atauBOTH
.Variabel global memengaruhi operasi server secara keseluruhan sedangkan variabel sesi memengaruhi operasinya untuk koneksi klien individual.
Untuk melihat nilai saat ini yang digunakan oleh server yang berjalan, gunakan
SHOW VARIABLES
pernyataan atauSELECT @@var_name
.Mereka dapat diatur pada permulaan server menggunakan opsi pada baris perintah atau dalam file opsi. Sebagian besar dari mereka dapat diubah secara dinamis saat server berjalan menggunakan
SET GLOBAL
atauSET SESSION
:sumber
=
operator tidak bekerja untuk saya. Ini bekerja dengan baik ketika saya menggunakan:=
operator.=
Operator hanya bekerja dalamSET
klausa. Untuk menetapkan nilai ke variabel dalamSELECT
kueri, Anda dapat menggunakan:=
operator mis.SELECT @start := 1
ATAU
kedua operator = dan : = diterima
jika beberapa set rekaman hanya ditemukan nilai terakhir di col2 adalah keep (override);
dalam hal ini hasil pilih tidak mengandung nilai col2
Mantan kedua metode yang digunakan
- TRIGGER_BEFORE_INSERT --- mengatur nilai kolom dari perhitungan
sumber
=
dan:=
?SELECT DISTINCT IFNULL(@var:=Name,'unknown') FROM Customers ORDER BY <some non-indexed expression> LIMIT 10
muncul untuk mengevaluasi tugas variabel sebelum pesanan dilakukan, sehingga nilai yang dikembalikan dari @var bahkan mungkin tidak berhubungan dengan salah satu baris yang dikembalikan. Namun, dokumen tidak mengatakan dalam kondisi apa ini bisa terjadi.Gunakan set atau pilih
contoh:
sumber
Berbagai jenis variabel:
DECLARE hanya diizinkan di dalam BEGIN ... END pernyataan majemuk dan harus pada awalnya, sebelum pernyataan lainnya.
Oleh karena itu, jika Anda mendefinisikan program yang disimpan dan benar-benar menginginkan "variabel lokal", Anda harus menghapus karakter @ dan memastikan bahwa pernyataan DECLARE Anda ada di awal blok program Anda. Jika tidak, untuk menggunakan "variabel pengguna", jatuhkan pernyataan DECLARE.
Selain itu, Anda harus mengelilingi kueri Anda dalam tanda kurung untuk menjalankannya sebagai subquery:
Atau yang lain, Anda bisa menggunakan SELECT ... KE:
sumber
Untuk setiap orang yang menggunakan @variable di fungsi concat_ws untuk mendapatkan nilai yang digabungkan, jangan lupa untuk menginisialisasi ulang dengan nilai kosong. Kalau tidak, bisa menggunakan nilai lama untuk sesi yang sama.
sumber
Menyatakan:
SET @a = 1;
Pemakaian:
INSERT INTO `t` (`c`) VALUES (@a);
sumber
Nilai SET
sumber