Gründe und Lösungen, warum MySQL keine Fremdschlüssel erstellen kann
In diesem Artikel werden hauptsächlich die Gründe und Lösungen für die Unfähigkeit von MySQL vorgestellt, Fremdschlüssel zu erstellen. Anschließend erhalten Sie aktuelle Informationen über die Unfähigkeit von MySQL, Fremdschlüssel zu erstellen und die Eigenschaften von Fremdschlüsseln abzufragen.
Beim Verknüpfen zweier Tabellen können keine Fremdschlüssel erstellt werden. Aus diesem Blog können wir ersehen, dass das Problem in der Konsistenz der Optionen „Charset“ und „Collate“ in Punkt 6 auf Tabellenebene und Feldebene liegt. Der Zeichensatz und die Sortierung meiner beiden Tabellen sind inkonsistent und beide Tabellen führen die SQL-Anweisung aus:
alter table 表名 convert to character set utf8;
Löst das Problem perfekt
<; 🎜>ps: Werfen wir einen Blick auf die Unfähigkeit von MySQL, Fremdschlüssel zu erstellen und die Attribute von Fremdschlüsseln abzufragen
MyISAM- und InnoDB-Erklärung
InnoDB und MyISAM sind die beiden am häufigsten verwendeten Tabellentypen, wenn sie MySQL verwenden. Beide Tabellentypen haben je nach spezifischer Anwendung ihre eigenen Vor- und Nachteile. Der grundlegende Unterschied besteht darin, dass der MyISAM-Typ keine erweiterte Verarbeitung wie die Transaktionsverarbeitung unterstützt, während dies beim InnoDB-Typ der Fall ist. Die MyISAM-Typtabelle legt Wert auf Leistung und ihre Ausführungszeiten sind schneller als die des InnoDB-Typs, bietet jedoch keine Transaktionsunterstützung, während InnoDB Transaktionsunterstützung und erweiterte Datenbankfunktionen wie Fremdschlüssel bereitstellt.Im Folgenden sind einige Details und spezifische Implementierungsunterschiede aufgeführt:
◆1.InnoDB unterstützt keine Indizes vom Typ FULLTEXT. ◆2. InnoDB speichert nicht die spezifische Anzahl von Zeilen in der Tabelle. Das heißt, wenn InnoDB „select count(*)“ aus der Tabelle ausführt, muss es die gesamte Tabelle scannen, um zu berechnen, wie viele Zeilen vorhanden sind sind, aber MyISAM benötigt nur ein einfaches Auslesen der Anzahl der gespeicherten Zeilen. Beachten Sie, dass die Operationen der beiden Tabellen identisch sind, wenn die count(*)-Anweisung eine Where-Bedingung enthält. ◆3. Für Felder vom Typ AUTO_INCREMENT muss InnoDB einen Index nur mit diesem Feld enthalten, aber in der MyISAM-Tabelle kann ein gemeinsamer Index mit anderen Feldern eingerichtet werden. ◆4. Beim DELETE FROM table erstellt InnoDB die Tabelle nicht neu, sondern löscht sie Zeile für Zeile. ◆5. Die Operation LOAD TABLE FROM MASTER funktioniert nicht für InnoDB. Die Lösung besteht darin, zuerst die InnoDB-Tabelle in eine MyISAM-Tabelle zu ändern und sie dann nach dem Importieren der Daten in eine InnoDB-Tabelle zu ändern. Für die zusätzlich genutzte InnoDB gelten keine Tabellen mit Attributen (z. B. Fremdschlüssel). Darüber hinaus ist die Zeilensperre der InnoDB-Tabelle nicht absolut. Wenn MySQL beim Ausführen einer SQL-Anweisung den zu scannenden Bereich nicht ermitteln kann, sperrt die InnoDB-Tabelle auch die gesamte Tabelle, z. B. die Aktualisierungstabelle set num=1 where name like „%aaa%“ Der Hauptunterschied zwischen den beiden Typen besteht darin, dass Innodb Transaktionsverarbeitung, Fremdschlüssel und Sperren auf Zeilenebene unterstützt. MyISAM unterstützt es nicht. Daher wird MyISAM oft als nur für den Einsatz in kleinen Projekten geeignet angesehen. Aus der Sicht von Benutzern, die MySQL verwenden, sind Innodb und MyISAM beide die erste Wahl. Wenn die Datenbankplattform die Anforderungen erfüllen möchte: 99,9 % Stabilität, bequeme Skalierbarkeit und hohe Verfügbarkeit Auswahl.Die Gründe sind wie folgt:
1. Die meisten auf der Plattform geführten Projekte sind Projekte mit mehr Lesevorgängen und weniger Schreibvorgängen, und die Leseleistung von MyISAM ist höher viel besser als Innodb. 2. Der Index und die Daten von MyISAM werden getrennt und der Index wird komprimiert, was die Speichernutzung entsprechend erhöht. Es kann mehr Indizes laden und der Index und die Daten von Innodb sind eng miteinander verbunden. Es wird keine Komprimierung verwendet, was dazu führt, dass Innodb viel größer als MyISAM ist. 3. Es kommt häufig alle 1 oder 2 Monate vor, dass ein Anwendungsentwickler versehentlich eine Tabelle aktualisiert und den falschen Bereich schreibt, was dazu führt, dass die Tabelle nicht normal verwendet wird. Dies zeigt die Überlegenheit von MyISAM Nehmen Sie einfach die der Tabelle entsprechende Datei aus dem an diesem Tag kopierten komprimierten Paket, legen Sie sie in einem Datenbankverzeichnis ab, sichern Sie sie dann in SQL, importieren Sie sie zurück in die Hauptdatenbank und füllen Sie das entsprechende Binlog aus. Wenn es Innodb ist, kann es leider nicht so schnell sein. Sagen Sie mir nicht, dass ich Innodb regelmäßig zum Sichern mit dem Export-xxx.sql-Mechanismus auffordern soll, da die kleinste Datenbankinstanz ein Datenvolumen von Dutzenden Gigabyte hat . 4. Aus Sicht der Anwendungslogik sind Select Count (*) und Order By die häufigsten Vorgänge und machen mehr als 60 % der gesamten SQL-Anweisungen aus. Diese Art von Vorgang kann Innodb tatsächlich Viele Leute glauben, dass Innodb Sperren auf Zeilenebene verwendet, die nur dort gültig sind, wo der Primärschlüssel die gesamte Tabelle sperrt. 5. Es gibt oft viele Anwendungsabteilungen, die mich benötigen, um ihnen reguläre Daten bestimmter Tabellen zur Verfügung zu stellen. Das ist sehr praktisch. Senden Sie ihnen einfach die zu dieser Tabelle gehörenden frm.MYD- und MYI-Dateien und überlassen Sie es ihnen Sie können die Datenbank der entsprechenden Version einfach selbst starten, Innodb muss jedoch xxx.sql exportieren, da die Datei nur durch Weitergabe an andere aufgrund des Einflusses der Wörterbuchdatendatei nicht verwendet werden kann. 6. Im Vergleich zu MyISAM für den Einfüge-Schreibvorgang kann Innodb immer noch nicht die Schreibleistung von MyISAM erreichen. Wenn es sich um indexbasierte Aktualisierungsvorgänge handelt, ist MyISAM möglicherweise schlechter als Innodb, aber mit einer so hohen Leistung Gleichzeitiges Schreiben: Ob die Slave-Datenbank aufholen kann, ist ebenfalls ein Problem. Es ist besser, es durch eine Subdatenbank- und Subtabellenarchitektur mit mehreren Instanzen zu lösen. 7. Wenn MyISAM verwendet wird, kann die Zusammenführungs-Engine die Entwicklung der Anwendungsabteilung erheblich beschleunigen. Sie müssen nur einige ausgewählte Zählvorgänge (*) für diese Zusammenführungstabelle ausführen, was für große Anwendungen sehr gut geeignet ist Projekte mit einer Gesamtzahl von etwa Hunderten von Millionen Zeilen. Eine Geschäftstabelle eines bestimmten Typs (z. B. Protokolle, Umfragestatistiken).当然Innodb也不是绝对不用,用事务的项目就用Innodb的。另外,可能有人会说你MyISAM无法抗太多写操作,但是可以通过架构来弥补。
SELECT * FROM information_schema.key_column_usage WHERE table_name='表名' ; show create table 表名 ;
Das obige ist der detaillierte Inhalt vonGründe und Lösungen, warum MySQL keine Fremdschlüssel erstellen kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Fähigkeiten zur Verarbeitung von Big-Data-Strukturen: Chunking: Teilen Sie den Datensatz auf und verarbeiten Sie ihn in Blöcken, um den Speicherverbrauch zu reduzieren. Generator: Generieren Sie Datenelemente einzeln, ohne den gesamten Datensatz zu laden, geeignet für unbegrenzte Datensätze. Streaming: Lesen Sie Dateien oder fragen Sie Ergebnisse Zeile für Zeile ab, geeignet für große Dateien oder Remote-Daten. Externer Speicher: Speichern Sie die Daten bei sehr großen Datensätzen in einer Datenbank oder NoSQL.

