Làm thế nào để khai báo một biến trong MySQL, để truy vấn thứ hai của tôi có thể sử dụng nó?
Tôi muốn viết một cái gì đó như:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Hỏi ngày 1 tháng 8 năm 2012 lúc 7:47Aug 1, 2012 at 7:47
1
Chủ yếu có ba loại biến trong MySQL:
Các biến do người dùng xác định [có tiền tố với
6]:SELECT @var_any_var_name
Bạn có thể truy cập bất kỳ biến do người dùng xác định mà không cần khai báo hoặc khởi tạo nó. Nếu bạn đề cập đến một biến chưa được khởi tạo, nó có giá trị
7 và một loại chuỗi.SELECT @var_any_var_name
SELECT @var_any_var_name
Bạn có thể khởi tạo một biến bằng cách sử dụng câu lệnh
8 hoặcSELECT @var_any_var_name
9:SELECT @var_any_var_name
SET @start = 1, @finish = 10;
hoặc
SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Các biến người dùng có thể được gán một giá trị từ một tập hợp các loại dữ liệu giới hạn: số nguyên, thập phân, điểm nổi, chuỗi nhị phân hoặc không phân giải hoặc giá trị null.
Các biến do người dùng xác định là dành riêng cho phiên. Đó là, một biến người dùng được xác định bởi một máy khách không thể được nhìn thấy hoặc sử dụng bởi các máy khách khác.
Chúng có thể được sử dụng trong các truy vấn
9 bằng các kỹ thuật biến người dùng MySQL nâng cao.SELECT @var_any_var_name
Các biến cục bộ [không có tiền tố]:
Các biến cục bộ cần được khai báo bằng cách sử dụng
1 trước khi truy cập nó.SET @start = 1, @finish = 10;
Chúng có thể được sử dụng làm biến cục bộ và các tham số đầu vào bên trong quy trình được lưu trữ:
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];
Nếu mệnh đề
2 bị thiếu, giá trị ban đầu làSET @start = 1, @finish = 10;
7.SELECT @var_any_var_name
Phạm vi của một biến cục bộ là khối
4 trong đó được khai báo.SET @start = 1, @finish = 10;
Các biến hệ thống máy chủ [được đặt trước với
5]:SET @start = 1, @finish = 10;
Máy chủ MySQL duy trì nhiều biến hệ thống được cấu hình theo giá trị mặc định. Chúng có thể thuộc loại
6,SET @start = 1, @finish = 10;
7 hoặcSET @start = 1, @finish = 10;
8.SET @start = 1, @finish = 10;
Các biến toàn cầu ảnh hưởng đến hoạt động tổng thể của máy chủ trong khi các biến phiên ảnh hưởng đến hoạt động của nó cho các kết nối khách hàng riêng lẻ.
Để xem các giá trị hiện tại được sử dụng bởi một máy chủ đang chạy, hãy sử dụng câu lệnh
9 hoặcSET @start = 1, @finish = 10;
0.SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
SHOW VARIABLES LIKE '%wait_timeout%'; SELECT @@sort_buffer_size;
Chúng có thể được đặt tại máy chủ khởi động bằng các tùy chọn trên dòng lệnh hoặc trong một tệp tùy chọn. Hầu hết chúng có thể được thay đổi một cách linh hoạt trong khi máy chủ đang chạy bằng cách sử dụng
1 hoặcSELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
2:SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
-- 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;
Đã trả lời ngày 1 tháng 8 năm 2012 lúc 7:48Aug 1, 2012 at 7:48
OmeshomeshOmesh
26.8K6 Huy hiệu vàng41 Huy hiệu bạc 50 Huy hiệu Đồng6 gold badges41 silver badges50 bronze badges
9
BỘ
SET @var_name = value; /* or */ SET @var_name := value;
Cả hai toán tử = và: = được chấp nhận= and := are accepted
LỰA CHỌN
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
Nếu nhiều bộ bản ghi chỉ tìm thấy giá trị cuối cùng trong col2 là giữ [ghi đè];
SELECT col1, col2 INTO @var_name, col3 FROM .....
Trong trường hợp này, kết quả chọn không chứa các giá trị col2
Ex cả hai phương pháp được sử dụng
-Trigger_befor_insert --- Đặt giá trị cột từ các tính toán
SELECT @var_any_var_name
0Đã trả lời ngày 19 tháng 1 năm 2017 lúc 11:10Jan 19, 2017 at 11:10
Bortunacbortunacbortunac
4.5241 Huy hiệu vàng 30 Huy hiệu bạc21 Huy hiệu Đồng1 gold badge30 silver badges21 bronze badges
3
Sử dụng đặt hoặc chọnset or select
SELECT @var_any_var_name
1thí dụ :
SELECT @var_any_var_name
2Đã trả lời ngày 23 tháng 12 năm 2016 lúc 17:26Dec 23, 2016 at 17:26
Các loại biến khác nhau:
- Các biến cục bộ [không được tiền tố bởi @] được gõ mạnh và phân tích vào khối chương trình được lưu trữ trong đó chúng được khai báo. Lưu ý rằng, như đã được ghi lại trong Synare Syntax: [which are not prefixed by @] are strongly typed and scoped to the stored program block in which they are declared. Note that, as documented under DECLARE Syntax:
Tuyên bố chỉ được phép trong một bắt đầu ... Báo cáo ghép kết thúc và phải bắt đầu, trước bất kỳ tuyên bố nào khác.
- Các biến người dùng [được tiền tố bởi @] được gõ một cách lỏng lẻo và phân chia vào phiên. Lưu ý rằng họ không cần và không thể được tuyên bố là chỉ cần sử dụng chúng trực tiếp. [which are prefixed by @] are loosely typed and scoped to the session. Note that they neither need nor can be declared—just use them directly.
Do đó, nếu bạn đang xác định một chương trình được lưu trữ và thực sự muốn có một "biến cục bộ", bạn sẽ cần bỏ ký tự @ và đảm bảo rằng câu lệnh khai báo của bạn đang ở đầu khối chương trình của bạn. Mặt khác, để sử dụng "biến người dùng", hãy bỏ câu lệnh khai báo.
Hơn nữa, bạn sẽ cần phải bao quanh truy vấn của mình trong ngoặc đơn để thực hiện nó như một truy vấn con:
Đặt @CountTotal = [chọn Đếm [*] từ Ngrams];
Hoặc nếu không, bạn có thể sử dụng Chọn ... vào:
Chọn Đếm [*] vào @Counttotal từ Ngrams;
Đã trả lời ngày 6 tháng 8 năm 2019 lúc 12:14Aug 6, 2019 at 12:14
MohammadalimohammadalimohammadAli
1831 Huy hiệu bạc10 Huy hiệu đồng1 silver badge10 bronze badges
Tuyên bố:
3SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Sử dụng:
4SELECT @start := 1, @finish := 10; SELECT * FROM places WHERE place BETWEEN @start AND @finish;
Đã trả lời ngày 9 tháng 11 năm 2019 lúc 12:38Nov 9, 2019 at 12:38
Yayayayayaya
6,8891 Huy hiệu vàng33 Huy hiệu bạc35 Huy hiệu đồng1 gold badge33 silver badges35 bronze badges
2
Đối với bất kỳ người nào sử dụng hàm trong hàm Concat_WS để nhận các giá trị được nối, đừng quên tái tạo nó với giá trị trống. Nếu không, nó có thể sử dụng giá trị cũ cho cùng một phiên.
SELECT @var_any_var_name
3Đã trả lời ngày 27 tháng 11 năm 2018 lúc 17:01Nov 27, 2018 at 17:01
Imran Javedimran JavedImran Javed
Huy hiệu vàng 11K22 gold badges15 silver badges16 bronze badges
Tôi muốn cung cấp cho người lái của tôi ở đây để mọi người có thể thử, giải pháp cho mysql mà tôi nghĩ dễ hiểu hơn:
SELECT @var_any_var_name
4Đã trả lời ngày 28 tháng 9 lúc 9:36Sep 28 at 9:36
Đặt giá trị
SELECT @var_any_var_name
5Đã trả lời ngày 30 tháng 5 năm 2019 lúc 12:31May 30, 2019 at 12:31