关于create table ddl格式的mysql查询

时间:2014-08-09 01:06:30

标签: mysql

我是一个mysql新手。我有一个关于为create table ddl做正确的事情的问题。到目前为止,我刚刚写了这样的create table ddl ......

CREATE TABLE file (
    file_id mediumint(10) unsigned NOT NULL AUTO_INCREMENT,
    filename varchar(100) NOT NULL,
    file_notes varchar(100) DEFAULT NULL,
    file_size mediumint(10) DEFAULT NULL,
    file_type varchar(40) DEFAULT NULL,
    file longblob DEFAULT NULL,
  CONSTRAINT pk_file PRIMARY KEY (file_id)
);

但我经常看到人们正在创建这样的创建表ddl ......

CREATE TABLE IF NOT EXISTS `etags` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `item_code` varchar(100) NOT NULL,
  `item_description` varchar(500) NOT NULL,
  `btn_type` enum('primary','important','success','default','warning') NOT NULL DEFAULT 'default',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

一些问题......

  1. 表名和列名的引号有何不同?

  2. 明确声明引擎和字符集是一种好习惯吗?默认情况下使用什么引擎和字符集?

  3. 感谢

2 个答案:

答案 0 :(得分:2)

  1. 没有区别。标识符(表名,列名等)必须包含在反引号中,如果它们包含特殊字符或保留字。否则,反引号是可选的。

  2. 是的,这是一种很好的做法,可以移植到其他系统。如果重新创建表,则在CREATE TABLE语句中显式指定存储引擎和字符集意味着您的语句不会依赖于default_character_setdefault-storage-engine变量的设置(这些可能会被更改,或者在另一个数据库中设置不同。)


  3. 您可以使用SHOW CREATE TABLE语句以相同的格式获取表格DDL定义,例如

    SHOW CREATE TABLE `file`
    

    您看到的其他用户发布的CREATE TABLE DDL语法通常采用生成此语句输出的格式。请注意,MySQL并不需要检查标识符是否包含特殊字符或保留字(以查看是否需要反引号),它只是继续并将所有标识符包装在反引号中。

答案 1 :(得分:1)

  1. 使用反引号,可以在名称中使用保留字和一些特殊字符 这只是一种安全措施,许多工具会自动添加这些措施。

  2. 可以在服务器配置中设置默认引擎和字符集 它们通常(但不总是)设置为MyISAMlatin1

  3. 就个人而言,我认为定义引擎和字符集是一种很好的做法,这样你就可以确定最终的结果。