Questions sur MySQL (1)

Je ne sais pas si vous avez rencontré cette situation :

错误代码: 1064
Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de '' à la ligne 4

Si oui, ce serait super !

Est-ce mal de le changer quoi qu'il arrive ! En fait, c'est un problème de version.

C'est l'une des différences entre la version mysql5 et mysql8.

Cependant, il n'apparaît généralement pas, et cet inconvénient n'apparaîtra que lorsque vous créerez des fonctions, des procédures stockées ou des déclencheurs .

Mettez un exemple pour démontrer:

Créez une fonction, le paramètre est le numéro d'étudiant, faites en sorte que la fonction réalise le nom de l'étudiant via le numéro d'étudiant, et appelez cette fonction pour interroger les noms du numéro d'étudiant "00001" et "00002" ;

CREATE FUNCTION get_name(NO CHAR(20),role CHAR(20))RETURNS CHAR(20) 
READS SQL DATA
BEGIN
	DECLARE NAME CHAR(20);
	IF('student'=role) THEN -- find student name
		SELECT sname INTO NAME FROM student WHERE sno=NO;
	ELSEIF('teacher'=role) THEN -- find teacher name
		SELECT tname INTO NAME FROM teacher WHERE tno=NO;
	ELSE SET NAME='输入有误!';
	END IF;
RETURN NAME;
END;

Lorsque vous exécutez l'instruction ci-dessus, une erreur est signalée et, quelle que soit la manière dont vous la modifiez, cela ne fonctionnera pas. Ne le changez pas, ce n'est probablement pas votre faute, mais un problème de version.

La solution est la suivante :

Première méthode :

DELIMITER $$
CREATE FUNCTION get_name(NO CHAR(20),role CHAR(20))RETURNS CHAR(20) 
READS SQL DATA
BEGIN
	DECLARE NAME CHAR(20);
	IF('student'=role) THEN -- find student name
		SELECT sname INTO NAME FROM student WHERE sno=NO;
	ELSEIF('teacher'=role) THEN -- find teacher name
		SELECT tname INTO NAME FROM teacher WHERE tno=NO;
	ELSE SET NAME='输入有误!';
	END IF;
RETURN NAME;
END;

C'est vrai, le principal est d'ajouter DELIMITER $$, et cela fonctionnera normalement. Si vous ne me croyez pas, essayez-le !

Loi 2 :

DELIMITER T5_1
CREATE FUNCTION get_student_name_by_id(student_id VARCHAR(10)) RETURNS VARCHAR(50)
BEGIN
  DECLARE student_name VARCHAR(50);
  SELECT CONVERT(SName USING utf8) INTO student_name FROM Student WHERE SNo = student_id;
  RETURN CONVERT(student_name USING utf8);
END T5_1
DELIMITER ;

Faites attention aux détails de la tête et de la queue En fait, le principe est similaire à celui de la méthode 1. Cela dépend de votre préférence.

Méthode trois :

Il s'agit d'une approche "couper pour régner pour toujours".

Supprimez simplement votre mysql5 et téléchargez un mysql8 pour résoudre complètement ce problème.

J'espère que mon article vous sera utile !

おすすめ

転載: blog.csdn.net/m0_64206989/article/details/131315406