itsource

MySQL: @variable vs. variable.뭐가 다른데?

mycopycode 2022. 10. 5. 22:29
반응형

MySQL: @variable vs. variable.뭐가 다른데?

또 다른 질문에서는 다음 두 가지 사이에 차이가 있다고 누군가가 말했습니다.

@variable

또, 다음과 같이 합니다.

variable

MySQL에 있습니다.또한 MSSQL에는 배치 범위가 있고 MySQL에는 세션 범위가 있는 방법도 언급했습니다.누가 이것에 대해 좀 더 자세히 설명해 줄 수 있나요?

MySQL에는 사용자 정의 변수의 개념이 있습니다.

이 변수들은 느슨하게 입력된 변수이며 세션 내 어딘가에서 초기화될 수 있으며 세션이 끝날 때까지 값을 유지합니다.

에는 이이음음음음음음음음음 they they they they .@써주세요.@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; 이러한 "변수"는 세션 고유의 사용자 정의 변수와는 관련이 없습니다.)

、 MySQL ( MySQL 。@variable는 사용자 정의 변수를 나타냅니다.직접 정의할 수 있습니다.

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

된 프로그램variable 를 사용하지 않습니다.@시스템 변수이며 사용자가 직접 정의할 수 없습니다.

이 변수의 범위는 세션 전체입니다.즉, 데이터베이스와의 연결이 존재하는 동안 변수를 계속 사용할 수 있습니다.

이는 현재 쿼리 배치(저장된 프로시저, 스크립트 등)에서만 변수를 사용할 수 있는 MSQL과는 대조적입니다.같은 세션의 다른 배치에서는 사용할 수 없습니다.

은 MSSQL을 해야 합니다.DECLIFYd는 DECLIFyd를 사용합니다.@Variable구문)DECLARE @TEXT VARCHAR(25) = 'text' MS 는, 를 필요로 이 순서의 에서도 선언을 허가합니다 DECLARE」 「MySQL」 「MySQL」 「MySQL」 「MySQL」 「MySQL」 「MySQL」.

라인은 , 「 라인」을 하고 있는 것 느낌이 .set = @variableMySQL my my my my my 。범위 및 변수는 범위 경계를 넘어 존재하지 않습니다.가 JavaScript를 사용하지 않고 합니다.var가 되어 치 않은 덮어쓰기를 만듭니다.

이 MySQL을 허락해주셨으면 .DECLARE @Variable저장 프로시저 내의 다양한 블록 수준에서 사용할 수 있습니다. 점에 주의:@(사인만 하면)@기호 접두사는 변수 이름과 테이블 열 이름을 구분하는 데 도움이 됩니다. 이치프리픽스를 할 수 "v" 프리픽스는 "l_" 입니다.@은 변수 하지 않고 할 수 한 방법입니다.sign은 데이터를 압축하지 않고 추출할 수 있습니다.

MySQL은 스토어드 프로시저에 처음 등장하며 첫 번째 버전에서도 좋은 성과를 거두고 있습니다.여기서 그들이 어떤 형태를 취하고 있는지, 그리고 언어의 서버측 측면이 성숙하는 것을 보는 것은 즐거울 것입니다.

원칙적으로 Stored Procedures 내에서 UserDefinedVariables(@로 권장)를 사용합니다.이렇게 하면 특히 두 개 이상의 저장 프로시저에서 이러한 변수가 필요할 때 생활이 더 쉬워집니다.하나의 저장 프로시저 내에서만 변수가 필요한 경우 시스템 변수(@ 추가 없음)를 사용합니다.

@Xybo: Stored Procedures에서 @variable을 사용하는 것이 왜 위험한지 이해할 수 없습니다.조금 더 쉽게 (신입생으로서) 'scope'와 'boundary'를 설명해 주시겠습니까?

@variable는 Java, Python 등으로 작성된 응용 프로그램에서 스토어드 프로시저를 호출할 때 매우 유용합니다.첫 번째 콜에서 변수 값이 생성되어 후속 콜의 기능에서 필요한 경우가 있습니다.

PL/SQL(Oracle) 관련 참고 사항

장점은 Oracle PL/SQL에서 확인할 수 있습니다.이러한 변수의 범위는 3가지입니다.

  • 함수가 종료될 때 스코프가 종료되는 함수 변수.
  • 범위가 세션이고 가시성이 패키지인 모든 함수 외부에 정의된 패키지 본문 변수입니다.
  • 변수가 세션이고 가시성이 전역인 패키지 변수입니다.

PL/SQL에서의 경험

저는 완전한 코드를 PL/SQL로 쓰는 아키텍처를 개발했습니다.이들은 Java로 작성된 미들웨어에서 호출됩니다.미들웨어에는 두 가지 종류가 있습니다.클라이언트로부터의 콜에 대응하기 위한 것으로, Java 로도 기술되어 있습니다.다른 하나는 브라우저로부터의 콜에 대응합니다.클라이언트 패실리티는 100% JavaScript로 구현됩니다.PL/SQL에서 애플리케이션을 쓰기 위해 HTML 및 JavaScript 대신 명령어세트가 사용됩니다.

PL/SQL에 기재된 코드를 다른 데이터베이스에 이식할 수 있는 같은 설비를 찾고 있습니다.가장 가까운 곳은 Postgres입니다.그러나 모든 변수에는 함수 범위가 있습니다.

@

이 정도는 이다.@MySQL 에있다다 。Oracle 데이터베이스 판매에 영향을 미칠 수 있으므로 Oracle은 PL/SQL to MySQL 스토어드 프로시저에서 사용할 수 있는 동일한 기능을 구축하지 않을 것입니다.

언급URL : https://stackoverflow.com/questions/1009954/mysql-variable-vs-variable-whats-the-difference

반응형