Mysql 架构语法不同-为什么要创建表
我看到的创建表的常见示例如下所示:Mysql 架构语法不同-为什么要创建表,mysql,sql,Mysql,Sql,我看到的创建表的常见示例如下所示: 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_na
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;
然而,我看到的一个例子是这样的:
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;
具体地说,在create表上,就像它指定数据库和新表,并将它们包围在`’s中一样。原因是什么?一种方法比另一种方法有优势吗?反勾号用于转义表名和列名 您可以这样做来使用关键字。例如,如果您想从中命名一个列,那么您需要反勾号。否则DB会将其解释为关键字 或者,如果您希望表名中有空格,比如我的表,顺便说一句,我建议不要这样做
在SQL Server中,您可以使用[]来转义名称。当标识符包含特殊字符(如空格)或保留字(如组或顺序)时,反勾号是转义字符 否则,它们是不需要的,我认为这个CREATETABLE语句中的任何标识符都不需要它们 我个人的偏好是过度使用转义字符是一件坏事: 它们使查询更难阅读,因为到处都是不必要的字符。 它们使得编写查询变得更加困难。我想对经常这样做的人的回击键开始断裂了。 它们鼓励或至少不鼓励使用困难的识别词。 它们使得在数据库之间移动代码变得更加困难。MySQL是少数使用反勾号作为转义字符的数据库之一。
当然,有些人对其中的一些观点有不同的看法,尽管我认为第二点和第四点比观点更真实。好吧,像用户id这样的东西似乎没有必要,对吗?没错。但是有些人用它们来命名。但这完全取决于你。