2011-09-12 5 views
4

私はMySQL(MS SQLから来たもの)にいくぶん新しく、データベースに値を挿入しようとすると、私にはとても混乱しています。MySQL INSERT - フィールド名にはバックティック/アクセント区切りが必要ですか?

PHPでINSERT SQLコマンドを作成しましたが、実行しようとするとエラーが発生しました。

INSERT INTO myTableName (first-name, last-name) VALUES ('Ted', 'Johnson') 

私の考え方には、上記の文字列は機能しているはずですが、それはできませんでした。私もphpMyAdminで直接使用しようとしましたが、私は同じ構文エラーを持っています。

SQLステートメントのフィールド名を "バックティック"または "アクセント"文字(キーボードのチルダキーのもう一方の文字)で囲んでいるだけです。たとえば...

INSERT INTO myTableName(`first-name`, `last-name`) VALUES ('Ted', 'Johnson') 

これは、MySQLまたはMS SQL Serverでは必要ではありません。私は常にフィールド名を区切ることなく列挙しました。誰もこれを前に走っていますか?私はMySQL 5.0.77を使用しています。ありがとうございました。

+3

愚かなテーブル名(マイナスを含む名前やSQLキーワードでもある名前など)を主張する場合は、名前を引用する必要があります。さもなければあなたはしません。 –

+0

あなたはそれを包みましたか( "......")? – carlgcode

+0

firstNameまたはfirst_nameまたはfirstNameまたはfirstnameがより良いオプションです –

答えて

5

カラム名にはハイフンが含まれていますが、パーサーがfirst minus nameと誤って解釈する可能性があるため、通常はお勧めできません。バックティックは、列名を引用するMySQLの方法で、正しく処理されるようにします。

カラムがfirst_nameとlast_nameの場合、バックティックは必要ありません。

3

カラム名がSQLの予約語またはシンボルと衝突する場合にのみ、バッククォートが必要です。あなたの場合、firstname(そしてlastnameの間のもの)を区切るダッシュは、マイナス記号として解釈されます。さらにfirstという単語がMySQL's ALTER TABLE statementで使用されています(実際にはMySQL's reserved words listには表示されませんが)。単語を区切るためにダッシュの代わりに下線を使用して列の名前を変更できる場合は、バッククォートは必要ありません。

1

私のMYSQLプロではありませんが、私は自分自身をプログラムしたいので、常にbackticksを使用しています。常にそれらを使用する。バックテックを自然に使用すると、将来的に多くの問題を避けることができます。

mysql_query("INSERT INTO `myTableName` (`first-name`, `last-name`) VALUES ('Ted', 'Johnson')"); 
+3

私は、予約語を使用しないことに慣れていることも同様に良い習慣であると言います。バッククォートはMySQL固有のものです。良い命名規則を学ぶことははるかにポータブルなスキルです... –

関連する問題