Heim  >  Artikel  >  Datenbank  >  MySQL-Optimierung – Beispielcode-Analyse einfacher Syntax

MySQL-Optimierung – Beispielcode-Analyse einfacher Syntax

黄舟
黄舟Original
2017-03-09 13:28:401170Durchsuche

MySQL-Optimierung – Beispielcode-Analyse der einfachen Syntax

1. Standardeinschränkungen

    --mysql
    CREATE TABLE emp
    (
    id INT DEFAULT 12
    )
2 >

Die Auto-Inkrement-Spalte von MYSQL muss eine indizierte Spalte sein und der Startwert muss am Ende der Tabelle festgelegt werden


Legen Sie die Schrittgröße der Auto-Inkrement-Spalte fest , die in globale Ebenen unterteilt werden kann. Wenn es sich um die Sitzungsebene handelt, kehrt die Schrittgröße beim Erstellen einer neuen Sitzung auf die globale Ebene zurück. MySQL kann nicht auf die Schrittgröße auf Tabellenebene festgelegt werden! !
  --mysql
    -- 设置自增ID从N开始
    CREATE TABLE emp (
    ID INT  PRIMARY KEY AUTO_INCREMENT
    ) AUTO_INCREMENT = 100 ; --(设置自增ID从100开始)
Der MySQL-Server verwaltet zwei Arten von MySQL-Systemparametern (Systemvariablen): globale Variablen und Sitzungsvariablen.

Ihre Bedeutung und Unterschiede sind in ihren jeweiligen Namen dargestellt, und Änderungen an ihnen wirken sich nur auf diese Sitzungsebene aus.
Änderungen an ihnen wirken sich auf alle aus Neue Sitzungen (bestehende Sitzungen sind von der Änderung nicht betroffen) bis zum nächsten Neustart des MySQL-Servers.
Beachten Sie, dass sich die Änderung nicht auf Neustarts erstrecken kann. Wenn Sie den neuen Wert beim Neustart des MySQL-Servers verwenden möchten, können Sie ihn nur angeben, indem Sie Variablenoptionen in der Befehlszeile angeben oder die Optionsdatei ändern Die Änderung durch SET ist „Kann nicht über Neustarts hinweg erreicht werden“.
Jede Systemvariable hat einen Standardwert, der beim Kompilieren des MySQL-Systems festgelegt wird.
Um Systemvariablen anzugeben, können Sie im Allgemeinen Optionen in der Befehlszeile angeben, wenn der Server gestartet wird, oder über die Optionsdatei.
Natürlich können die meisten Systemvariablen über den Set-Befehl angegeben werden, wenn das System ausgeführt wird. Wert.
Zeigen Sie den aktuellen Standard-Startwert und Schrittwert der automatisch inkrementierenden Spalte des Systems an



F: Wenn es eine Tabelle mit einem automatisch inkrementierenden Primärschlüssel gibt, dessen Feld id ist, wenn es Nachdem Sie 10 Daten in die Tabelle eingefügt haben, löschen Sie die Daten mit den IDs 8, 9 und 10, starten Sie MySQL neu und fügen Sie nach

ein weiteres Datenelement ein. Wie lautet dann der ID-Wert dieses Datenelements? ? Ist es 8 oder 11?
SHOW GLOBAL VARIABLES LIKE 'auto_incre%'; -- 全局变量
Antwort: Wenn der Tabellentyp MyISAM ist, dann ist er 11. Wenn der Tabellentyp InnoDB ist, ist die ID 8.

Dies liegt daran, dass die beiden Arten von Speicher-Engines den maximalen ID-Datensatz auf unterschiedliche Weise speichern. Die MyISAM-Tabelle zeichnet die maximale ID in der Datendatei auf und der maximale ID-Wert des automatisch inkrementierten Primärschlüssels geht nicht verloren Neustart von MySQL;
InnoDB zeichnet den maximalen ID-Wert im Speicher auf, sodass nach dem Neustart von MySQL oder dem Ausführen einer OPTIMIZE-Operation für die Tabelle der maximale ID-Wert verloren geht.
Übrigens gibt es für MYSQL vier Möglichkeiten, den Auto-Inkrementwert der aktuellen Tabelle zu erhalten



