47 images pour vous guider dans l'avancement de MySQL
La colonne
Tutoriel MySQL vous présente 47 images pour comprendre le MySQL avancé.
Dans le chapitre d'introduction à MySQL, nous présentons principalement les commandes SQL de base, les types de données et les fonctions. Avec les connaissances ci-dessus, vous pouvez développer MySQL, mais si vous le souhaitez. Si vous voulez devenir un développeur qualifié, vous devez avoir des compétences plus avancées. Discutons des compétences avancées requises par MySQL
Moteur de stockage MySQL
Présentation du moteur de stockage
Le point central de la base de données est de stocker des données, et le stockage des données ne peut éviter de traiter avec des disques. Ainsi, comment et comment les données sont stockées est la clé du stockage. Par conséquent, le moteur de stockage est équivalent au moteur de stockage de données, entraînant le stockage des données au niveau du disque.
L'architecture de MySQL peut être comprise selon le modèle à trois niveaux

Le moteur de stockage est également un composant de MySQL . C'est une sorte de logiciel. Les principales fonctions qu'il peut exécuter et prendre en charge sont
- Concurrence
- Support des transactions
- Contraintes d'intégrité
- Physiques. stockage
- Index de support
- Aide aux performances
MySQL prend en charge plusieurs moteurs de stockage par défaut pour s'adapter à différentes applications de base de données. Les utilisateurs peuvent choisir le moteur de stockage approprié en fonction de leurs besoins. . Les éléments suivants sont pris en charge par MySQL Storage Engine
- MyISAM
- InnoDB
- BDB
- MEMORY
- MERGE .
- EXEMPLE
- Cluster NDB
- ARCHIVE
- CSV
- TROU NOIR
- FÉDÉRÉ
Par par défaut, si la table n'est pas créée La spécification du moteur de stockage utilisera le moteur de stockage par défaut. Si vous souhaitez modifier le moteur de stockage par défaut, vous pouvez définir default-table-type
dans le fichier de paramètres et afficher le moteur de stockage actuel
show variables like 'table_type';复制代码

show engines \g复制代码

. ENGINE
create table cxuan002(id int(10),name varchar(20)) engine = MyISAM;复制代码

. MyISAM
show create table



. InnoDB
alter table cxuan003 engine = myisam;复制代码
0 ligne affectée sera affichée, mais dans. fait l'opération a réussi

pour vérifier le sql de la table et nous saurons show create table

