Maison > base de données > tutoriel mysql > Parlons des bases des variables personnalisées MySQL et des délimiteurs de fin d'instruction

Parlons des bases des variables personnalisées MySQL et des délimiteurs de fin d'instruction

WBOY
Libérer: 2022-01-18 18:00:50
avant
2390 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur les variables personnalisées et les délimiteurs de fin d'instructions dans MySQL. J'espère qu'il vous sera utile.

Parlons des bases des variables personnalisées MySQL et des délimiteurs de fin d'instruction

Programmes stockés

Parfois, il est nécessaire d'exécuter de nombreuses instructions afin de terminer une fonction commune. Il est très ennuyeux de saisir autant d'instructions une par une dans le client à chaque fois. L'oncle qui a conçu MySQL nous a fourni de manière très réfléchie quelque chose appelé une procédure stockée. Cette soi-disant procédure stockée peut être des instructions encapsulées, puis. fournir à l'utilisateur un moyen simple d'appeler cette procédure stockée pour exécuter ces instructions indirectement. Selon différentes méthodes d'appel, nous pouvons diviser les procédures stockées en routines stockées, déclencheurs et événements. Parmi eux, les routines stockées peuvent être subdivisées en fonctions stockées et procédures stockées. Faisons un dessin pour l'exprimer : MySQL的大叔非常贴心的给我们提供了一种称之为存储程序的东东,这个所谓的存储程序可以封装一些语句,然后给用户提供一种简单的方式来调用这个存储程序,从而间接地执行这些语句。根据调用方式的不同,我们可以把存储程序分为存储例程触发器事件这几种类型。其中,存储例程又可以被细分为存储函数存储过程。我们画个图表示一下:

Parlons des bases des variables personnalisées MySQL et des délimiteurs de fin dinstruction

别看出现了很多陌生的概念,别怕,我们后边会各个击破的。不过在正式介绍存储程序之前,我们需要先了解一下MySQL中的自定义变量和语句结束分隔符的概念。

自定义变量简介

生活中我们经常会遇到一些固定不变的值,比如数字100、字符串'你好呀',我们把这些值固定不变的东东称之为常量。可是有时候为了方便,我们会使用某一个符号来代表一个值,它代表的值是可以变化的。比方说我们规定符号a代表数字1,之后我们又可以让符号a代表数字2,我们把这种值可以发生变化的东东称之为变量,其中符号a就称为这个变量的变量名。在MySQL中,我们可以通过SET语句来自定义一些我们自己的变量,比方说这样:

mysql> SET @a = 1;
Query OK, 0 rows affected (0.00 sec)

mysql>
Copier après la connexion

上边的语句就表明我们定义了一个称之为a的变量,并且把整数1赋值给了这个变量。不过大家需要注意一下,设计MySQL的大叔规定,在我们的自定义变量前边必须加一个@符号(虽然有点儿怪,但这就是人家规定的,大家遵守就好了)。

如果我们之后想查看这个变量的值的话,使用SELECT语句就好了,不过仍然需要在变量名称前加一个@符号:

mysql> SELECT @a;
+------+
| @a   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion

同一个变量也可以存储存储不同类型的值,比方说我们再把一个字符串值赋值给变量a

mysql> SET @a = '哈哈哈';
Query OK, 0 rows affected (0.01 sec)

mysql> SELECT @a;
+-----------+
| @a        |
+-----------+
| 哈哈哈    |
+-----------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion

除了把一个常量赋值给一个变量以外,我们还可以把一个变量赋值给另一个变量:

mysql> SET @b = @a;
Query OK, 0 rows affected (0.00 sec)

mysql> select @b;
+-----------+
| @b        |
+-----------+
| 哈哈哈    |
+-----------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion

这样变量ab就有了相同的值'哇哈哈'

我们还可以将某个查询的结果赋值给一个变量,前提是这个查询的结果只有一个值:

mysql> SET @a = (SELECT m1 FROM t1 LIMIT 1);
Query OK, 0 rows affected (0.00 sec)

mysql>
Copier après la connexion

还可以用另一种形式的语句来将查询的结果赋值给一个变量:

mysql> SELECT n1 FROM t1 LIMIT 1 INTO @b;
Query OK, 1 row affected (0.00 sec)

mysql>
Copier après la connexion