@@identity stellt die letzte Aktualisierung der Tabelle mit der Identität dar Attribut (d. h. Auto-Inkrement-Spalte) Der Wert der entsprechenden Auto-Inkrement-Spalte beim Einfügen von Daten ist eine vom System definierte globale Variable.

Im Allgemeinen beginnen systemdefinierte globale Variablen mit @@ und benutzerdefinierte Variablen mit @.
(1) SELECT MAX(id) FROM person   针对特定表
(2) SELECT LAST_INSERT_ID()  函数   针对任何表
(3) SELECT @@identity    针对任何表
Voraussetzung für die Verwendung von @@identity ist, dass nach dem Ausführen des Einfügevorgangs die Verbindung beim Ausführen von select @@identity nicht geschlossen wird, da das Ergebnis sonst ein NULL-Wert ist.




Wenn Sie auf eine bestimmte Tabelle abzielen, wird die Verwendung dieser Methode empfohlen

Im Ergebnis gibt es im entsprechenden Tabellennamendatensatz ein Feld „Auto_increment“, das den Wert enthält der nächsten Auto-Inkrement-ID. Dies ist die maximale Auto-Inkrement-ID der aktuellen Tabelle.
(4)  SHOW TABLE STATUS LIKE 'person'


3. Ändern Sie die Tabelle name

5. Ändern Sie den Datentyp des Felds

 DESC emp
Ändern Sie den int-Typ des ID-Felds in bigint

ALTER TABLE emp RENAME emp2

6. Ändern Sie der Feldname

Erforderlich beim Ändern des Feldnamens in MYSQL. Fügen Sie den Datentyp des Felds hinzu, andernfalls wird ein Fehler gemeldet. CHANGE kann auch nur den Datentyp ändern, um den gleichen Effekt wie MODIFY zu erzielen besteht darin, den „neuen Feldnamen“ und den „alten Feldnamen“ in der SQL-Anweisung auf denselben Namen zu setzen. Ändern Sie nur den „Datentyp“, ändern Sie beispielsweise den Datentyp, ändern Sie im Beispiel gerade die ID-Spalte zum Bigint-Datentyp

ALTER TABLE emp2 MODIFY id BIGINT

7. Felder hinzufügen


8, Felder löschen

<p style="margin-bottom: 7px;">ALTER TABLE emp2 CHANGE id id BIGINT<br/></p>
MYSQL löscht Felder, ohne das Schlüsselwort COLUMN hinzuzufügen

ALTER TABLE emp2 ADD NAME NVARCHAR(200)  NULL

9. Fremdschlüsseleinschränkungen löschen

Wenn es sich um eine Fremdschlüsseleinschränkung handelt, ist es erforderlich, DROP FOREIGN KEY zu verwenden. Wenn es sich um eine Primärschlüsseleinschränkung handelt, müssen Sie DROP verwenden PRIMÄRSCHLÜSSEL
--Löschen Sie die Fremdschlüsseleinschränkung

 ALTER TABLE emp2 DROP NAME

--Löschen Sie die Primärschlüsseleinschränkung



10. Tabellen löschen
 ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept


Aber wenn Sie mehrere Tabellen gleichzeitig löschen oder vor dem Löschen ein Urteil fällen möchten

 ALTER TABLE emp2 DROP PRIMARY KEY pk_emp_dept

Zusätzlich:
DROP TABLE emp2


Egal innodb Engine oder MYISAM-Engine-Tabelle kann es nur eine Spalte für die automatische Inkrementierung geben, und die Spalte für die automatische Inkrementierung muss eine Indexspalte sein, unabhängig davon, ob es sich um einen Sekundärindex oder einen Primärschlüsselindex handelt

DROP TABLE IF EXISTS emp1 ,emp2

Das obige ist der detaillierte Inhalt vonMySQL-Optimierung – Beispielcode-Analyse einfacher Syntax. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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