MyISAM
Avant la version 5.1, MyISAM était le moteur de stockage par défaut de MySQL. MyISAM avait une faible concurrence et était utilisé dans moins de scénarios. Ses principales fonctionnalités sont
. Sans la prise en charge de l'opération
事务
, les fonctionnalités ACID n'existeront pas. Cette conception est destinée à des considérations de performances et d'efficacité.ne prend pas en charge l'opération
外键
Si vous ajoutez de force une clé étrangère, MySQL ne signalera pas d'erreur, mais la clé étrangère ne fonctionnera pas.La granularité de verrouillage par défaut de MyISAM est
表级锁
, donc les performances de concurrence sont relativement médiocres, le verrouillage est plus rapide, il y a moins de conflits de verrouillage et les blocages sont moins susceptibles de se produire.MyISAM stockera trois fichiers sur le disque. Le nom du fichier et le nom de la table sont les mêmes et les extensions sont respectivement
.frm(存储表定义)
,.MYD(MYData,存储数据)
etMYI(MyIndex,存储索引)
. Ce qui nécessite une attention particulière ici, c'est que MyISAM met uniquement en cache索引文件
et ne met pas en cache les fichiers de données.-
Les types d'index pris en charge par MyISAM sont
全局索引(Full-Text)
,B-Tree 索引
,R-Tree 索引
Index de texte intégral : il semble résoudre l'ambiguïté des problèmes de texte avec une faible efficacité des requêtes.
Index B-Tree : tous les nœuds d'index sont stockés selon la structure de données d'un arbre équilibré, et tous les nœuds de données d'index sont dans des nœuds feuilles
Index R-Tree : sa méthode de stockage est les mêmes que les index B-Tree présentent quelques différences. Ils sont principalement conçus pour indexer des champs qui stockent des données spatiales et multidimensionnelles. La version actuelle de MySQL ne prend en charge que les champs de type géométrique pour l'indexation. Par rapport à BTREE, l'avantage de RTREE est la recherche par plage.
Si l'hôte sur lequel se trouve la base de données tombe en panne, les fichiers de données MyISAM sont facilement endommagés et difficiles à récupérer.
Performances d'ajout, de suppression, de modification et de requête : SELECT a des performances plus élevées et convient aux situations avec beaucoup de requêtes
InnoDB
Depuis qu'après MySQL 5.1, le moteur de stockage par défaut est devenu le moteur de stockage InnoDB. Par rapport à MyISAM, le moteur de stockage InnoDB a subi des changements majeurs. Ses principales caractéristiques sont qu'il prend en charge les opérations de transaction et dispose d'une fonctionnalité d'isolation de transaction, l'ACID. le niveau d'isolement par défaut est
, implémenté via- . Peut résoudre les problèmes de
- et
可重复读(repetable-read)
.MVCC(并发版本控制)
脏读
InnoDB prend en charge les opérations de clé étrangère.不可重复读
La granularité de verrouillage par défaut d'InnoDB est - , qui offre de meilleures performances de concurrence, mais des blocages peuvent survenir.
- Comme MyISAM, le moteur de stockage InnoDB a également une définition
行级锁
, mais la différence est que les données de table et les données d'index d'InnoDB sont stockées ensemble, toutes deux situées sur les nœuds feuilles du numéro B+, tandis que MyISAM Le les données de table et les données d'index sont séparées. - InnoDB dispose d'un fichier journal sécurisé. Ce fichier journal est utilisé pour récupérer la perte de données causée par un crash de base de données ou d'autres situations et garantir la cohérence des données.
.frm文件存储表结构
InnoDB et MyISAM prennent en charge les mêmes types d'index, mais l'implémentation spécifique est très différente en raison de structures de fichiers différentes. - En termes de performances d'ajout, de suppression, de modification et de requête, si un grand nombre d'opérations d'ajout, de suppression et de modification sont effectuées, il est recommandé d'utiliser le moteur de stockage InnoDB. Il supprime les lignes lors de la suppression. opérations et ne reconstruit pas la table.
- MEMORY
. Les tables de type MEMORY sont accessibles très rapidement car leurs données sont stockées en mémoire. La valeur par défaut est
..frm
MERGEHASH 索引
pour stocker la définition de la table, et l'autre est le fichier
pour stocker la composition de la table MERGE, etc..frm
Choisissez le moteur de stockage approprié.MRG
- MyISAM : si l'application est généralement orientée récupération, avec seulement un petit nombre d'opérations d'insertion, de mise à jour et de suppression, et que l'intégrité et la concurrence des éléments ne sont pas très élevées, il est généralement recommandé de choisir le Moteur de stockage MyISAM.
- InnoDB : si des clés étrangères sont utilisées, un degré élevé de concurrence est requis et les exigences de cohérence des données sont élevées, alors le moteur InnoDB est généralement sélectionné. Généralement, les grandes sociétés Internet ont des exigences plus élevées en matière de concurrence et d'intégrité des données. , ils utilisent donc généralement Utilisez le moteur de stockage InnoDB.
- MEMORY : Le moteur de stockage MEMORY stocke toutes les données en mémoire et peut fournir un accès extrêmement rapide lorsqu'une localisation rapide est requise. MEMORY est généralement utilisé pour les petits tableaux qui sont mis à jour moins fréquemment et pour un accès rapide aux résultats.
- MERGE : MERGE utilise les tables MyISAM en interne. L'avantage de la table MERGE est qu'elle peut dépasser la limite de taille d'une seule table MyISAM, et en distribuant différentes tables sur plusieurs disques, la table MERGE peut être l’efficacité de l’accès.
Choisissez le type de données approprié
Un problème que nous rencontrons souvent est de savoir comment choisir le type de données approprié lors de la création d'une table. Généralement, le choix du type de données approprié peut améliorer les performances. Réduisons les problèmes inutiles, discutons de la façon de choisir le type de données approprié.
Choix de CHAR et VARCHAR
char et varchar sont deux types de données que nous utilisons souvent pour stocker des chaînes. char stocke généralement des chaînes de longueur fixe et est de type caractère de longueur fixe, comme le. en suivant
值 | char(5) | 存储字节 |
---|---|---|
'' | ' ' | 5个字节 |
'cx' | 'cx ' | 5个字节 |
'cxuan' | 'cxuan' | 5个字节 |
'cxuan007' | 'cxuan' | 5个字节 |
, vous pouvez voir que peu importe ce que votre valeur est écrite, une fois la longueur du caractère char spécifiée, si la longueur de votre chaîne n'est pas suffisante pour spécifier la longueur du caractère, alors il est complété par des espaces, et s'il dépasse la longueur de la chaîne, seuls les caractères de la longueur de caractère spécifiée sont stockés.
Remarque ici : si MySQL utilise du non-
严格模式
, la dernière ligne du tableau ci-dessus peut être stockée. Si MySQL utilise严格模式
, une erreur sera signalée lors du stockage de la dernière ligne du tableau.
Si le type de caractère varchar est utilisé, regardons un exemple
值 | varchar(5) | 存储字节 |
---|---|---|
'' | '' | 1个字节 |
'cx' | 'cx ' | 3个字节 |
'cxuan' | 'cxuan' | 6个字节 |
'cxuan007' | 'cxuan' | 6个字节 |
Comme vous pouvez le voir, si varchar est utilisé, les octets stockés seront stockés en fonction de la valeur réelle. Vous vous demandez peut-être pourquoi la longueur de varchar est de 5, mais il doit stocker 3 octets ou 6 octets. En effet, lors de l'utilisation du type de données varchar pour le stockage, une longueur de chaîne sera ajoutée par défaut à la fin, occupant 1 mot. section (deux octets sont utilisés si la déclaration de colonne est plus longue que 255). varchar ne remplit pas les chaînes vides.
Char est généralement utilisé pour stocker des chaînes de longueur fixe, telles que numéro d'identification, numéro de téléphone portable, e-mail, etc.; varchar est utilisé pour stocker des chaînes de longueur variable. Étant donné que la longueur du caractère est fixe, sa vitesse de traitement est beaucoup plus rapide que celle de VARCHAR, mais l'inconvénient est qu'il gaspille de l'espace de stockage. Cependant, avec l'évolution continue des versions de MySQL, les performances du type de données varchar s'améliorent également constamment. , il est donc utilisé dans de nombreuses applications , le type VARCHAR est plus couramment utilisé.
Dans MySQL, différents moteurs de stockage ont des principes différents pour utiliser CHAR et VARCHAR
- MyISAM : il est recommandé d'utiliser des colonnes de données de longueur fixe au lieu de colonnes de données de longueur variable. est CHAR
- MEMORY : utilisez une longueur fixe pour le traitement, CHAR et VARCHAR seront traités comme CHAR
- InnoDB : il est recommandé d'utiliser le type VARCHAR
TEXT et BLOB
Généralement, lors de l'enregistrement d'une petite quantité de texte, nous choisirons CHAR et VARCHAR. Lors de l'enregistrement d'une grande quantité de texte, nous choisissons souvent TEXT et BLOB. La principale différence entre TEXT et BLOB est que BLOB peut enregistrer. 二进制数据
; alors que TEXT ne peut enregistrer que 字符数据
, TEXT peut être subdivisé en
- TEXT
- MEDIUMTEXT
- LONGTEXT
BLOB est subdivisé en trois types :
- BLOB
- MEDIUMBLOB
- LONGBLOB
La principale différence entre eux est le. stockage du texte. La longueur est différente et les octets de stockage sont différents. Les utilisateurs doivent choisir le type de stockage minimum qui répond aux besoins en fonction de la situation réelle. Ce qui suit présente principalement quelques problèmes avec BLOB et TEXT
TEXT et. BLOB aura quelques problèmes de performances après la suppression du problème, afin d'améliorer les performances, il est recommandé d'utiliser la fonction OPTIMIZE TABLE
pour défragmenter la table.
Les index synthétiques peuvent également être utilisés pour améliorer les performances des requêtes sur les champs de texte (BLOB et TEXT). L'index synthétique consiste à créer une valeur de hachage basée sur le contenu du champ de texte volumineux (BLOB et TEXT) et à stocker cette valeur dans la colonne correspondante, afin que la ligne de données correspondante puisse être trouvée en fonction de la valeur de hachage. Généralement, des algorithmes de hachage tels que md5() et SHA1() sont utilisés. Si les chaînes générées par l'algorithme de hachage ont des espaces de fin, ne les stockez pas dans CHAR et VARCHAR. Jetons un coup d'œil à cette utilisation
. Créez d'abord une table qui enregistre les champs blob et les valeurs de hachage

