2015-05-22 68 views
7

我剛剛意識到在sql文件(.sql)中有一行以/*!開頭,並且不是註釋,它們被執行以執行一些系統級別的任務。Mysql斜槓星號砰

我想知道以/*!開頭的行對MySQL的真正含義,以及爲什麼在符號旁邊使用該數字(在我的示例中爲4000)。

這裏是例子:

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

編輯: 我不認爲這個問題是一個重複的按了linked question。這個問題是關於MySQL如何對待它的。它沒有詢問如何刪除這些評論,並且這個問題沒有把它看作是對MySQL的評論。

+1

按照[文檔註釋](https://dev.mysql.com/doc /refman/5.1/en/comments.html),此語法指示*特定於MySQL的代碼,*旨在僅由MySQL執行,而不是其他SQL關係數據庫管理器。 –

+0

@ Ollie-Jones:我不認爲這個問題根據鏈接問題是重複的。它沒有詢問如何刪除這些評論,並且這個問題沒有把它看作是對MySQL的評論。 – PCM

回答

9

這些行被任何其他MySQL的RDBMS視爲註釋。但MySQL會執行它們。

這使得SQL文件中的特定關鍵字或語法不會被其他系統破壞。

該數字表示您定位的版本,例如, /*!32302 TEMPORARY */只能由MySQL版本3.23.02或更高版本執行。

看一看the docs更多信息:

MySQL服務器支持的C風格的註釋一些變種。這些使 你編寫代碼,包括MySQL的擴展,但仍然是 便攜,使用以下格式的註釋:

/*! MySQL-specific code */ 

在這種情況下,MySQL服務器解析和 ,因爲它在註釋中執行代碼會有任何其他SQL 語句,但其他SQL服務器將忽略擴展。對於 例如,MySQL服務器識別出 以下語句STRAIGHT_JOIN關鍵字,但其他的服務器將不會:

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