2012-02-07 14 views
0
CREATE TABLE IF NOT EXISTS `MyTable` (
    `ID` SMALLINT NOT NULL AUTO_INCREMENT, 
    `Name` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO MyTable (ID,Name) VALUES (ID=4,Name='xxx') 

又はINSERTステートメント

INSERT INTO MyTable (Name) VALUES (Name='xxx') 

問題は、両方のINSERTステートメントは、エントリ(4、)を生成することです。なぜ "xxx"の代わりに?

UPDATE:主キーが変更されました。これは仕事をすべき

+0

あなたが指定訪問詳細はこの

INSERT INTO MyTable (ID,Name) VALUES (4,xxx) 

を試してみてください(airlineIDは、フィールドリストの一部ではありません)存在していないプライマリキー(航空路線)なので、テーブル作成は機能しません。また、auto_incrementを使用するときに値を挿入する必要はありません。 –

答えて

4

INSERT INTO MyTable (ID, Name) VALUES (4, 'xxx') 
+0

私の例のステートメントがエラーを生成しなかったのはなぜですか? –

+0

あなたのケースでは、paxdiabloのポストで述べたように、あなたはbad = writeではなく、INSERT ... VALUESステートメントで0と評価されるcolumn = expresionメソッドを使用します。 column = expressionメソッドを使用するには、INSERT ... SETステートメントを使用します。 –

2

私はそれではなく、このようなものになるだろうかなり確信しているが...

INSERT INTO MyTable (Name) VALUES ('xxx')

Name=部分は必要ない、以来、最初の(Name)定義で挿入する列を指定しました。

0

Name='xxx'の構文は有効ですか?以前は見たことがありませんでした。引用符で囲まれていないリテラルと見なして、数字に変換して0にしていますか? 表現Name='xxx'はゼロとして評価され、したがって、偽ですので

INSERT INTO MyTable (Name) VALUES ('xxx')

2

:私はこれを試してみてくださいすべて

ではよく分かりません。

column=expressionメソッドの使用方法は、hereon duplicate key update節に記載されていますが、挿入の「通常の」セクションでは使用しません。その一例:

insert into mytable (col1,col2) values (1,2) 
    on duplicate key update col1 = col1 + 1 

には、次の構文を使用する必要があります。

INSERT INTO MyTable (ID,Name) VALUES (4,'xxx') 
0

あなたは値の一部の列の名前を言及する必要がありますので、これがあります。あなたが正しくあなたの主キーを定義しないためにも及び

CREATE TABLE IF NOT EXISTS `MyTable` (
    `ID` SMALLINT NOT NULL AUTO_INCREMENT, 
    `Name` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO MyTable (ID,Name) VALUES (4,'xxx') 

INSERT INTO MyTable (Name) VALUES ('xxx') 
関連する問題