사람들이 구분 기호를 사용하는 경우가 종종 있습니다. 나는 구분자가 무엇인지, 그들의 목적이 무엇인지 알아 내려고 노력했다. 인터넷 검색 20 분 후, 나는 나를 만족시키는 답변을 찾지 못했습니다. 그래서 내 질문은 지금입니다 : 구분 기호는 무엇이며 언제 사용해야합니까?
사람들이 구분 기호를 사용하는 경우가 종종 있습니다. 나는 구분자가 무엇인지, 그들의 목적이 무엇인지 알아 내려고 노력했다. 인터넷 검색 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 구문에 오류가 있습니다. 1 행의 'DELIMITER $$'근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.
BEGIN...END
블록 이있는 스토어드 루틴을 작성 하면 블록 내의 명령문은 세미콜론으로 종료됩니다 (;)
. 그러나 CREATE PROCEDURE
성명서에도 종결자가 필요합니다. 따라서 루틴 본문 내의 세미콜론이 종료되는지 여부가 모호해집니다.CREATE PROCEDURE
이 프로 시저 본문 내의 명령문 중 하나를 종료하거나 종료 .
모호성을 해결하는 방법은 MySQL 클라이언트가 서버의 실제 종료 자로 인식하는 고유 한 문자열 (프로 시저 본문 내에는 안 됨)을 선언하는 것입니다. CREATE PROCEDURE
명령문 입니다.
구분 기호는 MySQL 클라이언트에 Sql 문 입력을 완료했음을 알리는 데 사용할 문자 또는 문자열입니다.
명령문, 함수, 저장 프로 시저 또는 트리거를 전체 명령문으로 처리하도록 mysql 클라이언트에 알리도록 DELIMITER를 정의합니다. 일반적으로 .sql 파일에서는 $$와 같은 다른 DELIMITER를 설정합니다. DELIMITER 명령은 MySQL 명령의 표준 구분 기호 (예 :;)를 변경하는 데 사용됩니다. 루틴 (함수, 저장 프로 시저 또는 트리거) 내의 명령문은 세미콜론 (;)으로 끝나므로 DELIMITER를 복합 명령문으로 취급합니다. 동일한 파일 또는 명령 행에서 다른 루틴을 사용할 때 정의되지 않으면 구문 오류가 발생합니다.
예약되지 않은 다양한 문자를 사용하여 사용자 지정 구분 기호를 만들 수 있습니다. 백 슬래시 (\) 문자는 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 ;
분리 문자는 데이터베이스에서 데이터 항목을 분리하는 데 사용되는 SQL의 문자입니다. 문자열의 시작과 끝을 식별합니다. 일반적으로 SQL에 사용되는 분리 문자는 ';'입니다.