sql >> Databáze >  >> Database Tools >> phpMyAdmin

Neočekávaná chyba syntaxe MySQL nelze spustit dotaz

Problém s tímto:

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

je, že MySQL nevidí středník na konci DROP PROCEDURE řádek příkazu jako konec příkazu. Je to proto, že předchozí řádek řekl MySQL, že terminátor příkazu je něco jiného než středník. Řekl jste MySQL, že příkazy budou ukončeny dvěma znaky dolaru. MySQL tedy čte DROP PROCEDURE řádek, hledá terminátor příkazu. A celý blob, který čte, NENÍ platným příkazem MySQL, generuje chybu syntaxe.

Oprava:buď přesuňte DROP PROCEDURE řádek před DELIMITER $$ čára; nebo ukončete DROP PROCEDURE příkaz se zadaným oddělovačem, nikoli středníkem.

Druhý problém, který uvádíte, je chyba syntaxe. K tomu dochází, protože MySQL nerozpozná IF jako začátek platného příkazu SQL.

IF výpis je platný pouze v kontextu programu uloženého v MySQL (například v rámci CREATE PROCEDURE prohlášení.)

Oprava:Použijte IF pouze v kontextu programu uloženého v MySQL.

Třetí problém, který uvádíte, je také chyba syntaxe. K tomu dochází, protože nemáte platnou syntaxi pro SET prohlášení; Syntaxe MySQL pro SET příkaz k přiřazení hodnoty uživatelské proměnné je:

SET @uservar = expr 

MySQL očekává výraz za rovnítkem. MySQL není očekává příkaz SQL.

Chcete-li přiřadit hodnotu uživatelské proměnné jako výsledek z SELECT proveďte přiřazení v rámci příkazu SELECT, například:

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

Všimněte si, že operátor přiřazení uvnitř SELECT příkaz je := (dvojtečka se rovná), nejen = .



  1. Výběr 10 nejlepších platů zaměstnanců

  2. Zakázáno:Nemáte oprávnění pro přístup k /phpmyadmin na tomto serveru

  3. Proč se nemohu přihlásit do MYSQL pomocí phpmyadmin?

  4. Ukládání dat MySQL v kurdském písmu?