Varsayılan dışındaki sınırlayıcılar ;
genellikle işlevler, saklı yordamlar ve birden çok ifade tanımlamanız gereken tetikleyiciler tanımlanırken kullanılır. $$
Tüm yordamın sonunu tanımlamak için kullanılan gibi farklı bir sınırlayıcı tanımlarsınız, ancak içinde ayrı ayrı deyimler tarafından sonlandırılır ;
. Bu şekilde, kod mysql
istemcide çalıştırıldığında, istemci tüm yordamın nerede sona erdiğini söyleyebilir ve içindeki ifadeleri yürütmek yerine bir birim olarak yürütebilir.
DELIMITER
Anahtar kelimenin komut satırının bir işlevi olduğunu unutmayınmysql
normal bir MySQL dil özelliği değil, yalnızca istemcisinin (ve diğer bazı istemcilerin) . MySQL'e bir programlama dili API'sinden geçirmeye çalışırsanız çalışmaz. PHPMyAdmin gibi diğer bazı istemcilerde varsayılan olmayan bir sınırlayıcı belirtmek için başka yöntemler vardır.
Misal:
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
İstemciyi desteklemeyen bir istemciyle kullanmaya çalışmak istemcinin sunucuya gönderilmesine neden olur ve bu da sözdizimi hatası verir. Örneğin, PHP ve MySQLi kullanarak:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Şununla ilgili hatalar:
SQL sözdiziminizde bir hata var; 1. satırda 'DELIMITER $$' yakınında kullanılacak doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuza bakın