Insérez les données dans cxuan005, où la valeur de hachage est utilisée comme valeur de hachage d'informations.

Puis insérez deux autres données

Insérer une information est les données de cxuan005

Si vous souhaitez interroger les données de l'information est cxuan005, vous pouvez interroger la colonne de hachage

Ceci est un exemple d'index synthétique. Si vous souhaitez effectuer une requête floue sur BLOB, vous devez utiliser un index de préfixe.
Autres façons d'optimiser BLOB et TEXT :
- Ne récupérez pas les index BLOB et TEXT sauf si nécessaire
- Séparez les colonnes BLOB ou TEXT dans des tables distinctes.
Sélection de nombres à virgule flottante et de nombres à virgule fixe
Les nombres à virgule flottante font référence à des valeurs contenant des décimales après que les nombres à virgule flottante sont insérés dans la colonne spécifiée et dépassent la précision spécifiée. , les nombres à virgule flottante seront arrondis, MySQL Les nombres à virgule flottante font référence à float
et double
, et les nombres à virgule fixe font référence à decimal
Les nombres à virgule fixe peuvent enregistrer et afficher les données avec plus de précision. Utilisons un exemple pour expliquer le problème de précision en virgule flottante
Créez d'abord une table cxuan006, juste pour tester le problème de la virgule flottante, donc le type de données que nous choisissons ici est float

