sql >> Databasteknik >  >> RDS >> Mysql

Avgränsare i MySQL

Andra avgränsare än standard ; används vanligtvis när du definierar funktioner, lagrade procedurer och utlösare där du måste definiera flera satser. Du definierar en annan avgränsare som $$ som används för att definiera slutet av hela proceduren, men inuti den avslutas individuella satser var och en av ; . På så sätt, när koden körs i mysql klient kan klienten se var hela proceduren slutar och köra den som en enhet istället för att köra de individuella satserna inuti.

Observera att DELIMITER nyckelordet är en funktion av kommandoraden mysql endast klient (och vissa andra klienter) och inte en vanlig MySQL-språkfunktion. Det kommer inte att fungera om du försökte skicka det via ett programmeringsspråk API till MySQL. Vissa andra klienter som PHPMyAdmin har andra metoder för att ange en icke-standardavgränsare.

Exempel:

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 ;

Försöker använda DELIMITER med en klient som inte stöder det kommer den att skickas till servern, vilket kommer att rapportera ett syntaxfel. Till exempel med PHP och MySQLi:

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

Fel med:

Du har ett fel i din SQL-syntax; kontrollera manualen som motsvarar din MySQL-serverversion för rätt syntax att använda nära 'DELIMITER $$' på rad 1



  1. PostgreSQL:Släpp PostgreSQL-databasen via kommandoraden

  2. Skapa en kopia av en databas i PostgreSQL

  3. Hur man applicerar att ha klausul med Group by i Select Query - SQL Server / TSQL Tutorial Del 131

  4. Finns det något sätt att köra MySQL i minnet för JUnit-testfall?