是否可以在CREATE TABLE语句中使用“When”作为列名?
在进行CREATE TABLE语句操作时,往往需要为表中的每一列指定列名,列名的要求是必须是一个合法的标识符。那么问题来了,是否可以在列名中使用“When”这个词汇呢?
在SQL语言的标准中,并没有对于列名的具体限制做出明确规定,但是考虑到当下使用SQL语言的场景,我们可以推测出“The WHEN”将不会被作为一个合法的列名而存在于CREATE TABLE语句中。那么这个推测是否是正确的呢?接下来,我们来通过实验验证一下。
阅读更多:MySQL 教程
实验过程
首先,我们在MySQL客户端中新建一个数据库“test”。然后,我们利用下面这个命令在“test”数据库中新建一张表,“When”作为列名。
CREATE TABLE test_table (
id INT,
name VARCHAR(10),
When VARCHAR(20)
);
接下来插入一些数据。
INSERT INTO test_table VALUES (1, 'monkey', '2021-01-01'), (2, 'cat', '2021-02-05');
尝试查询数据。
SELECT * FROM test_table;
在MySQL客户端执行查询语句后,你会得到如下错误提示:
ERROR 1064 (42000): You have an error in
your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'When VARCHAR(20))' at line 3
这意味着我们 上面的CREATE TABLE语句并没有被成功地解析/执行系统在处理我们的SQL语句时,将”When”视为关键字,而不是标识符的一部分。因此,我们的CREATE TABLE语句没有创建任何表,因为它不符合标准。
解决方案
我们可以通过在列名两侧加上反引号`来避免使用关键字的情况。
所以,如果我们使用以下语句,我们的CREATE TABLE语句将得以成功执行。
CREATE TABLE test_table (
id INT,
name VARCHAR(10),
`When` VARCHAR(20)
);
在这个例子中,使用了反引号将”When”括起来表示它是一个标识符而非关键字,这样就解决了使用”When”作为列名的问题。
结论
在CREATE TABLE语句中,使用”When”作为列名是不可行的,因为”When”是作为SQL的一个关键字而存在的。我们需要使用反引号来将其括起来作为标识符,这样就可以在列名中使用”When”了。针对这个问题,也是应该从语言使用者的角度理解略显特殊词汇及其背后的意义,以规范合理的方式来使用和定义我们的代码。