[SQL] MySQL은 : @variable 대 변수. 차이점이 뭐야?
SQLMySQL은 : @variable 대 변수. 차이점이 뭐야?
내가 게시 한 또 다른 질문에서 누군가가 차이가 있다는 것을 저에게 말했다 :
@variable
과:
variable
MySQL을한다. 그는 또한 MSSQL 일괄 범위를 가지고 있으며, MySQL은 세션 범위가 어떻게 언급했다. 누군가가 나를 위해이에 정교한 수 있습니까?
해결법
-
==============================
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.MySQL의에서는 @variable는 사용자 정의 된 변수를 나타낸다. 당신은 자신을 정의 할 수 있습니다.
MySQL의에서는 @variable는 사용자 정의 된 변수를 나타낸다. 당신은 자신을 정의 할 수 있습니다.
SET @a = 'test'; SELECT @a;
없이 저장된 프로그램, 변수의 외부는 @, 당신이 자신을 정의 할 수있는 시스템 변수입니다.
이 변수의 범위는 전체 세션이다. 데이터베이스와의 연결이 존재하는 동안, 변수가 여전히 사용될 수 있다는 것을 의미한다.
이 변수는 쿼리 (저장 프로 시저, 그렇지 않으면 스크립트, 또는)의 현재 배치에서 사용할 수 MSSQL과 대조적이다. 그것은 동일한 세션에서 다른 배치에 사용할 수 없습니다.
-
==============================
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.원칙적으로, 내가 저장 프로 시저 내에서 (@ 앞에 추가) UserDefinedVariables를 사용합니다. 이것은 내가 두 개 이상의 저장 프로 시저에서 이러한 변수를 필요 특히, 인생을 더 쉽게합니다. 그냥 내가 시스템 변수를 사용하는 것보다, 단지 저장 프로 시저 ONE 내에서 변수를 필요로 할 때 (앞에 추가없이 @).
원칙적으로, 내가 저장 프로 시저 내에서 (@ 앞에 추가) UserDefinedVariables를 사용합니다. 이것은 내가 두 개 이상의 저장 프로 시저에서 이러한 변수를 필요 특히, 인생을 더 쉽게합니다. 그냥 내가 시스템 변수를 사용하는 것보다, 단지 저장 프로 시저 ONE 내에서 변수를 필요로 할 때 (앞에 추가없이 @).
@Xybo : 위험한해야 저장 프로 시저에 @variables를 사용하는 이유를 이해하지 않습니다. 당신은 "범위"와 "경계"조금 (초보자로서 나를 위해) 쉽게 비트를 설명해 주시겠습니까?
from https://stackoverflow.com/questions/1009954/mysql-variable-vs-variable-whats-the-difference by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 자바 - 방지 SQL 주입에 이스케이프 문자열 (0) | 2020.03.09 |
---|---|
[SQL] 어떻게 java.sql.Date에 java.util.Date를 변환하는? (0) | 2020.03.09 |
[SQL] 여러 열에 의해 그룹을 사용하여 (0) | 2020.03.09 |
[SQL] 분할 쉼표는 오라클의 열 값을 분리 (0) | 2020.03.09 |
[SQL] 수 있습니까 쉼표로 구분 한 열에 여러 행? [복제] (0) | 2020.03.09 |