Die MySQL-Abfrageleistung kann durch die Erstellung von Indizes optimiert werden, die die Suchzeit von linearer Komplexität auf logarithmische Komplexität reduzieren. Verwenden Sie PreparedStatements, um SQL-Injection zu verhindern und die Abfrageleistung zu verbessern. Begrenzen Sie die Abfrageergebnisse und reduzieren Sie die vom Server verarbeitete Datenmenge. Optimieren Sie Join-Abfragen, einschließlich der Verwendung geeigneter Join-Typen, der Erstellung von Indizes und der Berücksichtigung der Verwendung von Unterabfragen. Analysieren Sie Abfragen, um Engpässe zu identifizieren. Verwenden Sie Caching, um die Datenbanklast zu reduzieren. Optimieren Sie den PHP-Code, um den Overhead zu minimieren.

Das Sichern und Wiederherstellen einer MySQL-Datenbank in PHP kann durch Befolgen dieser Schritte erreicht werden: Sichern Sie die Datenbank: Verwenden Sie den Befehl mysqldump, um die Datenbank in eine SQL-Datei zu sichern. Datenbank wiederherstellen: Verwenden Sie den Befehl mysql, um die Datenbank aus SQL-Dateien wiederherzustellen.

Wie füge ich Daten in eine MySQL-Tabelle ein? Mit der Datenbank verbinden: Stellen Sie mit mysqli eine Verbindung zur Datenbank her. Bereiten Sie die SQL-Abfrage vor: Schreiben Sie eine INSERT-Anweisung, um die einzufügenden Spalten und Werte anzugeben. Abfrage ausführen: Verwenden Sie die Methode query(), um die Einfügungsabfrage auszuführen. Bei Erfolg wird eine Bestätigungsmeldung ausgegeben.

