이 기사에서는 MySQL의 변수가 무엇인지 설명합니다. 그것을 사용하는 방법? 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
MySQL 변수는 지역 변수, 사용자 변수, 세션 변수, 전역 변수의 네 가지 유형으로 나누어집니다. 지역 변수는 함수와 저장 프로시저에만 존재합니다. 여기. 그 중 세션 변수와 전역 변수를 MySQL에서는 총칭하여 시스템 변수라고 부른다.
사용자 변수
Basic
이름에서 알 수 있듯이 사용자 정의 변수입니다. 변수를 정의하는 방법은 무엇입니까? 두 가지 방법이 있습니다:
SET method
# 两种方式都可以 SET @variable = expr SET @variable := expr
SELECT method
# 必须 := SELECT @variable := expr
사용자 변수 정의 참고 사항:
null
입니다(변수를 정의하지 않고 바로 사용할 수 있으며 오류가 보고되지 않습니다) null
(可不定义变量直接使用,不会报错)
变量名对大小写不敏感
变量不能在要求字面值的地方使用,比如 select
中的 limit
语句等。
调用用户变量的表达式的计算顺序实际上是未定义的,如 SELECT @a = 0, @a := @a + 1;
limit
와 같이 리터럴 값이 필요한 곳에 사용할 수 없습니다. >select 문 등 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);
SELECT salary, (@rowno := @rowno + 1) AS 'rowno' FROM employee, (SELECT @rowno := 0) r;
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!