我是一个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 ;
一些问题......
表名和列名的引号有何不同?
明确声明引擎和字符集是一种好习惯吗?默认情况下使用什么引擎和字符集?
感谢
答案 0 :(得分:2)
没有区别。标识符(表名,列名等)必须包含在反引号中,如果它们包含特殊字符或保留字。否则,反引号是可选的。
是的,这是一种很好的做法,可以移植到其他系统。如果重新创建表,则在CREATE TABLE语句中显式指定存储引擎和字符集意味着您的语句不会依赖于default_character_set
和default-storage-engine
变量的设置(这些可能会被更改,或者在另一个数据库中设置不同。)
您可以使用SHOW CREATE TABLE
语句以相同的格式获取表格DDL定义,例如
SHOW CREATE TABLE `file`
您看到的其他用户发布的CREATE TABLE
DDL语法通常采用生成此语句输出的格式。请注意,MySQL并不需要检查标识符是否包含特殊字符或保留字(以查看是否需要反引号),它只是继续并将所有标识符包装在反引号中。
答案 1 :(得分:1)
使用反引号,可以在名称中使用保留字和一些特殊字符 这只是一种安全措施,许多工具会自动添加这些措施。
可以在服务器配置中设置默认引擎和字符集
它们通常(但不总是)设置为MyISAM
和latin1
。
就个人而言,我认为定义引擎和字符集是一种很好的做法,这样你就可以确定最终的结果。