因为语句SELECT m1 FROM t1 LIMIT 1SELECT n1 FROM t1 LIMIT 1的查询结果都只有一个值,所以它们可以直接赋值给变量a或者b。我们查看一下这两个变量的值:

mysql> SELECT @a, @b;
+------+------+
| @a   | @b   |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion

如果我们的查询结果是一条记录,该记录中有多个列的值的话,我们想把这几个值分别赋值到不同的变量中,只能使用INTO语句了:

mysql> SELECT m1, n1 FROM t1 LIMIT 1 INTO @a, @b;
Query OK, 1 row affected (0.00 sec)

mysql>
Copier après la connexion

这条查询语句的结果集中只包含一条记录,我们把这条记录的m1列的值赋值到了变量a中,n1列的值赋值到了变量b中。

语句结束分隔符

MySQL客户端的交互界面处,当我们完成键盘输入并按下回车键时,MySQL客户端会检测我们输入的内容中是否包含;g或者G这三个符号之一,如果有的话,会把我们输入的内容发送到服务器。这样一来,如果我们想一次性给服务器发送多条的话,就需要把这些语句写到一行中,比如这样:

mysql> SELECT * FROM t1 LIMIT 1;SELECT * FROM t2 LIMIT 1;SELECT * FROM t3 LIMIT 1;
+------+------+
| m1   | n1   |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m2   | n2   |
+------+------+
|    2 | b    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m3   | n3   |
+------+------+
|    3 | c    |
+------+------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion

造成这一不便的原因在于,MySQL客户端检测输入结束用的符号和分隔各个语句的符号是一样的!其实我们也可以用delimiter命令来自定义MySQL的检测语句输入结束的符号,也就是所谓的语句结束分隔符

Parlons des bases des variables personnalisées MySQL et des délimiteurs de fin dinstruction

🎜N'ayez pas peur, il existe de nombreux concepts peu familiers. Nous les détaillerons plus tard. Cependant, avant d'introduire formellement les procédures stockées, nous devons d'abord comprendre les concepts de variables personnalisées et de délimiteurs de fin d'instruction dans MySQL. 🎜🎜Introduction aux variables personnalisées🎜🎜Dans la vie, nous rencontrons souvent des valeurs fixes, comme le nombre 100, la chaîne 'Bonjour', nous ces choses avec fixe les valeurs sont appelées constantes. Mais parfois, par commodité, nous utiliserons un certain symbole pour représenter une valeur, et la valeur qu'il représente peut changer. Par exemple, on précise que le symbole a représente le nombre 1, et on peut alors laisser le symbole a représenter le nombre 2 . Nous Ce genre de chose dont la valeur peut changer s'appelle variable, et le symbole a est appelé le nom de la variable de celle-ci. variable. Dans MySQL, nous pouvons personnaliser certaines de nos propres variables via l'instruction SET, par exemple : 🎜
mysql> delimiter $
mysql> SELECT * FROM t1 LIMIT 1;
    -> SELECT * FROM t2 LIMIT 1;
    -> SELECT * FROM t3 LIMIT 1;
    -> $
+------+------+
| m1   | n1   |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m2   | n2   |
+------+------+
|    2 | b    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m3   | n3   |
+------+------+
|    3 | c    |
+------+------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion
Copier après la connexion
🎜L'instruction ci-dessus montre que nous définissons une variable appelée variable de a, et l'entier 1 est affecté à cette variable. Cependant, tout le monde doit faire attention. L'oncle qui a conçu MySQL a stipulé que nous devons ajouter un symbole @ devant nos variables personnalisées (même si c'est un peu étrange, c'est ce que d'autres ont stipulé, donc tout le monde je peux simplement m'y conformer). 🎜🎜Si nous voulons vérifier la valeur de cette variable plus tard, utilisez simplement l'instruction SELECT, mais nous devons quand même ajouter un symbole @ avant le nom de la variable : 🎜
mysql> delimiter EOF
mysql> SELECT * FROM t1 LIMIT 1;
    -> SELECT * FROM t2 LIMIT 1;
    -> SELECT * FROM t3 LIMIT 1;
    -> EOF
