Mysql cũng hỗ trợ khái niệm Biến do người dùng định nghĩa, cho phép chuyển một giá trị từ câu lệnh này sang câu lệnh khác. Một biến do người dùng định nghĩa trong Mysql được viết là @var_name trong đó, var_name là tên của biến và có thể bao gồm các ký tự chữ và số,. , _ và $
- Biến do người dùng định nghĩa là phiên cụ thể i. Biến e được xác định bởi một khách hàng không được chia sẻ với khách hàng khác và khi phiên kết thúc, các biến này sẽ tự động hết hạn
- Các biến này không phân biệt chữ hoa chữ thường. Vì vậy, @mark hoặc @Mark đều đề cập đến cùng một giá trị
- Độ dài tối đa của biến có thể là 64 ký tự
- Tên biến có thể bao gồm các ký tự khác như- {. , #, ^, -,. } trong tên của nó, nếu chúng được trích dẫn. Đối với ex- @’var@1′ hoặc @”var^2″ hoặc @`var3`
- Các biến này không thể được khai báo, chúng chỉ được khởi tạo i. e tại thời điểm khai báo chúng phải được gán một giá trị
- Một biến không được khai báo cũng có thể được truy cập trong câu lệnh SQL nhưng giá trị của chúng được đặt là NULL
- Các biến này có thể nhận các giá trị từ tập hợp các kiểu dữ liệu sau - { số nguyên, dấu phẩy động, số thập phân, nhị phân, chuỗi không nhị phân hoặc giá trị NULL
cú pháp
SET @var_name = expression
ví dụ
1. Gán giá trị cho biến bằng lệnh SET
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;
Giá trị của các biến này có thể được hiển thị bằng cách giới thiệu chúng trong câu lệnh CHỌN-
mysql>SELECT @var1, @var2;
đầu ra
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+
2. Truy cập một biến không được khai báo
mysql>SELECT @var3;
đầu ra
+-------+ | @var3 | +-------+ | NULL | +-------+
Ở đây, biến @var3 không được khai báo nên giá trị mặc định của nó là NULL
3. Gán giá trị cho một biến mà không cần sử dụng SET
mysql>SELECT @var3 := 4;
đầu ra
+----------+ | @var3:=4 | +----------+ | 4 | +----------+
Trong ví dụ trên- biến @var3 chỉ nên được gán giá trị bằng cách sử dụng. = not =, cái sau được coi là so sánh trong câu lệnh không phải SET. Giống-
đầu ra
+----------+ | @var4=5 | +----------+ | NULL | +----------+
Làm thế nào các biến này được sử dụng để lưu trữ các giá trị, được sử dụng trong tương lai
Hãy xem xét, bảng Sinh viên sau đây-
s_ids_namemark1shagun152taruna53riya154palak105neha76garima17Bây giờ, chúng ta phải tìm thứ hạng của những sinh viên này bằng cách sử dụng các biến do người dùng xác định
Đối với điều này, chúng tôi khởi tạo hai biến - @rank và @prev_mark
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;0
Truy vấn
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;1
Ở đây, biến @rank dùng để lưu thứ hạng của sinh viên và @prev_mark dùng để lưu điểm của các sinh viên trước đó
So sánh giữa các điểm được thực hiện để trong trường hợp nếu hai học sinh có điểm bằng nhau thì có thể tránh được việc tăng biến @rank
Các thay đổi trong cả hai biến diễn ra sau khi bảng sinh viên được sắp xếp theo thứ tự giảm dần theo cột “mark”
đầu ra
s_namerankmarksgarima117shagun215riya215palak310neha47taruna55Như vậy ta được bảng sinh viên kết quả được sắp xếp theo cột “marks” giảm dần cùng với thứ hạng sinh viên
Ghi chú. Trong truy vấn trên, hãy quan tâm đến thứ tự của cột trong câu lệnh chọn. Nếu cột “marks” được viết trước cột “rank” thì chúng tôi không nhận được kết quả mong muốn. Bởi vì mỗi khi @prev_mark được gán điểm của sinh viên hiện tại, kết quả đánh giá @prev_mark. = đánh dấu là sai. Vì vậy, thứ hạng của mọi sinh viên được hiển thị là không tăng i. e nó sẽ vẫn là 0
Để hiểu khái niệm trên, chúng ta hãy tạo một bảng. Sau đây là truy vấn để tạo một bảng -
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;2
Bây giờ chúng ta hãy chèn một số bản ghi vào bảng. Sau đây là truy vấn để chèn bản ghi -
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;3
Hiển thị tất cả các bản ghi từ bảng với sự trợ giúp của câu lệnh chọn. Truy vấn để hiển thị tất cả các bản ghi như sau -
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;4
Sau đây là đầu ra -
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;5
Bây giờ bạn có thể đặt kết quả truy vấn trong một biến với sự trợ giúp của lệnh SET. Truy vấn như sau
Bạn muốn lưu một giá trị do một biểu thức tạo ra để bạn có thể tham chiếu đến nó trong một câu lệnh tiếp theo
Sử dụng biến do người dùng xác định để lưu trữ giá trị để sử dụng sau này
Bạn có thể gán một giá trị được trả về bởi câu lệnh
+-------+ | @var3 | +-------+ | NULL | +-------+7 cho một biến do người dùng xác định, sau đó tham khảo biến đó sau trong phiên mysql của bạn. Điều này cung cấp một cách để lưu kết quả được trả về từ một câu lệnh và sau đó tham khảo nó sau trong các câu lệnh khác. Cú pháp gán giá trị cho biến người dùng trong câu lệnh
+-------+ | @var3 | +-------+ | NULL | +-------+7 là
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;61
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;62
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;63
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;64, trong đó
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;62 là tên biến và
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;64 là giá trị mà bạn đang truy xuất. Biến có thể được sử dụng trong các câu lệnh tiếp theo bất cứ nơi nào một biểu thức được cho phép, chẳng hạn như trong mệnh đề
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;67 hoặc trong câu lệnh
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;68
Một tình huống phổ biến trong đó các biến người dùng có ích là khi bạn cần đưa ra các câu lệnh liên tiếp trên nhiều bảng có liên quan với nhau bởi một giá trị khóa chung. Giả sử bạn có bảng
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;69 với cột
mysql>SELECT @var1, @var2;50 xác định từng khách hàng và bảng
mysql>SELECT @var1, @var2;51 cũng có cột
mysql>SELECT @var1, @var2;50 để cho biết mỗi đơn đặt hàng được liên kết với khách hàng nào. Nếu bạn có tên khách hàng và bạn muốn xóa bản ghi khách hàng cũng như tất cả các đơn đặt hàng của khách hàng, bạn cần xác định giá trị
mysql>SELECT @var1, @var2;50 thích hợp cho khách hàng đó, sau đó xóa các hàng khỏi cả hai bảng
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;69 và
mysql>SELECT @var1, @var2;51 khớp với ID. Một cách để thực hiện việc này là trước tiên hãy lưu giá trị ID vào một biến, sau đó tham chiếu đến biến đó trong các câu lệnh
mysql>SELECT @var1, @var2;56
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+2
Câu lệnh
+-------+ | @var3 | +-------+ | NULL | +-------+7 trước đó gán một giá trị cột cho một biến, nhưng các biến cũng có thể được gán giá trị từ các biểu thức tùy ý. Câu lệnh sau xác định tổng cao nhất của các cột
mysql>SELECT @var1, @var2;58 và
mysql>SELECT @var1, @var2;59 trong bảng
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+50 và gán nó cho biến
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+51
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;6
Một cách sử dụng khác cho biến là lưu kết quả từ
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+52 sau khi tạo một hàng mới trong bảng có cột
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+53
mysql>SELECT @var1, @var2;5
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+52 trả về giá trị của giá trị
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+53 mới. Bằng cách lưu nó vào một biến, bạn có thể tham khảo giá trị nhiều lần trong các câu lệnh tiếp theo, ngay cả khi bạn đưa ra các câu lệnh khác tạo ra các giá trị
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+53 của riêng chúng và do đó thay đổi giá trị được trả về bởi
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+52. Kỹ thuật này sẽ được thảo luận thêm trong Chương 11
Biến người dùng giữ các giá trị đơn lẻ. Nếu bạn gán một giá trị cho một biến bằng câu lệnh trả về nhiều hàng, thì giá trị từ hàng cuối cùng sẽ được sử dụng
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+5
Nếu câu lệnh không trả về hàng nào, thì không có phép gán nào diễn ra và biến vẫn giữ nguyên giá trị trước đó của nó. Nếu biến chưa được sử dụng trước đó, giá trị đó là
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+58
mysql>SELECT @var3;7
Để đặt một biến rõ ràng thành một giá trị cụ thể, hãy sử dụng câu lệnh
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+59. Cú pháp
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+59 có thể sử dụng
mysql>SET @var1 = 2+6; mysql>SET @var2 := @var1-2;63 hoặc
mysql>SELECT @var3;72 để gán giá trị
+-------+ | @var3 | +-------+ | NULL | +-------+2
+-------+-------+ | @var1 | @var2 | +-------+-------+ | 8 | 6 | +-------+-------+59 cũng có thể được sử dụng để gán kết quả
+-------+ | @var3 | +-------+ | NULL | +-------+7 cho một biến, miễn là bạn viết
+-------+ | @var3 | +-------+ | NULL | +-------+7 dưới dạng truy vấn phụ [nghĩa là trong ngoặc đơn] và nó trả về một giá trị. Ví dụ
+-------+ | @var3 | +-------+ | NULL | +-------+4
Giá trị của một biến nhất định sẽ tồn tại cho đến khi bạn gán cho nó một giá trị khác hoặc cho đến khi kết thúc phiên mysql của bạn, tùy theo điều kiện nào đến trước
Tên biến người dùng không phân biệt chữ hoa chữ thường
+-------+ | @var3 | +-------+ | NULL | +-------+5
Ghi chú
Trước MySQL 5. 0, tên biến người dùng phân biệt chữ hoa chữ thường
Biến người dùng chỉ có thể xuất hiện ở những nơi cho phép biểu thức, không phải ở những nơi phải cung cấp hằng số hoặc mã định danh bằng chữ. Mặc dù thật hấp dẫn khi cố gắng sử dụng các biến cho những thứ như tên bảng, nhưng nó không hoạt động. Ví dụ: bạn có thể thử tạo một tên bảng tạm thời bằng cách sử dụng một biến như sau, nhưng nó không hoạt động
+-------+ | @var3 | +-------+ | NULL | +-------+6
Biến người dùng là một phần mở rộng dành riêng cho MySQL cho SQL tiêu chuẩn. Chúng sẽ không hoạt động với các công cụ cơ sở dữ liệu khác