>  기사  >  데이터 베이스  >  MySQL의 변수는 무엇입니까? 그것을 사용하는 방법?

MySQL의 변수는 무엇입니까? 그것을 사용하는 방법?

不言
不言앞으로
2018-12-30 09:18:497137검색

이 기사에서는 MySQL의 변수가 무엇인지 설명합니다. 그것을 사용하는 방법? 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

MySQL 변수는 지역 변수, 사용자 변수, 세션 변수, 전역 변수의 네 가지 유형으로 나누어집니다. 지역 변수는 함수와 저장 프로시저에만 존재합니다. 여기. 그 중 세션 변수와 전역 변수를 MySQL에서는 총칭하여 시스템 변수라고 부른다.

사용자 변수

Basic

이름에서 알 수 있듯이 사용자 정의 변수입니다. 변수를 정의하는 방법은 무엇입니까? 두 가지 방법이 있습니다:

SET method

# 两种方式都可以
SET @variable = expr
SET @variable := expr

SELECT method

# 必须 :=
SELECT @variable := expr

사용자 변수 정의 참고 사항:

    #🎜 🎜#
  1. 정의되지 않은 변수의 초기값은 null입니다(변수를 정의하지 않고 바로 사용할 수 있으며 오류가 보고되지 않습니다)

    null(可不定义变量直接使用,不会报错)

  2. 变量名对大小写不敏感

  3. 变量不能在要求字面值的地方使用,比如 select 中的 limit 语句等。

  4. 调用用户变量的表达式的计算顺序实际上是未定义的,如 SELECT @a = 0, @a := @a + 1;

  5. 변수 이름 대소문자 구분 안 함
  6. Variables는 limit와 같이 리터럴 값이 필요한 곳에 사용할 수 없습니다. >select 문 등
  7. 사용자 변수를 호출하는 표현식의 평가 순서는 실제로 정의되지 않습니다. 예: SELECT @a = 0, @a := @a + 1 ; code>, 두 열 모두 0일 수 있습니다.

사용자 변수에 값을 할당할 때 표현식의 값이 먼저 결정됩니다. 이해하는 방법은 다음 코드를 참고하시기 바랍니다:

SET @m = 0;
SET @m = 3, @n = @m;
SELECT @n; # 0

사용자 변수의 종류는 동적으로 변경이 가능하지만 생명에 위험이 있을 수 있으므로 권장하지 않습니다. :피.

변수로서 모두 범위를 갖습니다. 사용자 변수의 역할은 전체 세션, 즉 세션 전체에서 유효합니다. 이는 괜찮아 보이지만 연결 풀을 사용하고 사용자 정의 사용자 변수가 올바르게 초기화되지 않으면 예기치 않은 문제가 발생할 수 있다는 점에 유의하십시오. 실제로 소멸되지 않기 때문에 여전히 마지막 결과를 기록합니다.

Example

일련번호 기능을 구현하는 간단한 예를 들어보겠습니다. 테이블과 데이터는 다음과 같습니다.

CREATE TABLE employee (
   id int primary key,
   salary int not null
);

INSERT INTO employee VALUES(1, 100);
INSERT INTO employee VALUES(2, 200);
INSERT INTO employee VALUES(3, 300);

기반으로 이전에 배웠듯이 다음 SQL을 빠르게 작성할 수 있습니다.

SELECT salary, (@rowno := @rowno + 1) AS 'rowno'
FROM employee, (SELECT @rowno := 0) r;

문제 없습니다. 모든 것이 예상한 대로입니다. 그런 다음 WHERE 조건을 추가하여 시도합니다.

SELECT salary, (@rowno := @rowno + 1) AS 'rowno'
FROM employee, (SELECT @rowno := 0) r
WHERE @rowno = 0;

이론적으로, 이는 데이터를 반환해서는 안 되지만 여전히 ID가 1인 데이터 조각을 반환합니다.

왜요? WHERE 조건에 사용되는 @rowno는 항상 같은 값인 0이며, SELECT 시 수정되기 때문에 실시간으로 응답하지 않습니다.

WHERE의 기능을 구현하려면 다음과 같이 다시 작성해야 합니다.

SELECT salary, rowno
FROM (
    SELECT salary, (@rowno := @rowno + 1) AS 'rowno'
    FROM employee, (SELECT @rowno := 0) r
) m
WHERE rowno = 2;

실제로 SELECT의 WHERE, GROUP BY 및 ORDER BY에 있는 사용자 변수는 예상대로 작동하지 않습니다. 이전 값을 사용합니다. 값은 실시간으로 수정되지 않습니다.

시스템 변수

세션 변수

세션 변수는 각 클라이언트 연결에 대해 서버에서 유지 관리하는 변수입니다. 클라이언트가 연결되면 클라이언트의 세션 변수는 해당 전역 변수의 현재 값을 사용하여 초기화됩니다.

이름에서 알 수 있듯이 세션 변수의 범위는 세션입니다. 세션 변수의 값을 설정하는 방법은 무엇입니까? 다음과 같습니다:

set session var_name = value;
set @@session.var_name = value;
set var_name = value;

기존 세션 변수에 대한 값만 설정할 수 있으며 새 세션 변수를 생성할 수는 없습니다. 그렇다면 세션 변수를 얻는 방법은 무엇입니까? 다음과 같습니다:

show session variables;
# 以上代码会把所有会话变量罗列出来,可通过 like 进行过滤
show session variables LIKE "%var%";
전역 변수

전역 변수는 서버의 전반적인 작동에 영향을 미칩니다. 그러나 재부팅하면 이러한 설정이 재설정됩니다. 전역 변수를 변경하려면 SUPER 권한이 있어야 합니다. #🎜🎜##🎜🎜# 해당 설정은 세션 변수의 설정과 유사합니다. #🎜🎜#
set global var_name = value;
set @@global.var_name = value;
#🎜🎜# 전역 변수는 새 변수를 추가할 수 없으며 기존 변수만 수정할 수 있습니다. 전역 변수를 얻는 작업은 세션 변수와 유사합니다: #🎜🎜#
show session variables;
show global variables like "%var%";
#🎜🎜##🎜🎜##🎜🎜##🎜🎜# #🎜🎜#

위 내용은 MySQL의 변수는 무엇입니까? 그것을 사용하는 방법?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제