我正在考虑让一个程序在需要时动态创建新表。我可以在MySQL中使用仅用数字命名的表吗?
答案 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)
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按钮下面