mysql /*! */的含義 在MySQL的SQL語句或SQL文件經常看到如下用戶:
SELECT /*!40001 SQL_CACHE */ * FROM pre_common_syscache WHERE cname IN ('ipbanned')/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
這只是一個hint啊。40001 SQL_CACHE, 意味著數據庫要緩存整個SQL語句。還有SQL_NO_CACHE的hint /* .... */ 在大部分語言中都一樣是注釋。這個之中的語句是不被執行的。但MYSQL中 為了保持兼容,比如從mysqldump 導出的SQL語句能被其它數據庫直接使用,它把一些特有的僅在MYSQL上的語句放在 /*! ... */ 中,這樣這些語句如果在其它數據庫中是不會被執行,但在MYSQL中它會執行。 1.8.4. MySQL對標准SQL的擴展MySQL服務器包含一些其他SQL DBMS中不具備的擴展。注意,如果使用了它們,將無法把代碼移植到其他SQL服務器。在某些情況下,你可以編寫包含MySQL擴展的代碼,但仍保持其可移植性,方法是用“/*... */”注釋掉這些擴展。在本例中,MySQL服務器能夠解析並執行注釋中的代碼,就像對待其他MySQL語句一樣,但其他SQL服務器將忽略這些擴展。例如: SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...如果在字符“!”後添加了版本號,僅當MySQL的版本等於或高於指定的版本號時才會執行注釋中的語法: CREATE /*!32302 TEMPORARY */ TABLE t (a INT);這意味著,如果你的版本號為3.23.02或更高,MySQL服務器將使用TEMPORARY關鍵字。