Heim Datenbank MySQL-Tutorial Gründe und Lösungen, warum MySQL keine Fremdschlüssel erstellen kann

Gründe und Lösungen, warum MySQL keine Fremdschlüssel erstellen kann

Dec 08, 2017 pm 01:15 PM
mysql 原因 解决

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;
Nach dem Login kopieren

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=&#39;表名&#39; ;
show create table 表名 ;
Nach dem Login kopieren

MySQL学习之外键的图文详解

有关MySQL数据库中的外键约束详解

MySQL 的外键与参照完整性: Part 1_PHP教程

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen PHPs Fähigkeiten zur Verarbeitung von Big-Data-Strukturen May 08, 2024 am 10:24 AM

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.

Wie optimiert man die MySQL-Abfrageleistung in PHP? Wie optimiert man die MySQL-Abfrageleistung in PHP? Jun 03, 2024 pm 08:11 PM

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.

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Jun 03, 2024 pm 12:19 PM

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 mit PHP Daten in eine MySQL-Tabelle ein? Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Jun 02, 2024 pm 02:26 PM

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.

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

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

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Jun 02, 2024 pm 02:13 PM

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.

Wie erstelle ich eine MySQL-Tabelle mit PHP? Wie erstelle ich eine MySQL-Tabelle mit PHP? Jun 04, 2024 pm 01:57 PM

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.

Der Unterschied zwischen Oracle-Datenbank und MySQL Der Unterschied zwischen Oracle-Datenbank und MySQL May 10, 2024 am 01:54 AM

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.

See all articles