Maison > Article > base de données > Réserve de points de connaissances de base de la base de données MySQL (résumé organisé)
Cet article vous apporte des connaissances pertinentes sur la base de données mysql. Il organise principalement certains points de connaissances de base de la base de données, notamment l'indexation, l'ordre syntaxique, l'ordre d'exécution, les procédures stockées et d'autres problèmes connexes.
Apprentissage recommandé : Tutoriel mysql
Atomicité
)Atomicity
)Consistency
)Isolation
)Durability
)SQL
标准定义了四种隔离性:(下面隔离性是由低到高,并发性由高到低)
select
Toutes les opérations requises dans l'ensemble de la transaction doivent être soumises avec succès ou toutes ont échoué et annulées. Cohérence
)Isolation
) L'isolement nécessite qu'une transaction modifie les données de la base de données et ne modifie pas modifiez-le à l'avenir. Il n'est pas visible pour les autres transactions tant que la validation n'est pas terminée. (C'est-à-dire que les transactions doivent être exécutées en série)
Durabilité (Durability
)
La durabilité signifie qu'une fois qu'une transaction est soumise, les modifications apportées aux données dans la base de données sont permanentes, même si dans le cas où le système de base de données rencontre une panne, l'opération de validation de la transaction ne sera pas perdue.
La norme SQL
définit quatre types d'isolement : (L'isolement suivant va de bas en haut, et la concurrence est de haut en bas)
Lecture non validée.
Le niveau d'isolement le plus bas, permettant aux autres transactions de voir les données non validées, ce qui entraînera des lectures sales. 🎜🎜Soumis pour lecture. 🎜 Étant donné que la base de données est séparée en lecture et en écriture, le verrou de lecture est acquis lors de la lecture de la transaction, mais il est libéré immédiatement après la lecture. Une fois le verrou de lecture libéré, les données peuvent être modifiées par d'autres transactions lors de la nouvelle lecture des résultats. de lecture des données avant et après sont différents, provoquant des lectures non répétables. (Les verrous de lecture n'ont pas besoin d'être libérés une fois la transaction validée, tandis que les verrous d'écriture doivent être libérés une fois la transaction validée.) 🎜🎜Lecture répétable. 🎜 Toutes les données obtenues parselect
ne peuvent pas être modifiées, afin d'éviter une lecture incohérente avant et après une transaction. Mais il n'y a aucun moyen de contrôler la lecture fantôme, car les autres transactions ne peuvent pas modifier les données sélectionnées pour le moment, mais elles peuvent ajouter des données 🎜🎜Sérialisable ; 🎜 Toutes les transactions sont exécutées les unes après les autres pour éviter les lectures fantômes. Pour les bases de données qui implémentent un contrôle de concurrence basé sur des verrous, la sérialisation nécessite que lors de l'exécution de requêtes de plage, un verrouillage de plage soit obtenu. Si le contrôle de concurrence n'est pas implémenté sur la base de verrous, la base de données. , lorsqu'une transaction qui viole les opérations en série est détectée, la transaction doit être annulée. 🎜🎜🎜Résumé : Les quatre niveaux sont progressivement améliorés et chaque niveau résout les problèmes. Plus le niveau de transaction est élevé, plus les performances sont mauvaises. 🎜🎜Niveau d'isolement Lecture sale Lecture non répétable Lecture fantôme 🎜 Lecture non validée (lecture non validée) Possible Possible 🎜 Lecture validée (lecture validée) Lecture sale Lecture non répétable Lecture fantôme 🎜🎜🎜Résumé : Les lectures non validées provoqueront des lectures sales -> Les lectures validées résoudront les lectures sales, mais provoqueront des lectures non répétables -> Les lectures répétables résoudront le problème de la lecture des résultats avant et après l'incohérence, mais provoqueront des lectures fantômes (pas avant, mais maintenant) - > La sérialisabilité résout les lectures fantômes, mais ajoute de nombreux verrous de plage, ce qui peut entraîner des délais d'attente de verrouillage 🎜 ;
(4) Index combiné
(5) L'index clusterisé construit un arbre B+ basé sur la clé primaire de chaque table, et les données d'enregistrement de ligne de la table entière sont stockées dans les nœuds feuilles, donc les nœuds feuilles de l'index clusterisé deviennent également des pages de données.
(6) Index non clusterisé (index auxiliaire) (le nœud de page ne stocke pas une ligne entière d'enregistrements).
2.3 Défaillance de l'index
2.4 Chaque moteur prend en charge les index
MyISAM
,InnoDB
,Memonry
三个常用MySQL
2.5 Structure d'index dans la base de données
Parce que lors de l'utilisation d'un arbre binaire, la profondeur de l'arbre binaire est trop grande, ce qui entraîne des lectures et écritures d'E/S trop fréquentes, ce qui conduit à son tour à une faible efficacité des requêtes. Par conséquent, en utilisant une structure arborescente à plusieurs voies, diverses opérations sur l’arbre B peuvent maintenir la hauteur de l’arbre B à un niveau bas.
par, avoir, union, ordre par, limite4. Séquence d'exécution de MySQL
grouper par doit être utilisé avec des fonctions d'agrégation,Par exemple :
select a.Customer,sum(a.OrderPrice) from orders a where a.Customer=’Bush’ or a.Customer = ‘Adams’ group by a.Customer;
implémenter une requête multi-table (jointure interne)
select u.uname,a.addr from lm_user u inner join lm_addr a on u.uid = a.uid;
en utilisant sélectionner à partir d'où peut également être utilisé Implémenter
select u.uname,a.addr from lm_user u, lm_addr a where u.uid = a.uid;
5. Procédure stockée select from where
同样可以实现
delimiter $$ create procedure procedure_bill() comment '查询所有销售情况' begin select billid, tx_time, amt from lm_bill; end $$ delimiter ;
call procedure_bill();
调用存储过程
show procedure status like 'procedure_bill';
查看存储过程
/**学生表*/ CREATE TABLE Student ( stu_id INT AUTO_INCREMENT, NAME VARCHAR(30), age INT , class VARCHAR(50), address VARCHAR(100), PRIMARY KEY(stu_id) ) /*学生课程表*/ CREATE TABLE Course( cour_id INT AUTO_INCREMENT, NAME VARCHAR(50), CODE VARCHAR(30), PRIMARY KEY(cour_id) ) /**学生课程关联表*/ CREATE TABLE Stu_Cour( sc_id INT AUTO_INCREMENT, stu_id INT , cour_id INT, PRIMARY KEY(sc_id) )
在数据库中,如果两个表的之间的关系为多对多的关系,如:“学生表和课程表”,一个学生可以选多门课,一门课也可以被多个学生选;根据数据库的设计原则,应当形成第三张关联表。
步骤1:创建三张数据表Student ,Course,Stu_Cour
/*添加外键约束*/ ALTER TABLE Stu_Cour ADD CONSTRAINT stu_FK1 FOREIGN KEY(stu_id) REFERENCES Student(stu_id); ALTER TABLE Stu_Cour ADD CONSTRAINT cour_FK2 FOREIGN KEY(cour_id) REFERENCES Course(cour_id);
第二步:为Stu_Cour关联表添加外键
rrreee完成创建!
alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名)
;例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id);
当你访问数据库时,不管是手工访问,还是程序访问,都不是直接读写数据库文件,而是通过数据库引擎去访问数据库文件。
以关系型数据库为例,发SQL语句给数据库引擎,数据库引擎解释SQL语句,提取出你需要的数据返回给你。因此,对访问者来说,数据库引擎就是SQL语句的解释器。
主要区别:
MYISAM
是非事务安全型的,而InnoDB
是事务安全型;NYISAM
锁的粒度是表级锁,而InnoDB
支持行级锁;MYISAM
支持全文本索引,而InnoDB
不支持全文索引MYISAM
相对简单,所以在效率上要优于InnoDB
,小型应用可以考虑使用MYISAM
;MYISAM
表是保存成文件的形式,在跨平台的数据转移中使用MYISAM
存储会省去不少的麻烦;InnoDB
表比MYISAM
rrreeeAfficher la procédure stockée
rrreee🎜 6. Établir une relation de table de données plusieurs à plusieurs 🎜🎜 Dans la base de données, si la relation entre deux tables est composée de plusieurs paires. Relations multiples, telles que : « table des étudiants et horaire des cours », un étudiant peut choisir plusieurs cours, et un cours peut également être choisi par plusieurs étudiants selon les principes de conception de la base de données ; une troisième table d'association devrait être formée. 🎜 Étape 1 : Créez trois tables de données Student, Course, Stu_Cour🎜rrreee🎜Étape 2 : Ajoutez des clés étrangères à la table associée Stu_Cour🎜rrreee🎜Création complète ! 🎜🎜🎜Remarque : Ajoutez des clés étrangères à la table de données déjà ajoutée :🎜 - Syntaxe :alter table nom de la table ajouter une contrainte FK_ID clé étrangère (le nom de votre champ de clé étrangère) REFERENCES nom de la table étrangère (clé primaire de la table correspondante) Nom du champ)
;🎜🎜🎜Exemple : alter table tb_active ajouter une contrainte FK_ID clé étrangère (user_id) RÉFÉRENCES tb_user(id);
🎜🎜Moteur de base de données (moteur de stockage)🎜🎜Quand. Lorsque vous accédez à la base de données, qu'il s'agisse d'un accès manuel ou d'un accès par programme, vous ne lisez ni n'écrivez directement le fichier de base de données, mais accédez au fichier de base de données via le moteur de base de données. 🎜🎜Prenons l'exemple d'une base de données relationnelle. Envoyez une instruction SQL au moteur de base de données. Le moteur de base de données interprète l'instruction SQL, extrait les données dont vous avez besoin et vous les renvoie. Par conséquent, pour les visiteurs, le moteur de base de données est l’interprète des instructions SQL. 🎜MYISAM
n'est pas sécurisé sur le plan transactionnel, tandis que InnoDB
l'est sur le plan transactionnel type sécurisé ; 🎜🎜la granularité du verrouillage NYISAM
est un verrouillage au niveau de la table, tandis que InnoDB
prend en charge le verrouillage au niveau des lignes ; 🎜🎜MYISAM
prend en charge le texte intégral ; index, tandis que InnoDB
ne prend pas en charge l'index en texte intégral 🎜🎜MYISAM
est relativement simple, il est donc meilleur que InnoDB
en termes d'efficacité. Les petites applications peuvent envisager d'utiliser MYISAM
; 🎜🎜La table MYISAM
est enregistrée sous forme de fichier. L'utilisation du stockage MYISAM
dans le transfert de données multiplateforme permettra d'enregistrer un fichier. beaucoup de problèmes ;🎜🎜 (6) Les tables InnoDB
sont plus sécurisées que les tables MYISAM
Vous pouvez basculer les tables non transactionnelles vers les tables transactionnelles sans perdre de données ; scénarios : 🎜MYISAM
gère les tables non transactionnelles. Il offre un stockage et une récupération à grande vitesse, ainsi que des capacités de recherche en texte intégral si l'application doit effectuer un grand nombre de selectcode> requêtes, alors <code>MYISAM est un meilleur choix. <code>MYISAM
管理非事务表,它提供高速存储和检索,以及全文搜索能力,如果应用中需要执行大量的select
查询,那么MYISAM
是更好的选择。
InnoDB
用于事务处理应用程序,具有众多特性,包括ACID
事务支持。如果应用中需要执行大量的insert
或update
操作,则应该使用innodb
InnoDB
est utilisé pour les applications de traitement de transactions et possède de nombreuses fonctionnalités, notamment la prise en charge des transactions ACID
. Si votre application doit effectuer un grand nombre d'opérations insert
ou update
, vous devez utiliser innodb
, qui peut améliorer les performances des applications multi-utilisateurs. opérations concurrentes.
Actuellement, il existe 6 paradigmes dans les bases de données relationnelles : première forme normale {1NF}, deuxième forme normale {2NF}, troisième forme normale {3NF}, forme normale Bass-Codd {BCNF}, quatrième forme normale forme Forme normale {4NF}, cinquième forme normale {5NF, également connue sous le nom de forme normale parfaite}. Le paradigme qui répond aux exigences minimales est la première forme normale. Sur la base de la première forme normale, celle qui répond en outre aux exigences les plus standard est appelée la deuxième forme normale {2NF}, et les autres paradigmes emboîtent le pas. De manière générale, la base de données n'a besoin que de satisfaire la troisième forme normale (3NF). .
Apprentissage recommandé : Tutoriel vidéo 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!