+------+------+
| m1   | n1   |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m2   | n2   |
+------+------+
|    2 | b    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m3   | n3   |
+------+------+
|    3 | c    |
+------+------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion
Copier après la connexion
🎜Idem Une variable peut également stocker différents types de valeurs. Par exemple, nous attribuons une valeur de chaîne à la variable a : 🎜
mysql> delimiter ;
Copier après la connexion
Copier après la connexion
🎜En plus d'attribuer une constante à une variable, nous pouvons également attribuer un Assignez une variable à une autre variable : 🎜rrreee🎜De cette façon, les variables a et b ont la même valeur 'Wahaha' ! 🎜🎜On peut également affecter le résultat d'une requête à une variable, à condition que le résultat de la requête n'ait qu'une seule valeur : 🎜rrreee🎜On peut également utiliser une autre forme d'instruction pour affecter le résultat de la requête à une variable : 🎜 rrreee 🎜Étant donné que les résultats de requête des instructions SELECT m1 FROM t1 LIMIT 1 et SELECT n1 FROM t1 LIMIT 1 n'ont qu'une seule valeur, ils peuvent être directement affectés à la variable a ou b. Vérifions les valeurs de ces deux variables : 🎜rrreee🎜Si le résultat de notre requête est un enregistrement avec plusieurs valeurs de colonnes dans l'enregistrement, nous souhaitons attribuer ces valeurs à différentes variables. Nous ne pouvons que le . L'instruction INTO est utilisée : 🎜rrreee🎜Le jeu de résultats de cette instruction de requête ne contient qu'un seul enregistrement. Nous attribuons la valeur de la colonne m1 de cet enregistrement à la variable In a. , la valeur de la colonne n1 est affectée à la variable b. 🎜🎜Délimiteur de fin d'instruction🎜🎜Dans l'interface interactive du client MySQL, lorsque nous terminons la saisie au clavier et appuyons sur la touche Entrée, le client MySQL détectera notre saisie Le contenu contient-il l'un des trois symboles ;, g ou G ? Si tel est le cas, le contenu que nous saisissons sera envoyé au serveur. . De cette façon, si nous voulons envoyer plusieurs instructions au serveur à la fois, nous devons écrire ces instructions sur une seule ligne, comme ceci : 🎜rrreee🎜La raison de cet inconvénient est que le MySQL client Le symbole utilisé pour détecter la fin de la saisie est le même que le symbole qui sépare chaque instruction ! En fait, nous pouvons également utiliser la commande delimiter pour personnaliser le symbole pour MySQL afin de détecter la fin de l'entrée de l'instruction, qui est ce qu'on appelle la fin de -délimiteur d'instruction, tel que celui-ci :🎜
mysql> delimiter $
mysql> SELECT * FROM t1 LIMIT 1;
    -> SELECT * FROM t2 LIMIT 1;
    -> SELECT * FROM t3 LIMIT 1;
    -> $
+------+------+
| m1   | n1   |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m2   | n2   |
+------+------+
|    2 | b    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m3   | n3   |
+------+------+
|    3 | c    |
+------+------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion
Copier après la connexion

delimiter $命令意味着修改语句结束分隔符为$,也就是说之后MySQL客户端检测用户语句输入结束的符号为$。上边例子中我们虽然连续输入了3个以分号;结尾的查询语句并且按了回车键,但是输入的内容并没有被提交,直到敲下$符号并回车,MySQL客户端才会将我们输入的内容提交到服务器,此时我们输入的内容里已经包含了3个独立的查询语句了,所以返回了3个结果集。

我们也可以将语句结束分隔符重新定义为$以外的其他包含单个或多个字符的字符串,比方说这样:

mysql> delimiter EOF
mysql> SELECT * FROM t1 LIMIT 1;
    -> SELECT * FROM t2 LIMIT 1;
    -> SELECT * FROM t3 LIMIT 1;
    -> EOF
+------+------+
| m1   | n1   |
+------+------+
|    1 | a    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m2   | n2   |
+------+------+
|    2 | b    |
+------+------+
1 row in set (0.00 sec)

+------+------+
| m3   | n3   |
+------+------+
|    3 | c    |
+------+------+
1 row in set (0.00 sec)

mysql>
Copier après la connexion
Copier après la connexion

我们这里采用了EOF作为MySQL客户端检测输入结束的符号,是不是很easy啊!当然,这个只是为了方便我们一次性输入多个语句,在输入完成之后最好还是改回我们常用的分号;吧:

mysql> delimiter ;
Copier après la connexion
Copier après la connexion

小贴士: 我们应该避免使用反斜杠(\)字符作为语句结束分隔符,因为这是MySQL的转义字符。

推荐学习:mysql视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal