2015-05-22 7 views
7

Ich habe gerade festgestellt, dass es Zeilen in den SQL-Dateien (.sql) gibt, die mit /*! beginnen und keine Kommentare sind und sie ausgeführt werden, um einige Aufgaben auf Systemebene zu erledigen.Mysql Schrägstrich Sternknall

Ich möchte wissen, was die Zeilen beginnend mit /*! wirklich bedeuten für MySQL und warum diese Nummer neben den Symbolen (4000 in meinem Beispiel) verwenden. Hier

ist das Beispiel:

/*!40000 ALTER TABLE `my_table` DISABLE KEYS */; 
INSERT INTO my_table VALUES ('value1','value2'); 
/*!40000 ALTER TABLE `my_table` ENABLE KEYS */; 

Edit: Ich glaube nicht, diese Frage ist ein Duplikat gemäß den linked question. In dieser Frage geht es darum, wie MySQL es behandelt. Es wurde nicht gefragt, wie diese Kommentare entfernt werden können, und die Frage wird nicht als Kommentar für MySQL angezeigt.

+1

Nach der [Dokumentation für Kommentare] (https://dev.mysql.com/doc /refman/5.1/en/comments.html), diese Syntax zeigt Code an, der * für MySQL spezifisch ist, * der nur von MySQL und keinem anderen SQL-Manager für relationale Datenbanken ausgeführt werden soll. –

+0

@ Ollie-Jones: Ich denke nicht, dass diese Frage ein Duplikat ist, wie in der verknüpften Frage. Es wurde nicht gefragt, wie diese Kommentare entfernt werden können, und die Frage wird nicht als Kommentar für MySQL angezeigt. – PCM

Antwort

9

Diese Zeilen werden als Kommentare von anderen RDBMS als MySQL behandelt. MySQL wird sie jedoch ausführen.

Dies ermöglicht MySQL spezifische Schlüsselwörter oder Syntax innerhalb der SQL-Datei, ohne es für andere Systeme zu brechen.

Die Nummer steht für die Version, auf die Sie ausgerichtet sind, z. /*!32302 TEMPORARY */ wird nur von MySQL Version 3.23.02 oder höher ausgeführt.

Hier finden Sie aktuelle the docs für weitere Informationen:

MySQL Server einige Varianten von C-Stil Kommentare unterstützt. Diese ermöglichen Sie Code zu schreiben, der MySQL-Erweiterungen enthält, ist aber noch tragbar, durch Kommentare der folgenden Form verwenden:

/*! MySQL-specific code */ 

In diesem Fall MySQL Server analysiert und führt den Code innerhalb des Kommentars wie würde jede andere SQL-Anweisung , aber andere SQL-Server werden die Erweiterungen ignorieren. Für Beispiel MySQL Server die STRAIGHT_JOIN Schlüsselwort in der folgende Anweisung erkennt, aber auch andere Server werden nicht:

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...