두 번째 쿼리에서 사용할 수 있도록 mysql에서 변수를 선언하는 방법은 무엇입니까?
나는 다음과 같은 것을 쓰고 싶다 :
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;답변
MySQL에는 주로 세 가지 유형의 변수가 있습니다.
- 
접두사가 붙은 사용자 정의 변수 @:선언하거나 초기화하지 않고도 모든 사용자 정의 변수에 액세스 할 수 있습니다. 초기화되지 않은 변수를 참조하면 값 NULL과 문자열 유형이 있습니다.SELECT @var_any_var_nameSET또는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 ;