Ensuite, insérez respectivement deux éléments de données

Exécutez ensuite la requête, vous pouvez voir que les deux données interrogées sont arrondies différemment

Afin de voir clairement le problème de précision entre les nombres à virgule flottante et les nombres à virgule fixe, regardons un autre exemple

Modifiez d'abord le cxuan006 Les deux champs ont la même longueur et les mêmes décimales
puis insérez deux données

pour effectuer la requête opération, vous pouvez constater que, par rapport aux nombres à virgule fixe, les nombres à virgule flottante produiront des erreurs

Sélection du type de date
Dans MySQL, utilisés pour représenter les types de date incluent DATE, TIME, DATETIME et TIMESTAMP Dans cet article
138 images vous guident pour démarrer avec MySQL
que nous avons. introduit les différences entre les types de dates. Il ne sera pas détaillé ici. Ce qui suit présente principalement la sélection de
- TIMESTAMP, qui est lié au fuseau horaire et peut mieux refléter l'heure actuelle. Si la date enregistrée doit être utilisée par des personnes dans des fuseaux horaires différents, c'est le cas. il est préférable d'utiliser TIMESTAMP.
- DATE est utilisé pour représenter l'année, le mois et le jour. Si la valeur réelle de l'application doit enregistrer l'année, le mois et le jour, vous pouvez utiliser DATE.
- TIME est utilisé pour représenter les heures, les minutes et les secondes. Si la valeur réelle de l'application doit enregistrer des heures, des minutes et des secondes, vous pouvez utiliser TIME.
- ANNÉE est utilisée pour représenter l'année. L'ANNÉE a des formats d'année à 2 chiffres (de préférence 4 chiffres) et à 4 chiffres. La valeur par défaut est de 4 chiffres. Si l'application réelle enregistre uniquement l'année, alors il est parfaitement possible d'utiliser 1 octet pour enregistrer le type YEAR. Non seulement cela permet d'économiser de l'espace de stockage, mais cela peut également améliorer l'efficacité du fonctionnement de la table.
Jeu de caractères MySQL
Apprenons à connaître le jeu de caractères MySQL. En termes simples, un jeu de caractères est un ensemble de symboles de texte, de règles d'encodage et de comparaison. En 1960, l'organisme de normalisation américain ANSI a publié le premier jeu de caractères informatiques, qui est le fameux ASCII(American Standard Code for Information Interchange)
. Depuis le codage ASCII, chaque pays et organisation internationale a développé son propre jeu de caractères, comme ISO-8859-1
, GBK
, etc.
Mais chaque pays utilise son propre jeu de caractères, ce qui pose de grandes difficultés en matière de portabilité. Par conséquent, afin d'unifier les encodages de caractères, 国际标准化组织(ISO)
spécifie une norme de caractères unifiée - l'encodage Unicode, qui prend en charge presque tous les encodages de caractères. Voici quelques encodages de caractères courants
字符集 | 是否定长 | 编码方式 |
---|---|---|
ASCII | 是 | 单字节 7 位编码 |
ISO-8859-1 | 是 | 单字节 8 位编码 |
GBK | 是 | 双字节编码 |
UTF-8 | 否 | 1 - 4 字节编码 |
UTF-16 | 否 | 2 字节或 4 字节编码 |
UTF-32 | 是 | 4 字节编码 |
对数据库来说,字符集是很重要的,因为数据库存储的数据大多数都是各种文字,字符集对数据库的存储、性能、系统的移植来说都非常重要。
MySQL 支持多种字符集,可以使用 show character set;
来查看所有可用的字符集