Eine der wichtigsten Änderungen, die in MySQL 8.4 (der neuesten LTS-Version von 2024) eingeführt wurden, besteht darin, dass das Plugin „MySQL Native Password“ nicht mehr standardmäßig aktiviert ist. Darüber hinaus entfernt MySQL 9.0 dieses Plugin vollständig. Diese Änderung betrifft PHP und andere Apps

So verwenden Sie gespeicherte MySQL-Prozeduren in PHP: Verwenden Sie PDO oder die MySQLi-Erweiterung, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Bereiten Sie die Anweisung zum Aufrufen der gespeicherten Prozedur vor. Führen Sie die gespeicherte Prozedur aus. Verarbeiten Sie die Ergebnismenge (wenn die gespeicherte Prozedur Ergebnisse zurückgibt). Schließen Sie die Datenbankverbindung.

Das Erstellen einer MySQL-Tabelle mit PHP erfordert die folgenden Schritte: Stellen Sie eine Verbindung zur Datenbank her. Erstellen Sie die Datenbank, falls sie nicht vorhanden ist. Wählen Sie eine Datenbank aus. Tabelle erstellen. Führen Sie die Abfrage aus. Schließen Sie die Verbindung.

Oracle-Datenbank und MySQL sind beide Datenbanken, die auf dem relationalen Modell basieren, aber Oracle ist in Bezug auf Kompatibilität, Skalierbarkeit, Datentypen und Sicherheit überlegen, während MySQL auf Geschwindigkeit und Flexibilität setzt und eher für kleine bis mittlere Datensätze geeignet ist. ① Oracle bietet eine breite Palette von Datentypen, ② bietet erweiterte Sicherheitsfunktionen, ③ ist für Anwendungen auf Unternehmensebene geeignet; ① MySQL unterstützt NoSQL-Datentypen, ② verfügt über weniger Sicherheitsmaßnahmen und ③ ist für kleine bis mittlere Anwendungen geeignet.
