Hướng dẫn biến trong mysql

T-SQL cũng có thể coi nó như là một ngôn ngữ lập trình nên nó cũng tồn tại các khái niệm kiểu dữ liệu, biến và khai báo biến, các vòng lặp, câu ifelse,... Nhưng chúng ta rất ít sử dụng nó để viết các ứng dụng website. Nhưng bạn cũng không nên bỏ qua phần kiến thức bổ ích này nhé.

Hướng dẫn biến trong mysql

Hướng dẫn biến trong mysql

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong bài này chúng ta sẽ tìm hiểu biến trong Procedure và cách khai báo, thiết lập giá trị cho biến trong Stored Procedure.

1. Khai báo biến trong MySql Stored Procedure

Để định nghĩa một biến mới ta dùng cú pháp :

DECLARE variable_name datatype(size) DEFAULT default_value

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • DECLARE: là từ khóa tạo biến
  • variable_name là tên biến
  • datatype(size) là kiểu dữ liệu của biến và kích thước của nó
  • DEFAULT default_value: là gán giá trị mặc định cho biến

Ví dụ:

DECLARE product_title VARCHAR(255) DEFAULT 'No Name';

2. Gán giá trị cho biến trong MySql Stored Procedure

Tạo biến rồi thì phải gán giá trị cho nó chứ đúng không nào? Để gán giá trị cho nó thì chúng ta sử dụng tư khóa SET:

SET variable_name = 'value';

Ví dụ: Định nghĩa biến age và gán giá trị 20 cho nó.

DECLARE age INT(11) DEFAULT 0

SET age = 12

Ví dụ: Gán giá trị thông qua lệnh SELECT

DECLARE total_products INT DEFAULT 0
 
SELECT COUNT(*) INTO total_products
FROM products

Trong ví dụ này thì trước tiên nó sẽ thực hiện câu truy vấn SQL đếm tổng số record và sau đó gán vào biến total_products bằng lệnh (COUNT(*) INTO total_products).

4. Phạm vi hoạt động của biến

Nếu như bạn định nghĩa một biến bên trong phần thân của Procedure (giữa BEGIN và END) thì đó ta gọi là biến cục bộ của Procedure. Bạn có thể định nghĩa nhiều biến trong một Procedure.

Ví dụ:

DELIMITER $$
DROP PROCEDURE IF EXISTS tinhTong $$
CREATE PROCEDURE tinhTong()
BEGIN
	DECLARE a INT (11) DEFAULT 0;
	DECLARE b INT (11) DEFAULT 0;
	DECLARE tong INT (11) DEFAULT 0;
	
	SET a = 200;
	SET b = 300;
	SET tong = a + b;
	
	SELECT tong;
	
END; $$
DELIMITER;

Ở procedure này tôi đã định nghĩa các biến a,b,tong và tính toán trên đó. Bạn chạy câu sql trên và sau đó gọi nó bằng lệnh call tinhTong thì nó sẽ cho kết quả là 500.

Nếu một biến được khai báo bên ngoài Procedure thì bên trong Procedure sẽ không nhận được và sẽ thông báo lỗi.

Ví dụ:

DELIMITER $$
DECLARE tong INT (11) DEFAULT 0;
DROP PROCEDURE IF EXISTS tinhTong $$
CREATE PROCEDURE tinhTong()
BEGIN
	DECLARE a INT (11) DEFAULT 0;
	DECLARE b INT (11) DEFAULT 0;
		
	SET a = 200;
	SET b = 300;
	SET tong = a + b;
	
	SELECT tong;
	
END; $$
DELIMITER;

Chương trình này lỗi vì biến tong không tồn tại trong Procedure.

Lời kết:

Trong bài này chủ yếu chúng ta học cách định nghĩa một biến trong MYSQL như thế nào? Cách gán dữ liệu cho biến và thực thi kết quả câu truy vấn SQL rồi gán vào biến đó. Bài tương đối đơn giản nên rất dễ học, ở bài tiếp theo chúng ta sẽ tìm hiểu cách khai báo tham số truyền vào Procedure nhé.

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;

  • mysql
  • sql

291 hữu ích 0 bình luận 515k xem chia sẻ

answer

504

Hướng dẫn biến trong mysql

