2009-03-24 6 views

答えて

31

ルール:

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"; 
+0

"識別子は数字で始まることがありますが、引用符で囲まれていない場合は数字だけではない場合があります。" –

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 
0

限り、あなたはテーブル名を引用するように注意するよう、karim79で与えられる答えは、イエスです。もちろん、接頭辞としてnumerを使用することもできます。 mytable1、mytable2、...;引用符を使わずに動作します。

つまり、なぜ非常に多くのテーブルを作成したいのかを考える必要があります。受け入れられる方法は、すべてが1つの表にまとめられていることです。だからtable1、table2 ...を持つのではなく、あなたは1つのテーブルを使用し、列に数値を格納します。

これは単なる自然な方法です。あなたのやり方は容易に多くの問題につながる可能性があります(DBスキーマの変更はバックアップに問題があり、多くのテーブルのために他のツールがDBで作業しにくく、すべてのテーブルにスキーマを変更する必要があります)。実行時にスキーマを動的に変更することは、通常はお勧めできません。

+0

意味が分かりません。あなたが毎回それをエスケープしている限り、答えは間違いなくはいです。また、私はテーブル名が自動的に生成されるデータベースの整数である多くの場合に出くわしました。 – techdude

+0

@techdude:私はデータベースに「番号付きテーブル」を見つけたことはありません。あなたはどこを見ましたか?なぜ彼らは使われたのですか?私は好奇心が強いです... – sleske

+0

特定の場所は重要ではありません。キーはテーブル名に数字を使用できることです。 さらに質問者の質問に答えるには、作成した新しいテーブルに各行が対応している(そしてテーブルに関する他の情報を持つことができる)マスター増分テーブルを持っていると同時に、作成されるテーブルの整数この場合、整数のテーブル名(およびその項目のカラム名)はすべての主要なDBMSでサポートされるため、文字列にする必要はありません。 – techdude

0

私は、それがもっと紛らわしくて覚えにくいとは思っていません。テーブル名は、格納しているデータに関連している必要があります。それはより良い習慣です。

0

純粋な数字の場合は、テーブル名を引用符で囲むためにバックティック( `)を使用します。キーボードのescボタンの下にあります

関連する問題