programing

MySQL의 구분자

copysource 2023. 2. 3. 23:05
반응형

MySQL의 구분자

딜리미터를 사용하는 사람을 자주 봅니다.나는 무엇이 구분자이고 그 목적이 무엇인지 알아내기 위해 노력했습니다.20분 동안 검색을 했는데도 만족할 만한 답을 찾을 수 없었다.자, 이제 질문하겠습니다.구분자는 무엇이며 언제 사용해야 합니까?

디폴트 이외의 딜리미터;는 일반적으로 여러 문을 정의해야 하는 함수, 저장 프로시저 및 트리거를 정의할 때 사용됩니다.다음과 같은 다른 구분 기호를 정의합니다.$$전체 절차의 끝을 정의하기 위해 사용되지만, 그 안에서 개별 문장은 각각 다음과 같이 종료됩니다.;이 방법으로 코드가 실행되면mysql클라이언트는, 프로시저 전체가 어디에서 종료하는지를 판단해, 내부의 개개의 스테이트먼트를 실행하는 것이 아니라, 단위로 실행할 수 있습니다.

주의:DELIMITER키워드는 명령줄의 함수입니다.mysql클라이언트(및 일부 다른 클라이언트)만 사용할 수 있으며 일반 MySQL 언어 기능은 사용할 수 없습니다.프로그래밍 언어 API를 통해 MySQL에 전달하려고 하면 작동하지 않습니다.PHPMyAdmin과 같은 일부 다른 클라이언트에는 기본이 아닌 딜리미터를 지정하는 다른 방법이 있습니다.

예:

DELIMITER $$
/* This is a complete statement, not part of the procedure, so use the custom delimiter $$ */
DROP PROCEDURE my_procedure$$

/* Now start the procedure code */
CREATE PROCEDURE my_procedure ()
BEGIN    
  /* Inside the procedure, individual statements terminate with ; */
  CREATE TABLE tablea (
     col1 INT,
     col2 INT
  );

  INSERT INTO tablea
    SELECT * FROM table1;

  CREATE TABLE tableb (
     col1 INT,
     col2 INT
  );
  INSERT INTO tableb
    SELECT * FROM table2;
  
/* whole procedure ends with the custom delimiter */
END$$

/* Finally, reset the delimiter to the default ; */
DELIMITER ;

사용 시도 중DELIMITER지원되지 않는 클라이언트의 경우 서버로 전송되고 구문 오류가 보고됩니다.예를 들어 PHP 및 MySQLi를 사용하는 경우:

$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;

에러:

SQL 구문에 오류가 있습니다. MySQL Server 버전에 해당하는 설명서에서 1행의 'DELimiter $$' 근처에서 사용할 올바른 구문을 확인하십시오.

DELIMITER 문은 세미콜론( ;)인 표준 딜리미터를 다른 딜리미터로 변경합니다.딜리미터가 세미콜론(;)에서 더블슬래시 //로 변경되었습니다.

딜리미터를 변경해야 하는 이유는 무엇입니까?

mysql 툴이 한 번에 각 문을 해석하도록 하는 것이 아니라 저장 프로시저, 커스텀 함수 등을 서버 전체에 전달하고 싶기 때문입니다.

저장된 루틴을 생성할 때BEGIN...END블록, 블록 내의 문은 세미콜론으로 끝납니다.(;)근데...CREATE PROCEDUREstatement에는 터미네이터도 필요합니다.따라서 루틴 본문 내의 세미콜론이 종료되는지 여부가 모호해집니다.CREATE PROCEDURE또는 순서 본문 중 하나의 스테이트먼트를 종료합니다.

가 MySQL의 내에서 을합니다.CREATE PROCEDURE★★★★★★ 。

딜리미터를 정의하면 mysql 클라이언트에 문, 함수, 저장 프로시저 또는 트리거를 전체 문으로 처리하도록 지시할 수 있습니다.보통 .sql 파일에서는 $$와 같은 다른 딜리미터를 설정합니다.DELIMITER 명령은 MySQL 명령의 표준 구분 기호(즉, ;)를 변경하는 데 사용됩니다.루틴 내의 문(함수, 저장 프로시저 또는 트리거)이 세미콜론(;)으로 끝나기 때문에 복합문으로 취급하기 위해 딜리미터를 사용합니다.동일한 파일 또는 명령줄에서 다른 루틴을 사용할 때 정의되지 않으면 구문 오류가 발생합니다.

예약되지 않은 다양한 문자를 사용하여 고유한 사용자 지정 구분 기호를 만들 수 있습니다.백슬래시(\) 문자는 MySQL의 이스케이프 문자이므로 사용하지 마십시오.

Delimiter는 MySQL 언어 명령이 아니라 클라이언트 명령입니다.

DELIMITER $$

/*This is treated as a single statement as it ends with $$ */
DROP PROCEDURE IF EXISTS `get_count_for_department`$$

/*This routine is a compound statement. It ends with $$ to let the mysql client know to execute it as a single statement.*/ 
CREATE DEFINER=`student`@`localhost` PROCEDURE `get_count_for_department`(IN the_department VARCHAR(64), OUT the_count INT)
BEGIN
    
    SELECT COUNT(*) INTO the_count FROM employees where department=the_department;

END$$

/*DELIMITER is set to it's default*/
DELIMITER ;

언급URL : https://stackoverflow.com/questions/10259504/delimiters-in-mysql

반응형