或者使用
select character_set_name, default_collate_name, description, maxlen from information_schema.character_sets;复制代码
来查看。
使用 information_schema.character_set
来查看字符集和校对规则。
索引的设计和使用
我们上面介绍到了索引的几种类型并对不同的索引类型做了阐述,阐明了优缺点等等,下面我们从设计角度来聊一下索引,关于索引,你必须要知道的一点就是:索引是数据库用来提高性能的最常用工具。
索引概述
所有的 MySQL 类型都可以进行索引,对相关列使用索引是提高 SELECT
查询性能的最佳途径。MyISAM 和 InnoDB 都是使用 BTREE
作为索引,MySQL 5 不支持函数索引
,但是支持 前缀索引
。
前缀索引顾名思义就是对列字段的前缀做索引,前缀索引的长度和存储引擎有关系。MyISAM 前缀索引的长度支持到 1000 字节,InnoDB 前缀索引的长度支持到 767 字节,索引值重复性越低,查询效率也就越高。
在 MySQL 中,主要有下面这几种索引
-
全局索引(FULLTEXT)
:全局索引,目前只有 MyISAM 引擎支持全局索引,它的出现是为了解决针对文本的模糊查询效率较低的问题,并且只限于 CHAR、VARCHAR 和 TEXT 列。 -
哈希索引(HASH)
:哈希索引是 MySQL 中用到的唯一 key-value 键值对的数据结构,很适合作为索引。HASH 索引具有一次定位的好处,不需要像树那样逐个节点查找,但是这种查找适合应用于查找单个键的情况,对于范围查找,HASH 索引的性能就会很低。默认情况下,MEMORY 存储引擎使用 HASH 索引,但也支持 BTREE 索引。 -
B-Tree 索引
:B 就是 Balance 的意思,BTree 是一种平衡树,它有很多变种,最常见的就是 B+ Tree,它被 MySQL 广泛使用。 -
R-Tree 索引
:R-Tree 在 MySQL 很少使用,仅支持 geometry 数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种,相对于 B-Tree 来说,R-Tree 的优势在于范围查找。
索引可以在创建表的时候进行创建,也可以单独创建,下面我们采用单独创建的方式,我们在 cxuan004 上创建前缀索引

我们使用 explain
进行分析,可以看到 cxuan004 使用索引的情况

如果不想使用索引,可以删除索引,索引的删除语法是

索引设计原则
创建索引的时候,要尽量考虑以下原则,便于提升索引的使用效率。
- 选择
索引位置
,选择索引最合适的位置是出现在where
语句中的列,而不是select
关键字后的选择列表中的列。 - 选择使用
唯一索引
,顾名思义,唯一索引的值是唯一的,可以更快速的确定某条记录,例如学生的学号就适合使用唯一性索引,而学生的性别则不适合使用,因为不管搜索哪个值,都差不多有一半的行。 - 为经常使用的字段建立索引,如果某个字段经常用作查询条件,那么这个字段的查询速度在极大程度上影响整个表的查询速度,因此为这样的字段建立索引,可以提高整个表的查询速度。
- 不要过度索引,限制索引数目,索引的数目不是越多越好,每个索引都会占据磁盘空间,索引越多,需要的磁盘空间就越大。
- 尽量使用
前缀索引
,如果索引的值很长,那么查询速度会受到影响,这个时候应该使用前缀索引,对列的某几个字符进行索引,可以提高检索效率。 - 利用最左前缀,在创建一个 n 列的索引时,实际上是创建了 MySQL 可利用的 n 个索引。多列索引可以起到几个索引的作用,利用索引最左边的列来匹配行,这样的列称为最左前缀。
- 对于使用 InnoDB 存储引擎的表来说,记录会按照一定的顺序保存。如果有明确的主键定义,那么会按照主键的顺序进行保存;如果没有主键,但是有唯一索引,那么就按照唯一索引的顺序进行保存。如果既没有主键又没有唯一索引,那么表中会自动生成一个内部列,按照这个列的顺序进行保存。一般来说,使用主键的顺序是最快的
- 删除不再使用或者很少使用的索引
视图
MySQL 从 5.0 开始就提供了视图功能,下面我们对视图功能进行介绍。
什么是视图
视图的英文名称是 view
,它是一种虚拟存在的表。视图对于用户来说是透明的,它并不在数据库中实际存在,视图是使用数据库行和列动态组成的表,那么视图相对于数据库表来说,优势体现在哪里?
视图相对于普通的表来说,优势包含下面这几项
- 使用视图可以简化操作:使用视图我们不用关注表结构的定义,我们可以把经常使用的数据集合定义成视图,这样能够简化操作。
- 安全性:用户对视图不可以随意的更改和删除,可以保证数据的安全性。
- 数据独立性:一旦视图的结构 确定了, 可以屏蔽表结构变化对用户的影响, 数据库表增加列对视图没有影响;具有一定的独立性
对视图的操作
视图的操作包括创建或者修改视图、删除视图以及查看视图定义。
创建或修改视图
使用 create view
来创建视图
为了演示功能,我们先创建一张表 product
表,有三个字段,id,name,price,下面是建表语句
create table product(id int(11),name varchar(20),price float(10,2));复制代码
然后我们向其中插入几条数据
insert into product values(1, "apple","3.5"),(2,"banana","4.2"),(3,"melon","1.2");复制代码
插入完成后的表结构如下