Có ba loại biến chủ yếu trong MySQL:

  1. Các biến do người dùng xác định (có tiền tố là @):

    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ị NULLvà một loại chuỗi.

    SELECT @var_any_var_name

    Bạn có thể khởi tạo một biến bằng cách sử dụng SEThoặc SELECTcâu lệnh:

    SET @start = 1, @finish = 10;    

    hoặc là

    SELECT @start := 1, @finish := 10;
    
    SELECT * FROM places WHERE place BETWEEN @start AND @finish;

    Biến người dùng có thể được chỉ định 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, số thập phân, dấu phẩy động, chuỗi nhị phân hoặc chuỗi không nhị phân hoặc giá trị NULL.

    Các biến do người dùng định nghĩa là phiên cụ thể. Đó là, một biến người dùng được xác định bởi một khách hàng không thể được nhìn thấy hoặc sử dụng bởi các khách hàng khác.

    Chúng có thể được sử dụng trong SELECTcác truy vấn bằng cách sử dụng các kỹ thuật biến người dùng MySQL nâng cao .

  2. 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 DECLAREtrước khi truy cập nó.

    Chúng có thể được sử dụng như các biến cục bộ và các tham số đầu vào bên trong một thủ tục đượ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 DEFAULTmệnh đề bị thiếu, giá trị ban đầu là NULL.

    Phạm vi của một biến cục bộ là BEGIN ... ENDkhối trong đó nó được khai báo.

  3. Biến hệ thống máy chủ (có tiền tố @@):

    Máy chủ MySQL duy trì nhiều biến hệ thống được cấu hình thành một giá trị mặc định. Họ có thể là loại GLOBAL, SESSIONhoặc BOTH.

    Các biến toàn cục ảnh hưởng đến hoạt động chung của máy chủ trong khi các biến phiên ảnh hưởng đến hoạt động của nó đối với các kết nối máy khách 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 SHOW VARIABLEScâu lệnh hoặc SELECT @@var_name.

    SHOW VARIABLES LIKE '%wait_timeout%';
    
    SELECT @@sort_buffer_size;

    Chúng có thể được đặt khi máy chủ khởi động bằng các tùy chọn trên dòng lệnh hoặc trong tệp tùy chọn. Hầu hết trong số chúng có thể được thay đổi linh hoạt trong khi máy chủ đang chạy bằng SET GLOBALhoặc 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;

504 hữu ích 5 bình luận chia sẻ

answer

21

Hướng dẫn biến trong mysql

BỘ

SET @var_name = value 

HOẶC LÀ

SET @var := value

cả hai toán tử =: = đều được chấp nhận


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 được giữ (ghi đè);

SELECT col1, col2 INTO @var_name, col3 FROM .....

trong trường hợp này, kết quả của lựa chọn không chứa giá trị col2

21 hữu ích 2 bình luận chia sẻ

answer

11

Hướng dẫn biến trong mysql

Sử dụng thiết lập hoặc chọn

SET @counter := 100;
SELECT @variable_name := value;

thí dụ :

SELECT @price := MAX(product.price)
FROM product 

11 hữu ích 0 bình luận chia sẻ

answer

2

Hướng dẫn biến trong mysql

DECLARE var_name [, var_name] ... gõ [giá trị DEFAULT] Câu lệnh này khai báo các biến cục bộ trong các chương trình được lưu trữ.

Vd KHAI THÁC id id không dấu DEFAULT 1;

Để cung cấp giá trị mặc định cho một biến, hãy bao gồm mệnh đề DEFAULT. Giá trị có thể được chỉ định như một biểu thức; nó không cần phải là một hằng số Nếu mệnh đề DEFAULT bị thiếu, giá trị ban đầu là NULL.

Các biến cục bộ được xử lý như các tham số thường trình được lưu trữ đối với kiểu dữ liệu và kiểm tra tràn.

Khai báo biến phải xuất hiện trước khi khai báo con trỏ hoặc xử lý.

Tên biến cục bộ không phân biệt chữ hoa chữ thường. Các ký tự được phép và quy tắc trích dẫn giống như đối với các mã định danh khác

Phạm vi của một biến cục bộ là khối BEGIN ... END trong đó nó được khai báo. Biến có thể được tham chiếu trong các khối được lồng trong khối khai báo, ngoại trừ các khối khai báo một biến có cùng tên.

2 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn biến trong mysql

Đối với bất kỳ người nào sử dụng @variable trong hàm concat_ws để nhận các giá trị được nối, đừng quên xác định lại 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.

Set @Ids = '';

select 
  @Ids := concat_ws(',',@Ids,tbl.Id),
  tbl.Col1,
  ...
from mytable tbl;

0 hữu ích 0 bình luận chia sẻ

Hướng dẫn biến trong mysql

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Hướng dẫn biến trong mysql