回答:
MySQLのINSERT構文はWHERE句をサポートしていないため、現状のクエリは失敗します。id列が一意または主キーであると想定します。
ID 1の新しい行を挿入しようとしている場合は、以下を使用する必要があります。
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
ID 1の既存の行のweight / desiredWeight値を変更しようとしている場合は、以下を使用する必要があります。
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
必要に応じて、次のようなINSERT .. ON DUPLICATE KEY構文も使用できます。
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
またはそのようにも:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
idカラムが自動インクリメントカラムの場合、INSERTから一緒に省略して、mysqlに通常どおりインクリメントさせることにも注意することが重要です。
If you're trying to insert a new row with ID 1 you should be usingINSERT INTOに言及したように。あなたの場合、ID 1が既に存在し、それが主キーまたは一意のキーであるときに挿入しようとすると失敗するため、UPDATE構文またはINSERT .. ON DUPLICATE KEY構文を使用する必要があります
UPDATEクエリにはWHERE句を使用します。INSERTを実行すると、行が存在しないと見なされます。
OPのステートメントは次のようになります。
UPDATE Users SET weight = 160、desiredWeight = 45 where id = 1;
MySQLでは、INSERTまたはUPDATEが必要な場合、REPLACEクエリをWHERE句とともに使用できます。WHEREが存在しない場合は挿入し、存在しない場合は更新します。
編集
ビル・カーウィンのポイントは、コメントを引き出して非常に明白にするのに十分重要だと思います。ビルに感謝します。MySQLを使用してから長い間、REPLACEに問題があったことを思い出しましたが、それが何であるかを忘れていました。調べれば良かったのに。
それはMySQLのREPLACEが機能する方法ではありません。DELETE(行が存在しない場合は何もしない)が行われ、その後にINSERTが行われます。その結果を考えてください。トリガーと外部キーの依存関係。代わりに、INSERT ... ON DUPLICATE KEY UPDATEを使用してください。
where条件を副選択ステートメントに使用できるため、条件が適用されます。副選択を使用して複雑な挿入を実行できます。
例えば:
INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';
insertステートメントに「select」を配置すると、複数の挿入をすばやく実行できます。
このタイプの挿入では、挿入される行の数を確認することができます。挿入を実行する前に次のSQLステートメントを実行することにより、挿入される行数を決定できます。
SELECT count(*)
FROM customers
WHERE city = 'Newark';
EXISTS条件を使用して、重複した情報を挿入しないようにすることができます。
たとえば、client_idの主キーを持つクライアントという名前のテーブルがある場合、次のステートメントを使用できます。
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
このステートメントは、副選択で複数のレコードを挿入します。
単一のレコードを挿入する場合は、次のステートメントを使用できます。
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
デュアルテーブルを使用すると、値が現在テーブルに格納されていなくても、selectステートメントに値を入力できます。
where句で挿入する方法もご覧ください。
この質問に対する正しい答えは、次のようになります。
a)。挿入前に選択したい場合:
INSERT INTO Users( weight, desiredWeight )
select val1 , val2 from tableXShoulatNotBeUsers
WHERE somecondition;
b)。レコードが既に存在する場合は、挿入ではなく更新を使用します。
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
する必要があります
Update Users set weight=160, desiredWeight=145 WHERE id = 1;
c)。同時に更新または挿入したい場合
Replace Users set weight=160, desiredWeight=145 WHERE id = 1;
Note):- you should provide values to all fields else missed field in query
will be set to null
d)。同じテーブルからレコードをクローンする場合は、挿入するテーブルから選択できないことに注意してください。
create temporary table xtable ( weight int(11), desiredWeight int(11) ;
insert into xtable (weight, desiredWeight)
select weight, desiredWeight from Users where [condition]
insert into Users (weight, desiredWeight)
select weight , desiredWeight from xtable;
これはほとんどのシナリオをかなりカバーしていると思います
INSERTステートメントを実行するときは、WHEREを使用できません。
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
でなければなりません:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );
WHERE部分はSELECTステートメントでのみ機能します。
SELECT from Users WHERE id = 1;
またはUPDATEステートメント:
UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;
ユーザー入力に基づいて条件付きINSERTを実行できます。このクエリは、入力変数「$ userWeight」と「$ userDesiredWeight」が空白でない場合にのみ挿入を行います
INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
最も簡単な方法は、IFを使用してキーの制約に違反することです。これはINSERT IGNOREでのみ機能しますが、INSERTで制約を使用できます。
INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
後 WHERE句の条件を置き、データのフェッチまたは行の更新に使用されます。データを挿入するときは、行が存在しないと見なされます。
では、問題は、IDが1の行があるかどうかです。その場合は、MySQL UPDATEを使用します。それ以外の場合は、MySQL INSERTを使用します。
特定のレコードを指定してデータを挿入しない場合は、UPDATEステートメントではなくステートメントを使用することをお勧めしますINSERT。
質問に書き込んだこのタイプのクエリは、ダミークエリのようなものです。
あなたのクエリは:-
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ここで、あなたはとても良く、使用、= 1 IDを指定しているUPDATE既存のrecord.Itを更新する文が使用することをお勧めされていないWHERE場合の句をINSERT使用する必要があります。あなたUPDATE。
更新クエリを使用しています:-
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
どんな場合でも、WHERE句をINSERT-INTO-VALUESと一緒に使用できますか?
答えは間違いなくノーです。
INSERT INTO ... VALUES ...の後にWHERE句を追加することは、無効なSQLであり、解析されません。
MySQLが返すエラーは次のとおりです。
mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1
エラーメッセージの最も重要な部分は
... syntax to use near 'WHERE id = 1' ...
これは、パーサーがここで見つけることを予期していなかった特定の部分、つまりWHERE句を示しています。
それは意味がありません...文字通り
INSERTはa new rowを追加することを意味WHEREし、あなたがで話している行を定義すると言うときSQL。
そのため、既存の行を条件として新しい行を追加することはできません。
次の中から選択する必要があります。
A.のUPDATE代わりに使用INSERT
B. 句を使用INSERTして削除するWHERE(私はそれを言っているだけです...)または、使用することに本当に縛られINSERTていWHEREて、単一のステートメントでそれを行うことができるのはINSERT..SELECT句を介してのみです...
INSERT INTO Users( weight, desiredWeight )
SELECT FROM Users WHERE id = 1;
しかし、これはまったく異なる目的に役立ち、idを主キーとして定義した場合、この挿入は失敗します。それ以外の場合、新しい行はid = 1で挿入されます。
私はこれが古い投稿であることを認識していますが、これが誰かに役立つことを願っています。
バックグラウンド:
私は多対多のケースがありました:同じユーザーが複数の値で複数回リストされ、新しいレコードを作成したいので、UPDATEは私のケースでは意味がなく、私がするように特定のユーザーに対処する必要がありましたWHERE句を使用します。
INSERT into MyTable(aUser,aCar)
value(User123,Mini)
この構成を使用することで、実際には特定のユーザー(他のレコードを持つuser123)をターゲットとするため、where句は実際には必要ありません。
出力は次のようになります。
aUser aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
mysqlメソッドのpostメソッドを使用したステートメントへの正しい構文は次のとおりです。
$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
INSERTとWHEREを一緒に使用することはできません。以下のコードのように、UPDATE句を使用して、特定のフィールドの特定の列に値を追加できます。
UPDATE Users
SET weight='160',desiredWeight ='145'
WHERE id =1