您是否允许在MySQL中使用数字作为表名?

时间:2009-03-24 07:38:57

标签: mysql

我正在考虑让一个程序在需要时动态创建新表。我可以在MySQL中使用仅用数字命名的表吗?

5 个答案:

答案 0 :(得分:32)

命名对象的规则,包括MySql中的表:

http://dev.mysql.com/doc/refman/5.1/en/identifiers.html

  

标识符可以以数字开头但是   除非引用可能不仅仅包含在内   数字。

所以这将是无效的:

 SELECT * FROM 12345;

但以下内容有效:

 SELECT * FROM `12345`;

或者如果在ANSI模式下运行,则以下方法可行:

SET @@session.sql_mode=ANSI_QUOTES;
SELECT * FROM "12345";

答案 1 :(得分:12)

正如Karim和Steve Weet指出的那样,是的,你可以,但你必须这样引用它们:

SELECT * FROM `3516`

我可以建议重新考虑你的剧本吗?添加前缀:名为“t3516”的表格不会像“3516”那样令人困惑。

此外,您可以将数字转换为仅使用字母而不是任何数字:

table 0 - t_a
table 1 - t_b
table 2 - t_c
table 25 - t_z
table 26 - t_aa
table 27 - t_ab
... etc

答案 2 :(得分:0)

答案是肯定的,正如karim79给出的那样,只要你注意引用表名。你当然可以使用带有数字的前缀,例如。 mytable1,mytable2,...;这可以不用引用。

那就是说,你应该考虑为什么要创建这么多表。可接受的做事方式是将所有属于一起的东西放在一个表中。因此,不是拥有table1,table2 ......而是使用一个表,并将数字存储在一列中。

这只是一种自然的方式。您的处理方式很容易导致许多问题(更改数据库架构对于备份来说是个问题,因为许多表都需要对其他工具使用DB,因此必须对所有表进行架构更改)。在运行时动态更改模式通常不是一个好主意。

答案 3 :(得分:0)

我认为它不应该是最好的因为它会更加混乱和难以记住。表名应与其存储的数据相关。这是一个更好的习惯。

答案 4 :(得分:0)

如果是纯数字,请使用反引号(`)引用表名。它在键盘上的esc按钮下面