Bagaimana cara mendeklarasikan variabel dalam mysql, sehingga kueri kedua saya dapat menggunakannya?
Saya ingin menulis sesuatu seperti:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Bagaimana cara mendeklarasikan variabel dalam mysql, sehingga kueri kedua saya dapat menggunakannya?
Saya ingin menulis sesuatu seperti:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
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.
SELECT @var_any_var_name
Anda dapat menginisialisasi variabel menggunakan SET
atau SELECT
pernyataan:
SET @start = 1, @finish = 10;
atau
SELECT @start := 1, @finish := 10;
SELECT * FROM places WHERE place BETWEEN @start AND @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.
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:
DELIMITER //
CREATE PROCEDURE sp_test(var1 INT)
BEGIN
DECLARE start INT unsigned DEFAULT 1;
DECLARE finish INT unsigned DEFAULT 10;
SELECT var1, start, finish;
SELECT * FROM places WHERE place BETWEEN start AND finish;
END; //
DELIMITER ;
CALL sp_test(5);
Jika DEFAULT
klausa hilang, nilai awalnya adalah NULL
.
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
atau 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 VARIABLES
pernyataan 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 GLOBAL
atau 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;
=
operator tidak bekerja untuk saya. Ini bekerja dengan baik ketika saya menggunakan :=
operator.
=
Operator hanya bekerja dalam SET
klausa. Untuk menetapkan nilai ke variabel dalam SELECT
kueri, Anda dapat menggunakan :=
operator mis.SELECT @start := 1
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;
...
=
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
SET @counter := 100;
SELECT @variable_name := value;
contoh:
SELECT @price := MAX(product.price)
FROM product
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:
SET @countTotal = (PILIH COUNT (*) DARI nGrams);
Atau yang lain, Anda bisa menggunakan SELECT ... KE:
PILIH COUNT (*) MENJADI @kountTotal DARI nGrams;
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.
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;