我在创建表格时看到的正常例子如下:
CREATE TABLE supportContacts
(
id int auto_increment primary key,
type varchar(20),
details varchar(30)
);
然而,我看到的一个例子是这样的:
CREATE TABLE IF NOT EXISTS `main`.`user` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`user_password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`user_email` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_name` (`user_name`),
UNIQUE KEY `user_email` (`user_email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
具体来说,就像创建表一样,它指定了数据库和新表,并将它们包含在`
中。这是什么原因,并且一种方式优于另一种方式?
答案 0 :(得分:2)
当标识符包含特殊字符(例如空格)或保留字(例如group
或order
)时,反引号是所需的转义字符。
否则,它们不是必需的,我认为这个create table
语句中的任何标识符都不需要它们。
我个人的偏好是过度使用转义字符是一件坏事:
当然,有些人对其中的一些观点有不同的看法(虽然我认为第二点和第四点比事实更真实。)
答案 1 :(得分:1)
反引号用于转义表名和列名。
您可以执行此操作以使用关键字。例如,如果要命名列from
,则需要反引号。否则,DB会将此解释为关键字。
或者,如果您希望表格中的空格如my table
,我建议您不要这样做。
在SQL Server中,您可以使用[]
来转义名称。