sql >> Database >  >> RDS >> Mysql

scheidingstekens in MySQL

Andere scheidingstekens dan de standaard ; worden meestal gebruikt bij het definiëren van functies, opgeslagen procedures en triggers waarin u meerdere instructies moet definiëren. U definieert een ander scheidingsteken zoals $$ die wordt gebruikt om het einde van de hele procedure te definiëren, maar daarbinnen worden individuele instructies elk beëindigd door ; . Op die manier, wanneer de code wordt uitgevoerd in de mysql client, de client kan zien waar de hele procedure eindigt en deze als een eenheid uitvoeren in plaats van de afzonderlijke instructies binnenin uit te voeren.

Merk op dat de DELIMITER trefwoord is een functie van de opdrachtregel mysql client (en enkele andere clients) alleen en niet een reguliere MySQL-taalfunctie. Het zal niet werken als u probeert het via een programmeertaal-API door te geven aan MySQL. Sommige andere clients, zoals PHPMyAdmin, hebben andere methoden om een ​​niet-standaard scheidingsteken op te geven.

Voorbeeld:

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 ;

Poging om DELIMITER te gebruiken met een client die dit niet ondersteunt, wordt het naar de server gestuurd, die een syntaxisfout rapporteert. Bijvoorbeeld met PHP en MySQLi:

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

Fouten met:

U heeft een fout in uw SQL-syntaxis; controleer de handleiding die overeenkomt met uw MySQL-serverversie voor de juiste syntaxis om te gebruiken in de buurt van 'DELIMITER $$' op regel 1



  1. Opmerkingen en vind-ik-leuks implementeren in de database

  2. Mogelijk om cross-database queries uit te voeren met PostgreSQL?

  3. PostgreSQL-equivalent voor TOP n WITH TIES:LIMIT with ties?

  4. Tekst of numeriek veld - Een eenvoudige SQL-methode om van gegevenstype te wisselen