然后我们创建视图
create view v1 as select * from product;复制代码
然后我们查看一下 v1 视图的结构

可以看到我们把 product 中的数据放在了视图中,也相当于是创建了一个 product 的副本,只不过这个副本跟表无关。
视图使用
show tables;复制代码
也能看到所有的视图。
删除视图的语法是
drop view v1;复制代码

能够直接进行删除。
视图还有其他操作,比如查询操作
你还可以使用
describe v1;复制代码

查看表结构
更新视图
update v1 set name = "grape" where id = 1;复制代码

存储过程
MySQL 从 5.0 开始起就支持存储过程和函数了。
那么什么是存储过程呢?
存储过程是在数据库系统中完成一组特定功能的 SQL 语句集,它存储在数据库系统中,一次编译后永久有效。那么使用存储过程有什么优点呢?
- 使用存储过程具有可封装性,能够隐藏复杂的 SQL 逻辑。
- 存储过程可以接收参数,并返回结果
- 存储过程性能非常高,一般用于批量执行语句
使用存储过程有什么缺点?
- 存储过程编写复杂
- 存储过程对数据库的依赖性比较强,可移植性比较差
存储过程使用
存储过程创建
在认识到存储过程是什么之后,我们就来使用一下存储过程,这里需要先了解一个小技巧,也就是 delimiter
的用法,delimiter 用于自定义结束符,什么意思呢,如果你使用
delimiter ?复制代码
的话,那么你在 sql 语句末使用 ;
是不能使 SQL 语句执行的,不信?我们可以看下

可以看到,我们在 SQL 语句的行末使用了 ;
但是我们却没有看到执行结果。下面我们使用
delimiter ;复制代码
恢复默认的执行条件再来看下

我们创建存储过程首先要把 ;
替换为 ?
,下面是一个存储过程的创建语句
mysql> delimiter ? mysql> create procedure sp_product() -> begin -> select * from product; -> end ?复制代码

存储过程实际上是一种函数,所以创建完毕后,我们可以使用 call
方法来调用这个存储过程

因为我们上面定义了使用 delimiter ? 来结尾,所以这里也应该使用。
存储过程也可以接受参数,比如我们定义一种接收参数的情况

然后我们使用 call
调用这个存储过程

可以看到,当我们调用 id = 2 的时候,存储过程的 SQL 语句相当于是
select * from product where id = 2;复制代码
所以只查询出 id = 2 的结果。
存储过程删除
一次只能删除一个存储过程,删除存储过程的语法如下
drop procedure sp_product ;复制代码
直接使用 sp_product 就可以了,不用加 ()
。
存储过程查看
存储过程创建后,用户可能需要需要查看存储过程的状态等信息,便于了解存储过程的基本情况
我们可以使用
show create procedure proc_name;复制代码
变量的使用
在 MySQL 中,变量可分为两大类,即系统变量
和用户变量
,这是一种粗略的分法。但是根据实际应用又被细化为四种类型,即局部变量、用户变量、会话变量和全局变量。
用户变量
用户变量是基于会话变量
实现的,可以暂存,用户变量与连接有关,也就是说一个客户端定义的变量不能被其他客户端使用看到。当客户端退出时,链接会自动释放。我们可以使用 set
语句设置一个变量
set @myId = "cxuan";复制代码
然后使用 select
查询条件可以查询出我们刚刚设置的用户变量

用户变量是和客户端有关系,当我们退出后,这个变量会自动消失,现在我们退出客户端
exit复制代码
现在我们重新登陆客户端,再次使用 select
条件查询

