Auswahl der Groß-/Kleinschreibung von MySQL-Tabellennamen

Auswahl der Groß-/Kleinschreibung von MySQL-Tabellennamen

1. Parameter, die die Groß-/Kleinschreibung bestimmen

In 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:

Wert

Bedeutung

0

Die Bibliotheks- und Tabellennamen werden auf der Festplatte in der in der Erstellungsanweisung angegebenen Groß- und Kleinschreibung gespeichert, und beim Namensvergleich wird die Groß- und Kleinschreibung beachtet.

1

Bibliotheks- und Tabellennamen werden auf der Festplatte in Kleinbuchstaben gespeichert, und beim Namensvergleich wird die Groß-/Kleinschreibung nicht beachtet. MySQL konvertiert alle Tabellennamen beim Speichern und Suchen in Kleinbuchstaben. Dieses Verhalten gilt auch für Datenbanknamen und Tabellenaliase.

2

Datenbank- und Tabellennamen werden auf der Festplatte in der in der Create-Anweisung angegebenen Groß- und Kleinschreibung gespeichert, MySQL konvertiert sie jedoch bei der Suche in Kleinbuchstaben. Bei Namensvergleichen wird nicht zwischen Groß- und Kleinschreibung unterschieden.

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änderungen

Der 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:
  • Hinweise zur Groß-/Kleinschreibung bei MySQL
  • Bei MySQL-Zeichentypen wird die Groß-/Kleinschreibung beachtet.
  • So stellen Sie MySQL so ein, dass die Groß-/Kleinschreibung nicht beachtet wird
  • Analyse von Problemen, die durch die Groß-/Kleinschreibung von MySQL verursacht werden
  • So lösen Sie das Problem der Groß-/Kleinschreibung bei MySQL-Abfragen
  • Problem mit der Groß-/Kleinschreibung in der MySQL-Datenbank
  • Detaillierte Erläuterung der Konfigurationsmethode „Groß-/Kleinschreibung ignorieren“ für MySQL-Tabellennamen
  • Linux-System MySQL Passwort vergessen, Passwort zurücksetzen, Groß-/Kleinschreibung von Tabellen- und Spaltennamen ignorieren
  • So unterscheiden Sie Groß- und Kleinbuchstaben in Zeichenfolgen bei MySQL-Abfragen
  • Lösung für MySql-Abfragen ohne Berücksichtigung der Groß-/Kleinschreibung (zwei)

<<:  Responsives CSS-Webseitenlayout zur automatischen Anpassung an PC-/Pad-/Telefongeräte

>>:  Problem bei der Schriftartauswahl für Copyright-Symbole in HTML (wie man Copyright-Symbole schöner macht)

Artikel empfehlen

Tutorial zur manuellen Installation von MySQL 8.0.13

In diesem Artikel finden Sie das Tutorial zur man...

So zählen Sie das Datum mit Bash herunter

Sie möchten wissen, wie viele Tage es bis zu eine...

Tutorial zu HTML-Tabellen-Tags (27): Zell-Hintergrundbild-Attribut BACKGROUND

Wir können ein Hintergrundbild für die Zelle fest...

Verwenden von Zabbix zum Überwachen des Ogg-Prozesses (Linux-Plattform)

Der Ogg-Prozess einer vor einiger Zeit erstellten...

Führen Sie die Schritte zum Einrichten automatischer Updates in CentOS 8 aus

Das Beste, was Sie für Ihre Daten und Computer tu...

So fügen Sie schnell 10 Millionen Datensätze in MySQL ein

Ich habe gehört, dass es eine Interviewfrage gibt...

Natives JS zum Erzielen eines nahtlosen Karusselleffekts

Native js realisiert den Karusselleffekt (nahtlos...

Verwendung des Vuex-Namespace

Inhaltsverzeichnis Da Vuex einen einzelnen Zustan...

Vue realisiert den Gleitkreuzeffekt des Balles

In diesem Artikelbeispiel wird der spezifische Co...

So aktualisieren Sie https unter Nginx

Kaufzertifikat Sie können es beim Cloud Shield Ce...

Beispielanalyse zur Metadatenextraktion von MySQL und Oracle

Inhaltsverzeichnis Vorwort Was sind Metadaten? Ad...