sql >> Databasteknik >  >> Database Tools >> phpMyAdmin

Det gick inte att köra fråga i MySQL syntaxfel oväntat

Problem med detta:

DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...

är att MySQL inte ser semikolon i slutet av DROP PROCEDURE uttalanderad som slutet av uttalandet. Detta beror på att föregående rad berättade för MySQL att satsterminatorn var något annat än ett semikolon. Du sa till MySQL att uttalanden skulle avslutas med två dollartecken. Så MySQL läser DROP PROCEDURE linje, letar efter uttalandet terminator. Och hela klumpen den läser är INTE en giltig MySQL-sats, den genererar ett syntaxfel.

Lösningen:antingen flytta DROP PROCEDURE rad före DELIMITER $$ linje; eller avsluta DROP PROCEDURE sats med den angivna avgränsaren snarare än ett semikolon.

Det andra problemet du rapporterar är ett syntaxfel. Det beror på att MySQL inte känner igen IF som början på en giltig SQL-sats.

IF uttalandet är endast giltigt inom ramen för ett MySQL-lagrat program (till exempel inom en CREATE PROCEDURE uttalande.)

Korrigeringen:Använd en IF uttalande endast inom ramen för ett MySQL-lagrat program.

Det tredje problemet du rapporterar är också ett syntaxfel. Det beror på att du inte har en giltig syntax för en SET påstående; MySQL-syntax för SET uttalande för att tilldela ett värde till användarvariabel är:

SET @uservar = expr 

MySQL förväntar sig ett uttryck efter likhetstecknet. MySQL är inte förväntar sig en SQL-sats.

Att tilldela ett värde till en användarvariabel som ett resultat från en SELECT gör uppgiften i SELECT-satsen, till exempel:

SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'

Observera att tilldelningsoperatorn i SELECT uttalandet är := (kolon är lika med), inte bara = .



  1. MySql importerar från CSV

  2. Anrop till fetch_assoc() på ett icke-objekt som misslyckas?

  3. Spårning av kontinuerliga frånvarodagar från arbetsdagar endast SQL

  4. SQL Server Management Studio låter mig INTE skapa flera främmande nycklar till flera primärnycklar