发现已经没有这个 @myId
了。
局部变量
MySQL 中的局部变量与 Java 很类似 ,Java 中的局部变量是 Java 所在的方法或者代码块,而 MySQL 中的局部变量作用域是所在的存储过程。MySQL 局部变量使用 declare
来声明。
会话变量
服务器会为每个连接的客户端维护一个会话变量。可以使用
show session variables;复制代码
显示所有的会话变量。
我们可以手动设置会话变量
set session auto_increment_increment=1; 或者使用 set @@session.auto_increment_increment=2;复制代码
然后进行查询,查询会话变量使用

或者使用

全局变量
当服务启动时,它将所有全局变量初始化为默认值。其作用域为 server 的整个生命周期。
可以使用
show global variables;复制代码
查看全局变量
可以使用下面这两种方式设置全局变量
set global sql_warnings=ON; -- global不能省略 /** 或者 **/ set @@global.sql_warnings=OFF;复制代码
查询全局变量时,可以使用

或者是

MySQL 流程语句介绍
MySQL 支持下面这些控制语句
- IF
IF 用于实现逻辑判断,满足不同条件执行不同的 SQL 语句
IF ... THEN ...复制代码
- CASE
CASE 实现比 IF 稍微复杂,语法如下
CASE ... WHEN ... THEN... ... END CASE复制代码
CASE 语句也可以使用 IF 来完成
- LOOP
LOOP 用于实现简单的循环
label:LOOP ... END LOOP label;复制代码
如果 ...
中不写 SQL 语句的话,那么就是一个简单的死循环语句
- LEAVE
用来表示从标注的流程构造中退出,通常和 BEGIN...END 或者循环一起使用
- ITERATE
ITERATE 语句必须用在循环中,作用是跳过当前循环的剩下的语句,直接进入下一轮循环。
- REPEAT
带有条件的循环控制语句,当满足条件的时候退出循环。
REPEAT ... UNTIL END REPEAT;复制代码
- WHILE
WHILE 语句表示的含义和 REPEAT 相差无几,WHILE 循环和 REPEAT 循环的区别在于:WHILE 是满足条件才执行循环,REPEAT 是满足条件退出循环;
触发器
MySQL 从 5.0 开始支持触发器
,触发器一般作用在表上,在满足定义条件时触发,并执行触发器中定义的语句集合,下面我们就来一起认识一下触发器。
举个例子来认识一下触发器:比如你有一个日志表和金额表,你每录入一笔金额就要进行日志表的记录,你会怎么样?同时在金额表和日志表插入数据吗?如果有了触发器,你可以直接在金额表录入数据,日志表会自动插入一条日志记录,当然,触发器不仅只有新增操作,还有更新和删除操作。
创建触发器
我们可以用如下的方式创建触发器
create trigger triggername triggertime triggerevent on tbname for each row triggerstmt复制代码
上面涉及到几个参数,我知道你有点懵逼,解释一下。
-
triggername
:这个指的就是触发器的名字 -
triggertime
:这个指的就是触发器触发时机,是BEFORE
还是AFTER
-
triggerevent
: 这个指的就是触发器触发事件,一共有三种事件:INSERT、UPDATE 或者 DELETE。 -
tbname
:这个参数指的是触发器创建的表名,在哪个表上创建 -
triggerstmt
: 触发器的程序体,也就是 SQL 语句
所以,可以创建六种触发器
BEFORE INSERT、AFTER INSERT、BEFORE UPDATE、AFTER UPDATE、BEFORE DELETE、AFTER DELETE
上面的 for each now
表示任何一条记录上的操作都会触发触发器。
下面我们通过一个例子来演示一下触发器的操作
我们还是用上面的 procuct 表做例子,我们创建一个 product_info 产品信息表。
create table product_info(p_info varchar(20)); 复制代码
然后我们创建一个 trigger

我们在 product 表中插入一条数据
insert into product values(4,"pineapple",15.3);复制代码
我们进行 select 查询,可以看到现在 product 表中有四条数据

我们没有向 product_info 表中插入数据,现在我们来看一下 product_info 表中,我们预想到是有数据的,具体来看下

这条数据是什么时候插入的呢?我们在创建触发器 tg_pinfo
的时候插入了的这条数据。
删除触发器
触发器可以使用 drop
进行删除,具体删除语法如下
drop trigger tg_pinfo;复制代码
和删除表的语法是一样的
查看触发器
我们经常会查看触发器,可以通过执行 show triggers
命令查看触发器的状态、语法等信息。
另一种查询方式是查询表中的 information_schema.triggers
表,这个可以查询指定触发器的指定信息,操作起来方便很多
触发器的作用
- 在添加一条数据前,检查数据是否合理,例如检查邮件格式是否正确
- 删除数据后,相当于数据备份的作用
- 可以记录数据库的操作日志,也可以作为表的执行轨迹
注意:触发器的使用有两个限制
- 触发程序不能调用将数据返回客户端的存储程序。也不能使用 CALL 语句的动态 SQL 语句。
- 不能在触发器中开始和结束语句,例如 START TRANSACTION

