MySQL에서 변수를 선언하는 방법
두 번째 쿼리에서 사용할 수 있도록 mysql에서 변수를 선언하려면 어떻게 해야 합니까?
다음과 같이 쓰고 싶습니다.
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
MySQL에는 주로 세 가지 유형의 변수가 있습니다.
사용자 정의 변수(프리픽스 포함)
@
):사용자 정의 변수는 선언하거나 초기화하지 않고 액세스할 수 있습니다.초기화되지 않은 변수를 참조할 경우 값은 다음과 같습니다.
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 사용자 변수 기술을 사용하여 쿼리합니다.로컬 변수(프리픽스 없음):
로컬 변수는 다음을 사용하여 선언해야 합니다.
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
선언된 블록입니다.서버 시스템 변수(프리픽스)
@@
):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
다양한 변수 유형:
선언은 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
'sourcecode' 카테고리의 다른 글
최대 콜 스택사이즈가 에러를 넘었습니다. (0) | 2022.09.23 |
---|---|
Django ModelForm에서 ForeignKey 선택을 필터링하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
MariaDB 구문 오류 없이 치환하는 방법 (0) | 2022.09.22 |
Galera 클러스터에서는 놀라울 정도로 낮은 퍼포먼스 (0) | 2022.09.22 |
MySQL에서 테이블 이름이 변수인 경우 선택하는 방법 (0) | 2022.09.22 |