두 번째 쿼리에서 사용할 수 있도록 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 진수, 부동 소수점, 2 진 또는 비 이진 문자열 또는 NULL 값과 같은 제한된 데이터 유형 세트에서 값을 지정할 수 있습니다.
사용자 정의 변수는 세션마다 다릅니다. 즉, 한 클라이언트에서 정의한 사용자 변수는 다른 클라이언트에서 보거나 사용할 수 없습니다.
고급 MySQL 사용자 변수 기술을 사용하는
SELECT
쿼리에 사용할 수 있습니다 . -
지역 변수 (접두사 없음) :
지역 변수는 다음을 사용하여 선언해야합니다.
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);
은 if
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
또는
SET @var := value
연산자 = 와 : = 모두 허용됩니다
고르다
SELECT col1, @var_name := col2 from tb_name WHERE "conditon";
여러 레코드 세트가 col2의 마지막 값만 발견하면 유지 (재정의)입니다.
SELECT col1, col2 INTO @var_name, col3 FROM .....
이 경우 select 결과에 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 구문 :
DECLARE는 BEGIN … END 복합 명령문 내에서만 허용되며 다른 명령문보다 먼저 시작해야합니다.
- 사용자 변수 (@로 시작)는 느슨하게 입력되고 세션 범위가 지정됩니다. 그것들을 필요로하거나 선언 할 수는 없으며 직접 사용하십시오.
따라서, 저장된 프로그램을 정의하고 실제로 “로컬 변수”를 원하는 경우 @ 문자를 삭제하고 DECLARE 문이 프로그램 블록의 시작 부분에 있는지 확인해야합니다. 그렇지 않으면 “사용자 변수”를 사용하려면 DECLARE 문을 삭제하십시오.
또한 하위 쿼리로 쿼리를 실행하려면 쿼리를 괄호로 묶어야합니다.
SET @countTotal = (SELECT nCOUNT (*) FROM nGrams);
그렇지 않으면 SELECT … INTO를 사용할 수 있습니다.
@countTotal에서 COUNT (*)를 선택 nGrams;
답변
concat_ws 함수에서 @variable을 사용하여 연결된 값을 얻는 사람은 빈 값으로 다시 초기화하는 것을 잊지 마십시오. 그렇지 않으면 동일한 세션에 대해 이전 값을 사용할 수 있습니다.
Set @Ids = '';
select
@Ids := concat_ws(',',@Ids,tbl.Id),
tbl.Col1,
...
from mytable tbl;
답변
-
알리다:
SET @a = 1;
-
용법:
INSERT INTO `t` (`c`) VALUES (@a);
답변
설정 값
declare Regione int;
set Regione=(select id from users
where id=1) ;
select Regione ;