1. Parameter, die die Groß-/Kleinschreibung bestimmenIn MySQL entsprechen Datenbanken Verzeichnissen innerhalb des Datenverzeichnisses. Jede Tabelle in einer Datenbank entspricht mindestens einer Datei (je nach Speicher-Engine möglicherweise mehreren Dateien) im Datenbankverzeichnis. Daher bestimmt die Groß-/Kleinschreibung des Betriebssystems, ob die Datenbank groß-/kleinschreibungsempfindlich ist. Das Windows-System unterscheidet nicht zwischen Groß- und Kleinschreibung, während das Linux-System zwischen Groß- und Kleinschreibung unterscheidet. Standardmäßig wird bei Bibliothekstabellennamen in Windows-Systemen die Groß-/Kleinschreibung nicht beachtet, in Linux-Systemen jedoch schon. Bei Spaltennamen, Indexnamen, gespeicherten Prozeduren, Funktionen und Ereignisnamen wird in keinem Betriebssystem die Groß-/Kleinschreibung beachtet. Auch bei Spaltenaliasnamen wird die Groß-/Kleinschreibung nicht beachtet. Darüber hinaus stellt MySQL auch die Systemvariable lower_case_table_names bereit, die beeinflusst, wie Tabellen- und Datenbanknamen auf der Festplatte gespeichert und in MySQL verwendet werden. Auf Linux-Systemen ist dieser Parameter standardmäßig auf 0, auf Windows-Systemen auf 1 und auf macOS-Systemen auf 2 eingestellt. Schauen wir uns die spezifische Bedeutung jedes Wertes an:
Da der Parameter lower_case_table_names nur selten auf 2 gesetzt wird, werden im Folgenden nur die Fälle erläutert, in denen er auf 0 oder 1 gesetzt ist. Der Standardwert in Linux ist 0, was bedeutet, dass zwischen Groß- und Kleinschreibung unterschieden wird. Sehen wir uns die spezifische Leistung der Datenbank an, wenn lower_case_table_names 0 ist: # Parametereinstellungen anzeigenmysql> Variablen wie „lower_case_table_names“ anzeigen; +------------------------+----------+ | Variablenname | Wert | +------------------------+----------+ | Tabellennamen in Kleinbuchstaben | 0 | +------------------------+----------+ # Datenbank erstellen mysql> create database TestDb; Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> Datenbank testdb erstellen; Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | | Testdatenbank | |mysql | | Leistungsschema | |System| |testdb| +--------------------+ mysql> testdb verwenden; Datenbank geändert mysql> TestDb verwenden; Datenbank geändert mysql> verwende TESTDB; FEHLER 1049 (42000): Unbekannte Datenbank 'TESTDB' # Tabelle erstellenmysql> CREATE TABLE falls `test_tb` nicht existiert ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel automatisch inkrementieren', -> `stu_id` int(11) NOT NULL COMMENT 'Matrikelnummer', -> `stu_name` varchar(20) DEFAULT NULL COMMENT 'Studentenname', -> PRIMÄRSCHLÜSSEL (`increment_id`), -> EINZIGARTIGER SCHLÜSSEL `uk_stu_id` (`stu_id`) MIT BTREE ->) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test_tb'; Abfrage OK, 0 Zeilen betroffen (0,06 Sek.) mysql> CREATE TABLE, falls `Student_Info` nicht existiert ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel automatisch inkrementieren', -> `Stu_id` int(11) NICHT NULL KOMMENTAR 'Studenten-ID', -> `Stu_name` varchar(20) DEFAULT NULL COMMENT 'Studentenname', -> PRIMÄRSCHLÜSSEL (`increment_id`), -> EINZIGARTIGER SCHLÜSSEL `uk_stu_id` (`Stu_id`) MIT BTREE ->) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Student_Info'; Abfrage OK, 0 Zeilen betroffen (0,06 Sek.) mysql> Tabellen anzeigen; +------------------+ | Tabellen_in_testdb | +------------------+ | Studierendeninfo | | test_tb | +------------------+ # Abfragetabellemysql> wähle Stu_id,Stu_name aus test_tb limit 1; +--------+----------+ | Stu_ID | Stu_Name | +--------+----------+ | 1001 | von1 | +--------+----------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle stu_id, stu_name aus test_tb-Limit 1; +--------+----------+ | stu_id | stu_name | +--------+----------+ | 1001 | von1 | +--------+----------+ mysql> wähle stu_id,stu_name aus Test_tb; FEHLER 1146 (42S02): Tabelle 'testdb.Test_tb' existiert nicht mysql> wähle Stu_id,Stu_name aus test_tb als A, wobei A.Stu_id = 1001; +--------+----------+ | Stu_ID | Stu_Name | +--------+----------+ | 1001 | von1 | +--------+----------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle Stu_id,Stu_name aus test_tb als A, wobei a.Stu_id = 1001; FEHLER 1054 (42S22): Unbekannte Spalte „a.Stu_id“ in „Where-Klausel“ # Verzeichnisse und Dateien auf der Festplatte anzeigen [root@localhost ~]#:/var/lib/mysql# ls -lh insgesamt 616M drwxr-x--- 2 mysql mysql 20. Juni 3 14:25 TestDb ... drwxr-x--- 2 mysql mysql 144 3. Juni 14:40 testdb [root@localhost ~]#:/var/lib/mysql# cd testdb/ [root@localhost ~]#:/var/lib/mysql/testdb# ls -lh insgesamt 376K -rw-r----- 1 mysql mysql 8,6K 3. Juni 14:33 Student_Info.frm -rw-r----- 1 mysql mysql 112K 3. Juni 14:33 Student_Info.ibd -rw-r----- 1 mysql mysql 8,6K 3. Juni 14:40 TEST_TB.frm -rw-r----- 1 mysql mysql 112K 3. Juni 14:40 TEST_TB.ibd -rw-r----- 1 mysql mysql 67 3. Juni 14:25 db.opt -rw-r----- 1 mysql mysql 8,6 KB 3. Juni 14:30 test_tb.frm -rw-r----- 1 mysql mysql 112K 3. Juni 14:30 test_tb.ibd Durch die obigen Experimente haben wir festgestellt, dass, wenn der Parameter lower_case_table_names auf 0 gesetzt ist, der Tabellenname der MySQL-Bibliothek streng nach Groß- und Kleinschreibung unterscheidet und der Tabellenalias ebenfalls nach Groß- und Kleinschreibung unterscheidet, der Spaltenname jedoch nicht. Bei der Abfrage muss außerdem streng nach Groß- und Kleinschreibung geschrieben werden. Gleichzeitig haben wir festgestellt, dass es zulässig ist, Bibliotheks- und Tabellennamen mit demselben Namen, aber unterschiedlicher Groß- und Kleinschreibung zu erstellen (beispielsweise dürfen die Bibliotheken TestDb und testdb koexistieren). Haben Sie schon einmal über die möglichen Probleme nachgedacht, die auftreten können, wenn lower_case_table_names auf 0 gesetzt ist? Wenn beispielsweise ein Kollege eine Testtabelle erstellt und ein anderer Kollege diese beim Schreiben eines Programms als Testtabelle bezeichnet, wird eine Fehlermeldung angezeigt, die besagt, dass die Tabelle nicht existiert. Schlimmer noch: Die TestDb-Bibliothek und die testdb-Bibliothek können koexistieren, und die Testtabelle und die Testtabelle können koexistieren, was noch verwirrender ist. Um eine maximale Portabilität und Benutzerfreundlichkeit zu erreichen, können wir einheitliche Konventionen übernehmen, z. B. das Erstellen und Referenzieren von Bibliothekstabellen immer mit klein geschriebenen Namen. Sie können lower_case_table_names auch auf 1 setzen, um dieses Problem zu lösen. Schauen wir uns an, was passiert, wenn dieser Parameter 1 ist: # Löschen Sie die obige Testbibliothek, ändern Sie lower_case_table_names auf 1 und starten Sie die Datenbank mysql> neu. Zeigen Sie Variablen wie „lower_case_table_names“ an. +------------------------+----------+ | Variablenname | Wert | +------------------------+----------+ | Tabellennamen in Kleinbuchstaben | 1 | +------------------------+----------+ # Datenbank erstellen mysql> Datenbank TestDb erstellen; Abfrage OK, 1 Zeile betroffen (0,02 Sek.) mysql> Datenbank testdb erstellen; FEHLER 1007 (HY000): Datenbank „testdb“ kann nicht erstellt werden; Datenbank existiert mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | |mysql | | Leistungsschema | |System| |testdb| +--------------------+ 7 Zeilen im Satz (0,00 Sek.) mysql> testdb verwenden; Datenbank geändert mysql> verwende TESTDB; Datenbank geändert # Tabelle erstellenmysql> CREATE TABLE falls `test_tb` nicht existiert ( -> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Primärschlüssel automatisch inkrementieren', -> `stu_id` int(11) NOT NULL COMMENT 'Matrikelnummer', -> `stu_name` varchar(20) DEFAULT NULL COMMENT 'Studentenname', -> PRIMÄRSCHLÜSSEL (`increment_id`), -> EINZIGARTIGER SCHLÜSSEL `uk_stu_id` (`stu_id`) MIT BTREE ->) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test_tb'; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) mysql> Tabelle TEST_TB erstellen (ID int); FEHLER 1050 (42S01): Tabelle 'test_tb' existiert bereits mysql> Tabellen anzeigen; +------------------+ | Tabellen_in_testdb | +------------------+ | test_tb | +------------------+ # Abfragetabellemysql> wähle stu_id,stu_name aus test_tb limit 1; +--------+----------+ | stu_id | stu_name | +--------+----------+ | 1001 | von1 | +--------+----------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle stu_id, stu_name aus Test_Tb-Limit 1; +--------+----------+ | stu_id | stu_name | +--------+----------+ | 1001 | von1 | +--------+----------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle stu_id,stu_name aus test_tb als A, wobei a.stu_id = 1002; +--------+----------+ | stu_id | stu_name | +--------+----------+ | 1002 | dfsfd | +--------+----------+ 1 Zeile im Satz (0,00 Sek.) Wenn der Parameter lower_case_table_names auf 1 gesetzt ist, ist ersichtlich, dass die Datenbanktabellennamen einheitlich in Kleinbuchstaben gespeichert werden und die Abfrage nicht zwischen Groß- und Kleinschreibung unterscheidet und mit Groß- und Kleinbuchstaben durchsucht werden kann. Dies ist einfacher zu verwenden. Das Programm kann nach dieser Tabelle suchen, unabhängig davon, ob es einen Tabellennamen in Groß- oder Kleinbuchstaben verwendet. Es ist auch bequemer, Datenbanken zwischen verschiedenen Systemen zu migrieren. Aus diesem Grund wird empfohlen, den Parameter lower_case_table_names auf 1 zu setzen. 2. Hinweise zu ParameteränderungenDer Parameter lower_case_table_names ist eine globale Systemvariable und kann nicht dynamisch geändert werden. Wenn Sie ihn ändern möchten, müssen Sie ihn in die Konfigurationsdatei schreiben und die Datenbank neu starten, damit er wirksam wird. Wenn der Parameter Ihrer Datenbank anfangs auf 0 gesetzt ist und Sie ihn auf 1 ändern möchten, sollten Sie besonders vorsichtig sein, denn wenn in der ursprünglichen Instanz Bibliotheken und Tabellen in Großbuchstaben vorhanden sind, sind diese Bibliotheken und Tabellen nach dem Neustart nach der Änderung auf 1 nicht mehr zugänglich. Wenn Sie den Parameter lower_case_table_names von 0 auf 1 ändern müssen, können Sie ihn wie folgt ändern: Überprüfen Sie zunächst, ob die Instanz Bibliotheken und Tabellen in Großbuchstaben enthält. Wenn nicht, können Sie die Konfigurationsdatei direkt ändern und neu starten. Wenn Bibliothekstabellen in Großbuchstaben vorhanden sind, müssen Sie diese in Kleinbuchstaben umwandeln, bevor Sie die Konfigurationsdatei ändern und neu starten können. Wenn in der Instanz Datenbanktabellen vorhanden sind, die Großbuchstaben enthalten, können Sie diese mit den folgenden beiden Methoden in Kleinbuchstaben ändern: 1. Sichern Sie die relevante Datenbank über mysqldump, löschen Sie die entsprechende Datenbank nach Abschluss der Sicherung, ändern Sie dann die Konfigurationsdatei und starten Sie neu. Importieren Sie abschließend die Sicherungsdatei erneut. Diese Methode ist zeitaufwändig und wird selten angewendet. 2. Ändern Sie es durch die Umbenennungsanweisung. Einzelheiten finden Sie in der folgenden SQL: # Benennen Sie die Großbuchstabentabelle in die Kleinbuchstabentabelle um Tabelle TEST in Test umbenennen; # Wenn eine Datenbank mit Großbuchstaben vorhanden ist, müssen Sie zuerst eine Datenbank mit Kleinbuchstaben erstellen und dann die Tabelle in der Datenbank mit Großbuchstaben in die Datenbank mit Kleinbuchstaben übertragen. Benennen Sie die Tabelle TESTDB.test_tb in testdb.test_tb um. # Teilen Sie zwei SQL-Anweisungen, die verwendet werden können # Abfrage der Tabelle mit Großbuchstaben im Beispiel SELECT TABLE_SCHEMA, TABELLE_NAME AUS information_schema.`TABELLEN` WO TABLE_SCHEMA NICHT IN ('information_schema', 'sys', 'mysql', 'performance_schema') UND Tabellentyp = 'BASISTABELLE' UND TABELLE_NAME REGEXP BINARY '[AZ]' # Splice SQL, um die Tabelle in der Großbuchstabendatenbank in die Kleinbuchstabendatenbank zu übertragen. SELECT CONCAT( 'Tabelle TESTDB umbenennen.', TABLE_NAME, ' in testdb.', TABLE_NAME, ';' ) AUS information_schema.TABELLEN WO TABLE_SCHEMA = "TESTDB"; Zusammenfassen:In diesem Artikel werden hauptsächlich die Groß- und Kleinschreibungsprobleme von MySQL-Datenbanktabellen behandelt. Ich glaube, dass Sie nach dem Lesen dieses Artikels verstehen sollten, warum es empfohlen wird, für Datenbanktabellennamen Kleinbuchstaben zu verwenden. Wenn Sie den Parameter lower_case_table_names ändern möchten, können Sie auch diesen Artikel zu Rate ziehen. Oben finden Sie Einzelheiten zur Auswahl von Groß- und Kleinschreibung bei MySQL-Bibliotheks- und Tabellennamen. Weitere Informationen zu Groß- und Kleinschreibung bei MySQL-Bibliotheks- und Tabellennamen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Responsives CSS-Webseitenlayout zur automatischen Anpassung an PC-/Pad-/Telefongeräte
In diesem Artikel finden Sie das Tutorial zur man...
Sie möchten wissen, wie viele Tage es bis zu eine...
Wir können ein Hintergrundbild für die Zelle fest...
Der Ogg-Prozess einer vor einiger Zeit erstellten...
Das Beste, was Sie für Ihre Daten und Computer tu...
Vorwort Als MySQL den Standarddatenbankpfad änder...
Ich habe gehört, dass es eine Interviewfrage gibt...
Native js realisiert den Karusselleffekt (nahtlos...
brauchen Vor Kurzem mussten wir die Node-Onlinedi...
Inhaltsverzeichnis Da Vuex einen einzelnen Zustan...
In diesem Artikelbeispiel wird der spezifische Co...
Kaufzertifikat Sie können es beim Cloud Shield Ce...
MySQL ist eine Datenbank, die mir sehr gefällt. H...
Inhaltsverzeichnis Vorwort Was sind Metadaten? Ad...
In diesem Artikel wird beschrieben, wie Sie die a...