Als ich kürzlich die Details der Datenlebenszyklusverwaltung klärte, stieß ich auf ein kleines Problem. Die Benennungsstrategie für Primärschlüssel von MySQL scheint jede Form der benutzerdefinierten Benennung zu ignorieren. Dies bedeutet, dass der Primärschlüssel, wenn Sie ihn als idx_pk_id benennen, in MySQL als PRIMARY behandelt wird. Selbstverständlich können wir auf dieser Basis noch einige Erweiterungen und Ergänzungen vornehmen. Lassen Sie uns zunächst das Problem reproduzieren. Wir verbinden uns mit der Datenbank test und erstellen die Tabelle test_data2. mysql> Test verwenden mysql> Tabelle test_data2 erstellen (ID int, Name varchar(30)); Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) Erstellen Sie als Nächstes einen Primärschlüssel und nennen Sie ihn idx_pk_id. Aus der Ausführungssituation heraus verarbeitet MySQL ihn normal. mysql> Tabelle ändern test_data2 Primärschlüssel hinzufügen idx_pk_id(id); Abfrage OK, 0 Zeilen betroffen (0,02 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 Zum weiteren Vergleich fügen wir einen eindeutigen Index (Sekundärindex) hinzu, um den Unterschied anzuzeigen. mysql> Tabelle ändern, test_data2, eindeutigen Schlüssel hinzufügen, idx_uniq_name(Name); Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 Methode 1 zur Benennung von Primärschlüsseln anzeigen: Verwenden Sie den Befehl „show indexes“Um MySQL-Indexinformationen anzuzeigen, verwenden Sie „show indexes from test_data2“. mysql> Indizes von test_data2\G anzeigen *************************** 1. Reihe *************************** Tabelle: test_data2 Nicht eindeutig: 0 Schlüsselname: PRIMARY Seq_in_index: 1 Spaltenname: id Sortierung: A Kardinalität: 0 Unterteil: NULL Gepackt: NULL Null: Indextyp: BTREE Kommentar: Index_Kommentar: *************************** 2. Reihe *************************** Tabelle: test_data2 Nicht eindeutig: 0 Schlüsselname: idx_uniq_name Seq_in_index: 1 Spaltenname: Name Sortierung: A Kardinalität: 0 Unterteil: NULL Gepackt: NULL Null: JA Indextyp: BTREE Kommentar: Index_Kommentar: 2 Zeilen im Satz (0,00 Sek.) Methode 2 zur Benennung von Primärschlüsseln anzeigen: Datenwörterbuch „information_schema.statistics“ verwendenDie Befehlsmethode ist nicht allgemein genug. Wir können das Datenwörterbuch information_schema.statistics verwenden, um Daten zu extrahieren. mysql> wähle * aus information_schema.statistics, wobei table_schema='test' und table_name='test_data2' limit 20 \G *************************** 1. Reihe *************************** TABLE_CATALOG: def TABLE_SCHEMA: Test TABELLENAME: test_data2 NICHT_EINDEUTIG: 0 INDEX_SCHEMA: Test INDEX_NAME: PRIMARY SEQ_IN_INDEX: 1 COLUMN_NAME: ID KOLLATION: A KARDINALITÄT: 0 SUB_PART: NULL VERPACKT: NULL NULL-Werte zulässig: INDEX_TYPE: BTREE KOMMENTAR: INDEX_COMMENT: *************************** 2. Reihe *************************** TABLE_CATALOG: def TABLE_SCHEMA: Test TABELLENAME: test_data2 NICHT_EINDEUTIG: 0 INDEX_SCHEMA: Test INDEX_NAME: idx_uniq_name SEQ_IN_INDEX: 1 COLUMN_NAME: Name KOLLATION: A KARDINALITÄT: 0 SUB_PART: NULL VERPACKT: NULL NULL-Werte zulässig: JA INDEX_TYPE: BTREE KOMMENTAR: INDEX_COMMENT: 2 Zeilen im Satz (0,00 Sek.) Methode 3 zum Anzeigen der Benennung von Primärschlüsseln: Verwenden Sie den Befehl „show create table“Wenn Sie die Anweisung zur Tabellenerstellung anzeigen, werden Sie feststellen, dass der Primärschlüsselname herausgefiltert wurde. mysql> anzeigen, erstellen, Tabelle test_data2\G *************************** 1. Reihe *************************** Tabelle: test_data2 Tabelle erstellen: CREATE TABLE `test_data2` ( `id` int(11) NICHT NULL, `name` varchar(30) DEFAULT NULL, Primärschlüssel (`id`), EINZIGARTIGER SCHLÜSSEL `idx_uniq_name` (`name`) ) ENGINE=InnoDB STANDARD-CHARSET=utf8 1 Zeile im Satz (0,00 Sek.) Einige Studenten fragen sich vielleicht, ob die Verarbeitungsmethoden unterschiedlich sind, weil die Anweisungen „create“ und „alter“ separat ausgeführt werden. Wir können dies in einem Schritt tun und den Namen des Primärschlüssels in der Anweisung „create“ deklarieren. CREATE TABLE `test_data3` ( `id` int(11) NICHT NULL, `name` varchar(30) DEFAULT NULL, PRIMÄRSCHLÜSSEL idx_pk_id(`id`), EINZIGARTIGER SCHLÜSSEL `idx_uniq_name` (`name`) )ENGINE=InnoDB STANDARD-CHARSET=utf8; Wenn Sie zu diesem Zeitpunkt die Anweisung zur Tabellenerstellung überprüfen, werden Sie feststellen, dass das Ergebnis dasselbe wie oben ist und der Primärschlüsselname PRIMARY lautet. mysql> anzeigen, erstellen, Tabelle test_data3\G *************************** 1. Reihe *************************** Tabelle: test_data3 Tabelle erstellen: CREATE TABLE `test_data3` ( `id` int(11) NICHT NULL, `name` varchar(30) DEFAULT NULL, Primärschlüssel (`id`), EINZIGARTIGER SCHLÜSSEL `idx_uniq_name` (`name`) ) ENGINE=InnoDB STANDARD-CHARSET=utf8 1 Zeile im Satz (0,00 Sek.) Methode 4 zur Benennung von Primärschlüsseln anzeigen: Benennung von Einschränkungen anzeigenNatürlich gibt es noch viele andere Möglichkeiten zur Überprüfung. Wenn wir beispielsweise Einschränkungen verwenden, um den Primärschlüssel zu benennen, lautet der Primärschlüsselname, den wir erhalten, PRIMARY. Tabelle erstellen, wenn nicht vorhanden `default_test` ( `default_test`.`id` SMALLINT NICHT NULL AUTO_INCREMENT, `default_test`.`name` LONGTEXT NICHT NULL, EINSCHRÄNKUNG `pk_id` PRIMÄRSCHLÜSSEL (`id`) ); Methode 5 zur Benennung von Primärschlüsseln anzeigen: DML-Fehlerinformationen verwendenNatürlich gibt es noch viele andere Möglichkeiten zur Überprüfung, beispielsweise die Verwendung von DML-Anweisungen. mysql> in test_data2 Werte (1, 'aa') einfügen; Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> in test_data2 Werte (1, 'aa') einfügen; FEHLER 1062 (23000): Doppelter Eintrag „1“ für Schlüssel „PRIMARY“ Die oben genannten Methoden können uns ein tieferes Verständnis dieses Details verschaffen, und wir können natürlich noch tiefer gehen. Primärschlüssel-Benennungsmethode 6 anzeigen: offizielle DokumentationDiese Information steht tatsächlich in der offiziellen Dokumentation, sie ist aber nicht sehr offensichtlich. Die Beschreibung des Primärschlüssels lautet wie folgt. Es gibt eine spezielle Anweisung, dass der Primärschlüssel PRIMARY heißt.
Methode 7 zur Benennung von Primärschlüsseln anzeigen: QuellcodeDer Name des Primärschlüssels ist in sql_table.cc definiert. const char *primary_key_name="PRIMARY"; Wenn wir diesem Pfad folgen, können wir einige logische Situationen bei der Implementierung verschiedener Ebenen erkennen. Zusammenfassung:Durch diese Methoden haben wir ein allgemeines Verständnis für die Benennung von Primärschlüsseln. Warum heißt PRIMARY so? Ich habe ein paar Punkte zusammengefasst: 1) Eine einheitliche Benennung kann als Standard verstanden werden 2) Er kann von einem eindeutigen Index unterschieden werden. Wenn beispielsweise ein eindeutiger Index nicht leer ist, sind die Eigenschaften sehr ähnlich und können durch Benennung des Primärschlüssels unterschieden werden. Sie sind auch in einigen Funktionen und Indexverwendungsszenarien leicht zu unterscheiden. 3) Der Primärschlüssel ist die erste Position eines Tabellenindex. Eine einheitliche Benennung kann logische Urteile klarer machen, einschließlich Szenarien, in denen Felder zu Primärschlüsseln usw. aktualisiert werden. 4) Es wird auch die Verarbeitung durch den Optimierer erleichtern und die Priorität des MySQL-Optimierers bei der Bestimmung des zu verwendenden Indexes erhöhen. Oben finden Sie Einzelheiten zur MySQL-Primärschlüssel-Benennungsstrategie. Weitere Informationen zur MySQL-Primärschlüssel-Benennungsstrategie finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Reflexion und Proxy in Front-End-JavaScript
>>: CSS-Implementierungscode für verzerrte Schatten
Inhaltsverzeichnis Überblick 1. useState 1.1 Drei...
Vorwort: Ich habe vor Kurzem begonnen, den Aufbau...
So verwenden Sie den MySQL-Autorisierungsbefehl „...
Im aktuellen Projekt müssen wir einen Effekt zum ...
Ich habe „Patterns for Sign Up & Ramp Up“ vor ...
Designabsichten Beim Entwickeln einer Seite müsse...
In letzter Zeit möchte ich regelmäßig wichtige in...
Vorwort Dieser Artikel fasst hauptsächlich einige...
Ich wurde in letzter Zeit häufig zu einer offensi...
Das <marquee>-Tag ist ein Tag, das paarweis...
Im vorherigen Blog hat Xiao Xiong die Methoden ve...
Hier einige Tipps von Ausbildungsstätten und mein...
Welche Rolle spielt http im Knoten? Die Aufgabe d...
Wenn Sie den Stil „table-layer:fixed“ für eine Ta...
In diesem Artikelbeispiel wird der spezifische Co...