2012-08-01 5 views

답변

337

이 변수의 세 가지 유형의 MySQL에 주로 :

  1. User-defined variables (@로 시작) :

    당신에게 선언하지 않고 사용자 정의 변수에 액세스하거나 초기화 그것을 alizing. 이 초기화되지 않은 변수를 참조하는 경우 값은 NULL이고 문자열 유형입니다.

    SELECT @var_any_var_name 
    

    당신은 SET 또는 문 SELECT 사용하여 변수를 초기화 할 수 있습니다

    SET @start = 1, @finish = 10;  
    

    또는

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

    사용자 변수 데이터 유형의 제한된 집합에서 값을 할당 할 수 있습니다 : 정수 , 십진수, 부동 소수점, 이진 또는 이항 문자열 또는 NULL 값

    사용자 정의 변수는 세션에 따라 다릅니다. 즉, 한 클라이언트가 정의한 변수 변수는 다른 클라이언트에서 볼 수 없거나 사용할 수 없습니다.

    을 사용하여 SELECT 개의 검색어에 사용할 수 있습니다.

  2. Local Variables (국번없이) :

    지역 변수를 접근 DECLARE 전에 사용하여 선언해야합니다.

    들은 로컬 변수로서 사용될 수 있으며, 상기 입력은 프로 시저를 내부 매개 변수 : DEFAULT 절 없으면

    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); 
    

    는 초기 값 NULL이다.

    로컬 변수의 범위는 선언 된 내에있는 BEGIN ... END 블록입니다.

  3. Server System Variables은 (@@로 시작) :

    MySQL 서버가 기본값으로 설정 많은 system variables 유지한다. GLOBAL, SESSION 또는 BOTH 일 수 있습니다.

    전역 변수는 서버의 전체 작동에 영향을 주지만 세션 변수는 개별 클라이언트 연결에 대한 작동에 영향을줍니다.

    실행중인 서버에서 사용하는 현재 값을 확인하려면 SHOW VARIABLES 문 또는 SELECT @@var_name 문을 사용하십시오.

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

    명령 줄의 옵션 또는 옵션 파일을 사용하여 서버를 시작할 때 설정할 수 있습니다. 서버가 SET GLOBAL 또는 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; 
    
+1

어떻게 든'''''''''연산자가 나를 위해 작동하지 않았습니다. ''''=''''연산자를 사용하면 잘 작동합니다. – divinedragon

+14

'='연산자는'SET' 절에서만 작동합니다. 'SELECT' 쿼리에서 변수에 값을 할당하기 위해': = '연산자를 사용할 수 있습니다. 'SELECT @start : = 1' – Omesh

+2

당신은 이것이 무엇을 의미하는지 명확히 할 수 있습니까 : "접두사 @로 표시된 사용자 정의 세션 변수를 선언 할 필요가 없습니까?" – billynoah

8

사용 또는 선택

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

예 :

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

SET

SET @var_name = value 

또는

SET @var := value 

모두 사업자 ==


0을 허용하는 여러 기록 세트를 찾을 경우

SELECT col1, @var_name := col2 from tb_name WHERE "conditon"; 

만 해당 COL2의 마지막 값 (재정의) 유지이다; 이때 선택의 결과

+0

'='과': ='의 차이점은 무엇입니까? –

+1

mysql SELECT 구문은 = (비교)의 의미를 구분하는 데 필요하다고 생각합니다. = (asign) – bortunac

2

DECLARE의 var_name 반은 [var_name 반] ... 타입 [초기 값] 이 문장이 저장 프로그램 내의 로컬 변수 선언 COL2 값이 포함되어 있지에

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

.

Ex. DECLARE id INT 부호가없는 DEFAULT 1;

변수에 기본값을 제공하려면 DEFAULT 절을 포함 시키십시오. 값은 표현식으로 지정할 수 있습니다. 상수 일 필요는 없습니다. DEFAULT 절이 누락 된 경우, 초기 값은 NULL입니다.

로컬 변수는 데이터 형식 및 오버플로 검사와 관련하여 저장된 루틴 매개 변수와 같이 처리됩니다.

커서 또는 핸들러 선언 앞에 변수 선언이 있어야합니다.

로컬 변수 이름은 대/소문자를 구분하지 않습니다.허용되는 문자 및 인용 규칙은 다른 식별자와 동일합니다.

로컬 변수의 범위는 선언 된 BEGIN ... END 블록입니다. 변수는 같은 이름의 변수를 선언하는 블록을 제외하고 선언 블록 내에 중첩 된 블록에서 참조 될 수 있습니다.

관련 문제