更多相关免费学习推荐: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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Dans la base de données MySQL, la relation entre l'utilisateur et la base de données est définie par les autorisations et les tables. L'utilisateur a un nom d'utilisateur et un mot de passe pour accéder à la base de données. Les autorisations sont accordées par la commande Grant, tandis que le tableau est créé par la commande Create Table. Pour établir une relation entre un utilisateur et une base de données, vous devez créer une base de données, créer un utilisateur, puis accorder des autorisations.

MySQL convient aux débutants car il est simple à installer, puissant et facile à gérer les données. 1. Installation et configuration simples, adaptées à une variété de systèmes d'exploitation. 2. Prise en charge des opérations de base telles que la création de bases de données et de tables, d'insertion, d'interrogation, de mise à jour et de suppression de données. 3. Fournir des fonctions avancées telles que les opérations de jointure et les sous-questionnaires. 4. Les performances peuvent être améliorées par l'indexation, l'optimisation des requêtes et le partitionnement de la table. 5. Prise en charge des mesures de sauvegarde, de récupération et de sécurité pour garantir la sécurité et la cohérence des données.

Navicat lui-même ne stocke pas le mot de passe de la base de données et ne peut récupérer que le mot de passe chiffré. Solution: 1. Vérifiez le gestionnaire de mots de passe; 2. Vérifiez la fonction "Remember Motway" de Navicat; 3. Réinitialisez le mot de passe de la base de données; 4. Contactez l'administrateur de la base de données.

1. Utilisez l'index correct pour accélérer la récupération des données en réduisant la quantité de données numérisées SELECT * FROMMLOYEESEESHWHERELAST_NAME = 'SMITH'; Si vous recherchez plusieurs fois une colonne d'une table, créez un index pour cette colonne. If you or your app needs data from multiple columns according to the criteria, create a composite index 2. Avoid select * only those required columns, if you select all unwanted columns, this will only consume more server memory and cause the server to slow down at high load or frequency times For example, your table contains columns such as created_at and updated_at and timestamps, and then avoid selecting * because they do not require inefficient query se

Affichez la base de données MySQL avec la commande suivante: Connectez-vous au serveur: MySQL -U Username -P mot de passe Exécuter les bases de données Afficher les bases de données; Commande pour obtenir toutes les bases de données existantes Sélectionnez la base de données: utilisez le nom de la base de données; Tableau de vue: afficher des tables; Afficher la structure de la table: décrire le nom du tableau; Afficher les données: sélectionnez * dans le nom du tableau;

Créez une base de données à l'aide de NAVICAT Premium: Connectez-vous au serveur de base de données et entrez les paramètres de connexion. Cliquez avec le bouton droit sur le serveur et sélectionnez Créer une base de données. Entrez le nom de la nouvelle base de données et le jeu de caractères spécifié et la collation. Connectez-vous à la nouvelle base de données et créez le tableau dans le navigateur d'objet. Cliquez avec le bouton droit sur le tableau et sélectionnez Insérer des données pour insérer les données.

La copie d'une table dans MySQL nécessite la création de nouvelles tables, l'insertion de données, la définition de clés étrangères, la copie des index, les déclencheurs, les procédures stockées et les fonctions. Les étapes spécifiques incluent: la création d'une nouvelle table avec la même structure. Insérez les données de la table d'origine dans une nouvelle table. Définissez la même contrainte de clé étrangère (si le tableau d'origine en a un). Créer le même index. Créez le même déclencheur (si le tableau d'origine en a un). Créez la même procédure ou fonction stockée (si la table d'origine est utilisée).

NAVICAT pour MARIADB ne peut pas afficher directement le mot de passe de la base de données car le mot de passe est stocké sous forme cryptée. Pour garantir la sécurité de la base de données, il existe trois façons de réinitialiser votre mot de passe: réinitialisez votre mot de passe via Navicat et définissez un mot de passe complexe. Affichez le fichier de configuration (non recommandé, haut risque). Utilisez des outils de ligne de commande système (non recommandés, vous devez être compétent dans les outils de ligne de commande).
