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 PROCEDURE
statement에는 터미네이터도 필요합니다.따라서 루틴 본문 내의 세미콜론이 종료되는지 여부가 모호해집니다.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
'programing' 카테고리의 다른 글
대나무 VS허드슨Jenkins)와 기타 CI 시스템 비교 (0) | 2023.02.03 |
---|---|
문자열로 저장된 JavaScript 코드 실행 (0) | 2023.02.03 |
Vue.js, Vuex vs약속들 (0) | 2023.02.03 |
Json 어레이 열이 SQL 행으로 분할됨 (0) | 2023.01.24 |
lodash를 angular2 + typescript 어플리케이션으로 Import하는 중 (0) | 2023.01.24 |