Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2318812
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: Mysql/postgreSQL

2009-06-02 12:51:17

之前一直不明白注释中的叹号是什么东西,直到看了下边的Manual文档中的内容。

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关键字。


今天是在看5.1的Partition表的show create table的时候,又去想这个问题的,如下为一个partition表的创建语法:只有版本大于5.1才会去做注释里边的内容。我不明白的是5.1怎么是50100这么个表示,MS二级版本

CREATE TABLE `log_data` (
  `hap_date` date DEFAULT NULL,
  `uin` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 /*!50100 PARTITION BY LIST (to_days(hap_date)) (PARTITION P_20080523 VALUES IN (733550) ENGINE = InnoDB) */

还有一个是以前很迷惑的,在mysqldump过程中那些select都是带有SQL_NO_CACHE的,不知道为什么,其实Manual里边都有解释

SELECT /*!40001 SQL_NO_CACHE */ * FROM `tbMail_1`;

·        SQL_NO_CACHE告知MySQL不要把查询结果存储在查询缓存中。请参见。对于一个使用UNION或子查询的查询,本选项会影响查询中的SELECT


其实mysqldump结果SQL里边很多这样的东东:

代表了各个版本Mysql引进的一些东东。
/*!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 */;
/*!40101 SET NAMES gbk */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

阅读(604) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~