Dieser Artikel vermittelt Ihnen relevantes Wissen über die MySQL-Datenbank. Er organisiert hauptsächlich einige grundlegende Wissenspunkte der Datenbank, einschließlich Indizierung, Syntaxreihenfolge, Ausführungsreihenfolge, gespeicherte Prozeduren und andere verwandte Themen.
Empfohlenes Lernen: MySQL-Tutorial
Atomizität
)Atomicity
)Consistency
)Isolation
)Durability
)SQL
标准定义了四种隔离性:(下面隔离性是由低到高,并发性由高到低)
select
Alle erforderlichen Vorgänge in der gesamten Transaktion müssen entweder erfolgreich übermittelt werden oder alle fehlschlagen und zurückgesetzt werden. Konsistenz
)Isolation
) Isolation erfordert, dass eine Transaktion die Daten in der Datenbank ändert und nicht Ändern Sie es in Zukunft. Es ist für andere Transaktionen nicht sichtbar, bis der Commit abgeschlossen ist. (Das heißt, Transaktionen müssen seriell ausgeführt werden)
Dauerhaftigkeit (Durability
)
Haltbarkeit bedeutet, dass die Änderungen an den Daten in der Datenbank dauerhaft sind, sobald eine Transaktion übermittelt wird, auch wenn dies der Fall ist Wenn das Datenbanksystem auf einen Fehler stößt, geht der Vorgang zum Festschreiben der Transaktion nicht verloren.
Der SQL
-Standard definiert vier Arten der Isolation: (Die folgende Isolation reicht von niedrig nach hoch und die Parallelität von hoch nach niedrig.)
Nicht festgeschriebener Lesevorgang.
Die niedrigste Isolationsstufe, die es anderen Transaktionen ermöglicht, nicht festgeschriebene Daten zu sehen, was zu fehlerhaften Lesevorgängen führt. 🎜🎜Zum Lesen eingereicht. 🎜 Da die Datenbank lese- und schreibgetrennt ist, wird die Lesesperre beim Lesen der Transaktion erworben, sie wird jedoch sofort nach dem Aufheben der Lesesperre freigegeben. Beim erneuten Lesen können die Daten geändert werden Die Art und Weise, wie die Daten vorher und nachher gelesen werden, ist unterschiedlich, was zu nicht wiederholbaren Lesevorgängen führt. (Lesesperren müssen nach dem Festschreiben der Transaktion nicht freigegeben werden, während Schreibsperren nach dem Festschreiben der Transaktion freigegeben werden müssen.) 🎜🎜Wiederholbares Lesen. 🎜 Alle vonselect
erhaltenen Daten können nicht geändert werden, um ein inkonsistentes Lesen vor und nach einer Transaktion zu vermeiden. Es gibt jedoch keine Möglichkeit, das Phantomlesen zu steuern, da andere Transaktionen die ausgewählten Daten derzeit nicht ändern, aber Daten hinzufügen können 🎜🎜Serialisierbar. 🎜 Alle Transaktionen werden nacheinander ausgeführt, um Phantom-Lesevorgänge zu vermeiden. Bei Datenbanken, die eine auf Sperren basierende Parallelitätskontrolle implementieren, muss bei der Ausführung von Bereichsabfragen eine Bereichssperre eingerichtet werden Wenn eine Transaktion erkannt wird, die gegen serielle Vorgänge verstößt, muss die Transaktion zurückgesetzt werden. 🎜🎜🎜Zusammenfassung: Die vier Ebenen werden schrittweise verbessert und jede Ebene löst das Problem. Je höher die Transaktionsebene, desto schlechter ist die Leistung.脏 脏 🎜🎜 🎜🎜 🎜🎜 🎜🎜 🎜🎜 🎜🎜 🎜🎜 🎜🎜 🎜 🎜 🎜 🎜 🎜 🎜 eingereicht werden (Community lesen) ist möglicherweise nicht möglich (serialisierbar) unmöglich unmöglich🎜🎜🎜Zusammenfassung: Nicht festgeschriebene Lesevorgänge führen zu fehlerhaften Lesevorgängen -> Festgeschriebene Lesevorgänge lösen fehlerhafte Lesevorgänge, verursachen jedoch nicht wiederholbare Lesevorgänge -> Wiederholbare Lesevorgänge lösen das Problem des Lesens der Ergebnisse vor und nach der Inkonsistenz, verursachen jedoch Phantom-Lesevorgänge (nicht vorher, sondern jetzt) -> Die Serialisierbarkeit löst Phantom-Lesevorgänge, fügt jedoch viele Bereichssperren hinzu, die zu Zeitüberschreitungen bei Sperren führen können
2.4 Jede Engine unterstützt Indizes
Vergleich der Engine-Typen:
Index MyISAM-Index InnoDB-Index Speicherindex B-Tree. Index Unterstützung Unterstützt H Ash-Index Nicht unterstützt Hash-Index Nicht unterstützt Unterstützt R-Tree-Index Unterstützung Nicht unterstützt Volltextindex Nicht unterstützt. Nicht unterstützt. Nicht unterstützt. Daher kann die Höhe des B-Baums durch die Verwendung einer Mehrweg-Baumstruktur durch verschiedene Operationen am B-Baum niedrig gehalten werden.
Zum Beispiel:Gruppieren nach sollte zusammen mit Aggregatfunktionen verwendet werden,
von, an, beitreten, wo, gruppieren nach, Haben, Auswählen, Unterscheiden, Vereinigen, Sortieren nach
select a.Customer,sum(a.OrderPrice) from orders a where a.Customer=’Bush’ or a.Customer = ‘Adams’ group by a.Customer;Implementieren einer Abfrage mit mehreren Tabellen (Inner Join)
select u.uname,a.addr from lm_user u inner join lm_addr a on u.uid = a.uid;Verwenden von
5. Gespeicherte ProzedurAuswählen von wo kann auch verwendet werden. Implementieren Sie <br><pre class="brush:php;toolbar:false">select u.uname,a.addr from lm_user u, lm_addr a where u.uid = a.uid;</pre>
delimiter $$ create procedure procedure_bill() comment '查询所有销售情况' begin select billid, tx_time, amt from lm_bill; end $$ delimiter ;
Rufen Sie die gespeicherte Prozedur auf
call procedure_bill();
Sehen Sie sich die gespeicherte Prozedur an
show procedure status like 'procedure_bill';
6. Stellen Sie eine Viele-zu-Viele-Datentabellenbeziehung her select from where
同样可以实现
/**学生表*/ 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) )
/*添加外键约束*/ 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);
调用存储过程
rrreee查看存储过程
rrreee在数据库中,如果两个表的之间的关系为多对多的关系,如:“学生表和课程表”,一个学生可以选多门课,一门课也可以被多个学生选;根据数据库的设计原则,应当形成第三张关联表。
步骤1:创建三张数据表Student ,Course,Stu_Cour
第二步:为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
rrreee
Schritt 2: Fügen Sie Fremdschlüssel zur Stu_Cour-bezogenen Tabelle hinzu🎜rrreee🎜Schließen Sie die Erstellung ab! 🎜🎜🎜Hinweis: Fügen Sie Fremdschlüssel zur bereits hinzugefügten Datentabelle hinzu:🎜 - Syntax:Tabelle ändern, Tabellenname hinzufügen, Einschränkung hinzufügen FK_ID Fremdschlüssel (Ihr Fremdschlüsselfeldname) REFERENZEN Fremdtabellenname (Primärschlüssel der entsprechenden Tabelle) Feldname)
;🎜🎜🎜Beispiel: Alter Table tb_active Add Constraint FK_ID Foreign Key(user_id) REFERENCES tb_user(id);
🎜🎜Sieben. Datenbank-Engine (Speicher-Engine)🎜🎜Wann Wenn Sie auf die Datenbank zugreifen, unabhängig davon, ob es sich um einen manuellen Zugriff oder einen Programmzugriff handelt, lesen und schreiben Sie die Datenbankdatei nicht direkt, sondern greifen über die Datenbank-Engine auf die Datenbankdatei zu. 🎜🎜Nehmen Sie eine relationale Datenbank als Beispiel. Senden Sie eine SQL-Anweisung an die Datenbank-Engine. Die Datenbank-Engine interpretiert die SQL-Anweisung, extrahiert die benötigten Daten und gibt sie an Sie zurück. Für Besucher ist die Datenbank-Engine daher der Interpreter von SQL-Anweisungen. 🎜MYISAM
ist nicht transaktional sicher, während InnoDB
transaktional ist sicherer Typ; 🎜🎜NYISAM
Sperrgranularität ist Sperren auf Tabellenebene, während InnoDB
Sperren auf Zeilenebene unterstützt; 🎜🎜MYISAM
unterstützt Volltext index, während InnoDB
keine Volltextindizierung unterstützt🎜🎜MYISAM
ist relativ einfach und daher hinsichtlich der Effizienz besser als InnoDB
. Kleine Anwendungen können die Verwendung von MYISAM
in Betracht ziehen; 🎜🎜MYISAM
-Tabelle wird als Datei gespeichert. Durch die Verwendung von MYISAM
für die plattformübergreifende Datenübertragung wird viel gespart 🎜🎜 (6) InnoDB
-Tabellen sind sicherer als MYISAM
-Tabellen. Sie können nicht-transaktionale Tabellen in transaktionale Tabellen umwandeln, ohne Daten zu verlieren : 🎜MYISAM
verwaltet nicht-transaktionale Tabellen. Es bietet Hochgeschwindigkeitsspeicherung und -abruf sowie Volltextsuchfunktionen, wenn die Anwendung eine große Anzahl von Auswahlvorgängen durchführen muss. code>-Abfragen, dann ist <code>MYISAM die bessere Wahl. <code>MYISAM
管理非事务表,它提供高速存储和检索,以及全文搜索能力,如果应用中需要执行大量的select
查询,那么MYISAM
是更好的选择。
InnoDB
用于事务处理应用程序,具有众多特性,包括ACID
事务支持。如果应用中需要执行大量的insert
或update
操作,则应该使用innodb
InnoDB
wird für Transaktionsverarbeitungsanwendungen verwendet und verfügt über viele Funktionen, einschließlich ACID
-Transaktionsunterstützung. Wenn Ihre Anwendung eine große Anzahl von insert
- oder update
-Vorgängen ausführen muss, sollten Sie innodb
verwenden, was die Leistung von Mehrbenutzern verbessern kann gleichzeitige Operationen.
Derzeit gibt es 6 Paradigmen in relationalen Datenbanken: erste Normalform {1NF}, zweite Normalform {2NF}, dritte Normalform {3NF}, Bass-Codd-Normalform {BCNF}, vierte Normalform Form Normalform {4NF}, fünfte Normalform {5NF, auch als perfekte Normalform bekannt}. Das Paradigma, das die Mindestanforderungen erfüllt, ist die erste Normalform. Basierend auf der ersten Normalform wird diejenige, die mehr Standardanforderungen erfüllt, als zweite Normalform {2NF} bezeichnet, und die anderen Paradigmen folgen diesem Beispiel. Im Allgemeinen muss die Datenbank nur die dritte Normalform (3NF) erfüllen. .
Das obige ist der detaillierte Inhalt vonGrundwissenspunktreserve für MySQL-Datenbanken (organisierte Zusammenfassung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!