MySQL查询关于创建表DDL格式

3
我是一个MySQL新手。我对于创建表格的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)
);

但是我经常看到人们像这样编写他们的 create table 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. 显式声明引擎和字符集是一种好的实践吗? 默认使用哪个引擎和字符集?

谢谢


AUTO_INCREMENT=3 似乎是被导出而不是被写入。只有在想要保留0、1、2作为主键时才需要它。 - Christian Gollhardt
2个回答

2
  1. 没有区别。如果标识符(表名、列名等)包含特殊字符或是保留字,必须使用反引号将其括起来。否则,反引号是可选的。

  2. 是的,这是良好的实践,可以提高对其他系统的可移植性。如果重新创建表,明确指定存储引擎和字符集在CREATE TABLE语句中意味着您的语句不会依赖于default_character_set和default-storage-engine变量的设置(这些变量可能会被更改,或在另一个数据库上设置不同)。


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

SHOW CREATE TABLE `file`

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


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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接