복붙노트

[SQL] MySQL은 : @variable 대 변수. 차이점이 뭐야?

SQL

MySQL은 : @variable 대 변수. 차이점이 뭐야?

내가 게시 한 또 다른 질문에서 누군가가 차이가 있다는 것을 저에게 말했다 :

@variable

과:

variable

MySQL을한다. 그는 또한 MSSQL 일괄 범위를 가지고 있으며, MySQL은 세션 범위가 어떻게 언급했다. 누군가가 나를 위해이에 정교한 수 있습니까?

해결법

  1. ==============================

    1.MySQL은 사용자 정의 변수의 개념을 가지고있다.

    MySQL은 사용자 정의 변수의 개념을 가지고있다.

    그들은 느슨하게 세션에서 어딘가를 초기화 세션이 종료 될 때까지 자신의 가치를 유지 할 수있다 변수를 입력합니다.

    그들은는 앞에 추가되는 @ 서명이 같은 : @var를

    당신은 조회에서 SET 문 또는 내부에이 변수를 초기화 할 수 있습니다 :

    SET @var = 1
    
    SELECT @var2 := 2
    

    MySQL에서 저장 프로 시저를 개발할 때, 당신은 입력 매개 변수를 전달하고 지역 변수를 선언 할 수 있습니다 :

    DELIMITER //
    
    CREATE PROCEDURE prc_test (var INT)
    BEGIN
        DECLARE  var2 INT;
        SET var2 = 1;
        SELECT  var2;
    END;
    //
    
    DELIMITER ;
    

    이러한 변수는 어떤 접두사 앞에 추가되지 않습니다.

    세션 특정 변수 아니지만 절차 변수와 세션 특정 사용자 정의 변수 사이의 차이는, 변수가 NULL로 프로 시저를 호출 할 때마다 초기화된다 절차 :

    CREATE PROCEDURE prc_test ()
    BEGIN
        DECLARE var2 INT DEFAULT 1;
        SET var2 = var2 + 1;
        SET @var2 = @var2 + 1;
        SELECT  var2, @var2;
    END;
    
    SET @var2 = 1;
    
    CALL prc_test();
    
    var2  @var2
    ---   ---
    2     2
    
    
    CALL prc_test();
    
    var2  @var2
    ---   ---
    2     3
    
    
    CALL prc_test();
    
    var2  @var2
    ---   ---
    2     4
    

    당신이 볼 수 있듯이 @ VAR2 (세션 별 변수)이 아니지만, VAR2 (프로 시저 변수), 프로 시저가 호출 될 때마다 다시 초기화됩니다.

    이러한 "세션 변수 (사용자 정의 변수 이외에, MySQL은 또한 @@ global.port 또는 @@ session.sql_mode 같은"세션 변수 "로"전역 변수 "일 수있다 사전 정의 된"시스템 변수 "를 갖는다 "세션 특정 사용자 정의 변수에 무관하다.)

  2. ==============================

    2.MySQL의에서는 @variable는 사용자 정의 된 변수를 나타낸다. 당신은 자신을 정의 할 수 있습니다.

    MySQL의에서는 @variable는 사용자 정의 된 변수를 나타낸다. 당신은 자신을 정의 할 수 있습니다.

    SET @a = 'test';
    SELECT @a;
    

    없이 저장된 프로그램, 변수의 외부는 @, 당신이 자신을 정의 할 수있는 시스템 변수입니다.

    이 변수의 범위는 전체 세션이다. 데이터베이스와의 연결이 존재하는 동안, 변수가 여전히 사용될 수 있다는 것을 의미한다.

    이 변수는 쿼리 (저장 프로 시저, 그렇지 않으면 스크립트, 또는)의 현재 배치에서 사용할 수 MSSQL과 대조적이다. 그것은 동일한 세션에서 다른 배치에 사용할 수 없습니다.

  3. ==============================

    3.MSSQL 프로 시저 내의 변수를 선언 할 것을 요구하고 사람들은 @variable 구 (DECLARE @TEXT VARCHAR (25) = '문자')를 사용한다. 절차의 모든 블록 내에서 선언을 위해 또한, MS는 모든 상단에 선언 요구하는 MySQL을 달리 할 수 ​​있습니다.

    MSSQL 프로 시저 내의 변수를 선언 할 것을 요구하고 사람들은 @variable 구 (DECLARE @TEXT VARCHAR (25) = '문자')를 사용한다. 절차의 모든 블록 내에서 선언을 위해 또한, MS는 모든 상단에 선언 요구하는 MySQL을 달리 할 수 ​​있습니다.

    명령 행에서 좋은, 내가 MySQL의에서 저장 프로 시저 내에서 "= @variable 세트"를를 사용하는 느낌이 있지만 위험합니다. 아무 범위는 없으며 변수 범위 경계에 살고 있습니다. 이 후 글로벌 네임 스페이스이며, 예상치 못한 충돌 및 덮어 쓰기를 생성하는은 "VAR"접두사없이 선언 된 자바 스크립트의 변수와 유사하다.

    나는 MySQL의에서 좋은 사람들이 저장 프로 시저 내에서 다양한 블록 레벨에서 DECLARE @variable을 허용 것으로 기대하고있다. (기호)에 @를 확인할 수 있습니다. @ 기호 접두사 테이블 열 이름에서 별도의 변수 이름을하는 데 도움이 - 그들은 종종 동일로. 물론, 하나는 항상 "V"또는 "L_"접두사를 추가 할 수 있지만 @ 기호는 변수 이름을 건드리지 않고 당신의 데이터를 추출 할 수있는 열을 일치시키는 편리하고 간결한 방법입니다.

    MySQL은 저장 프로 시저에 새로운 그들은 자신의 첫 번째 버전을위한 좋은 일을했다. 그들이 여기에 형성 걸릴 언어의 서버 측의 측면이 성숙 볼 위치를 볼 수있는 pleaure 될 것입니다.

  4. ==============================

    4.원칙적으로, 내가 저장 프로 시저 내에서 (@ 앞에 추가) UserDefinedVariables를 사용합니다. 이것은 내가 두 개 이상의 저장 프로 시저에서 이러한 변수를 필요 특히, 인생을 더 쉽게합니다. 그냥 내가 시스템 변수를 사용하는 것보다, 단지 저장 프로 시저 ONE 내에서 변수를 필요로 할 때 (앞에 추가없이 @).

    원칙적으로, 내가 저장 프로 시저 내에서 (@ 앞에 추가) UserDefinedVariables를 사용합니다. 이것은 내가 두 개 이상의 저장 프로 시저에서 이러한 변수를 필요 특히, 인생을 더 쉽게합니다. 그냥 내가 시스템 변수를 사용하는 것보다, 단지 저장 프로 시저 ONE 내에서 변수를 필요로 할 때 (앞에 추가없이 @).

    @Xybo : 위험한해야 저장 프로 시저에 @variables를 사용하는 이유를 이해하지 않습니다. 당신은 "범위"와 "경계"조금 (초보자로서 나를 위해) 쉽게 비트를 설명해 주시겠습니까?

  5. from https://stackoverflow.com/questions/1009954/mysql-variable-vs-variable-whats-the-difference by cc-by-sa and MIT license