sourcecode

MySQL에서 변수를 선언하는 방법

copyscript 2022. 9. 23. 00:05
반응형

MySQL에서 변수를 선언하는 방법

두 번째 쿼리에서 사용할 수 있도록 mysql에서 변수를 선언하려면 어떻게 해야 합니까?

다음과 같이 쓰고 싶습니다.

SET start = 1;
SET finish = 10;

SELECT * FROM places WHERE place BETWEEN start AND finish;

MySQL에는 주로 세 가지 유형의 변수가 있습니다.

  1. 사용자 정의 변수(프리픽스 포함)@):

    사용자 정의 변수는 선언하거나 초기화하지 않고 액세스할 수 있습니다.초기화되지 않은 변수를 참조할 경우 값은 다음과 같습니다.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;
    

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

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

    사용할 수 있습니다.SELECT고급 MySQL 사용자 변수 기술을 사용하여 쿼리합니다.

  2. 로컬 변수(프리픽스 없음):

    로컬 변수는 다음을 사용하여 선언해야 합니다.DECLARE에 액세스 하기 전에,

    로컬 변수 및 저장 프로시저 내의 입력 파라미터로 사용할 수 있습니다.

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

    이 경우,DEFAULT절이 없습니다.초기값은 다음과 같습니다.NULL.

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

  3. 서버 시스템 변수(프리픽스)@@):

    MySQL 서버는 기본값으로 구성된 많은 시스템 변수를 유지합니다.종류일 수 있습니다.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;
    

세트

SET @var_name = value;     /* or */     SET @var_name := value;

연산자 =와 :=가 모두 허용됩니다.


선택한다.

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

여러 레코드 세트가 발견된 경우 col2의 마지막 값만 keep(유지)됩니다.

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

이 경우 선택 결과는 col2 값을 포함하지 않습니다.


두 가지 방법 모두 사용

--TRIGGER_BEFORE_INSERT --- 계산에서 열 값을 설정합니다.

...
SELECT count(*) INTO @NR FROM a_table WHERE a_condition;
SET NEW.ord_col =  IFNULL( @NR, 0 ) + 1;
...

세트 또는 선택 사용

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

예:

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

다양한 변수 유형:

  • 로컬 변수(@ 접두사 없음)는 강하게 입력되며 선언된 저장된 프로그램 블록까지 범위가 지정됩니다.DECLARE 구문에 기재되어 있는 바와 같이, 다음의 점에 주의해 주세요.

선언은 BEGIN 내부에서만 허용됩니다.END compound 문. 다른 문보다 먼저 시작되어야 합니다.

  • 사용자 변수(@ 접두사)는 느슨하게 입력되어 세션에 범위가 지정됩니다.선언할 필요도 없고 선언할 수도 없다는 점에 유의하십시오.그냥 직접 사용하세요.

따라서 저장된 프로그램을 정의하고 있으며 실제로 "로컬 변수"를 원하는 경우 @ 문자를 삭제하고 DECLARE 문이 프로그램 블록의 시작 부분에 있는지 확인해야 합니다.그렇지 않으면 "사용자 변수"를 사용하려면 DECLARE 문을 삭제합니다.

또한 쿼리를 서브쿼리로 실행하려면 괄호로 둘러싸야 합니다.

SET @countTotal = (SELECT COUNT(*) From nGrams);

또는 SELECT ... INTO를 사용할 수 있습니다.

카운트(*)를 @countTotal From nGrams로 선택합니다.

  • 언::SET @a = 1;

  • : 사법 usage :INSERT INTO `t` (`c`) VALUES (@a);

concat_ws 함수의 @variable을 사용하여 연결된 값을 가져오려면 빈 값으로 다시 초기화해야 합니다.그렇지 않으면 동일한 세션에 오래된 값을 사용할 수 있습니다.

Set @Ids = '';

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

SET 값

 declare @Regione int;   
 set @Regione=(select  id from users
 where id=1) ;
 select @Regione ;

언급URL : https://stackoverflow.com/questions/11754781/how-to-declare-a-variable-in-mysql

반응형