Jawaban:
MySQL INSERT Syntax tidak mendukung klausa WHERE sehingga kueri Anda seperti aslinya akan gagal. Dengan asumsi id
kolom Anda unik atau kunci utama:
Jika Anda mencoba memasukkan baris baru dengan ID 1, Anda harus menggunakan:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Jika Anda mencoba mengubah nilai bobot / bobot yang diinginkan untuk baris yang ada dengan ID 1, Anda harus menggunakan:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
Jika mau, Anda juga dapat menggunakan INSERT .. ON DUPLICATE KEY sintaks seperti:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
ATAU bahkan seperti itu:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
Penting juga untuk dicatat bahwa jika id
kolom Anda adalah kolom autoincrement maka Anda mungkin juga menghilangkannya dari INSERT Anda bersama-sama dan membiarkan mysql menaikkannya seperti biasa.
If you're trying to insert a new row with ID 1 you should be using
INSERT INTO. Dalam kasus Anda, Anda mencoba memasukkan ketika ID 1 sudah ada dan itu adalah kunci utama atau unik dan gagal sehingga Anda harus menggunakan sintaks UPDATE atau INSERT .. PADA sintaks DUPLICATE KEY
Anda tidak dapat menggabungkan klausa WHERE dengan klausa VALUES. Sejauh yang saya tahu, Anda memiliki dua opsi-
INSERT menentukan nilai
INSERT INTO Users(weight, desiredWeight)
VALUES (160,145)
SISIPKAN menggunakan pernyataan SELECT
INSERT INTO Users(weight, desiredWeight)
SELECT weight, desiredWeight
FROM AnotherTable
WHERE id = 1
Anda menggunakan klausa WHERE untuk kueri UPDATE. Saat Anda MASUKKAN, Anda berasumsi bahwa baris tersebut tidak ada.
Pernyataan OP kemudian menjadi;
UPDATE Pengguna SET berat = 160, Berat yang diinginkan = 45 di mana id = 1;
Di MySQL, jika Anda ingin INSERT atau UPDATE, Anda dapat menggunakan query REPLACE dengan klausa WHERE. Jika WHERE tidak ada, itu INSERTS, jika tidak maka DIPERBARUI.
EDIT
Saya pikir poin Bill Karwin cukup penting untuk ditarik dari komentar dan membuatnya sangat jelas. Terima kasih Bill, sudah terlalu lama sejak saya bekerja dengan MySQL, saya ingat bahwa saya memiliki masalah dengan REPLACE, tetapi saya lupa apa itu. Aku seharusnya mencarinya.
Itu bukan cara kerja REPLACE MySQL. Ini melakukan DELETE (yang mungkin tidak ada operasi jika baris tidak ada), diikuti dengan INSERT. Pikirkan konsekuensinya vis. pemicu dan dependensi kunci asing. Sebagai gantinya, gunakan INSERT ... ON DUPLICATE KEY UPDATE.
Saya tidak percaya sisipan tersebut memiliki klausa WHERE.
Kondisi berlaku karena Anda bisa menggunakan kondisi where untuk pernyataan sub-pilih. Anda dapat melakukan penyisipan yang rumit menggunakan sub-pilihan.
Sebagai contoh:
INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';
Dengan menempatkan "pilih" dalam pernyataan sisipkan, Anda dapat melakukan beberapa penyisipan dengan cepat.
Dengan jenis penyisipan ini, Anda mungkin ingin memeriksa jumlah baris yang disisipkan. Anda dapat menentukan jumlah baris yang akan disisipkan dengan menjalankan pernyataan SQL berikut sebelum melakukan penyisipan.
SELECT count(*)
FROM customers
WHERE city = 'Newark';
Anda dapat memastikan bahwa Anda tidak memasukkan informasi duplikat dengan menggunakan kondisi EXISTS.
Misalnya, jika Anda memiliki tabel bernama klien dengan kunci utama client_id, Anda dapat menggunakan pernyataan berikut:
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);
Pernyataan ini menyisipkan banyak record dengan subselect.
Jika Anda ingin memasukkan satu record, Anda dapat menggunakan pernyataan berikut:
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);
Penggunaan tabel ganda memungkinkan Anda memasukkan nilai-nilai Anda dalam pernyataan pilih, meskipun nilai-nilai tersebut saat ini tidak disimpan dalam tabel.
Lihat juga Cara menyisipkan klausa with where
Jawaban yang benar untuk pertanyaan ini adalah seperti ini:
Sebuah). JIKA ingin memilih sebelum memasukkan:
INSERT INTO Users( weight, desiredWeight )
select val1 , val2 from tableXShoulatNotBeUsers
WHERE somecondition;
b). JIKA catatan sudah ada gunakan pembaruan, bukan sisipkan:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Seharusnya
Update Users set weight=160, desiredWeight=145 WHERE id = 1;
c). Jika Anda ingin memperbarui atau menyisipkan pada saat yang bersamaan
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). Jika Anda ingin CLONE record dari tabel SAMA, ingat saja Anda tidak dapat memilih dari tabel yang Anda masukkan.
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;
Saya pikir ini cukup mencakup sebagian besar skenario
Anda tidak dapat menggunakan WHERE saat melakukan pernyataan INSERT:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
seharusnya:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );
Bagian WHERE hanya berfungsi dalam pernyataan SELECT:
SELECT from Users WHERE id = 1;
atau dalam pernyataan UPDATE:
UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;
Insert into = Menambahkan baris ke tabel
Upate = perbarui baris tertentu.
Apa yang akan dijelaskan klausa where dalam sisipan Anda? Tidak ada yang cocok, baris tidak ada (belum) ...
Anda dapat melakukan INSERT bersyarat berdasarkan input pengguna. Kueri ini hanya akan disisipkan jika vars input '$ userWeight' dan '$ userDesiredWeight' tidak kosong
INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
Itu tergantung pada situasi INSERT sebenarnya dapat memiliki klausa where.
Misalnya jika Anda mencocokkan nilai dari formulir.
Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com
Masuk akal bukan?
Cara termudah adalah menggunakan IF untuk melanggar batasan utama Anda. Ini hanya berfungsi untuk INSERT IGNORE tetapi akan memungkinkan Anda menggunakan batasan dalam INSERT.
INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
Setelah WHERE
klausa Anda meletakkan kondisi, dan itu digunakan untuk mengambil data atau untuk memperbarui baris. Saat Anda memasukkan data, diasumsikan bahwa baris tersebut tidak ada.
Lantas, pertanyaannya, adakah baris yang idnya 1? jika demikian, gunakan MySQL UPDATE , jika tidak gunakan MySQL INSERT .
Jika Anda menentukan record tertentu tidak untuk memasukkan data, lebih baik menggunakan UPDATE
pernyataan daripada INSERT
pernyataan.
Jenis kueri yang Anda tulis dalam pertanyaan ini seperti kueri dummy.
Kueri Anda adalah: -
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Di sini, Anda menentukan id = 1, jadi lebih baik Anda menggunakan UPDATE
pernyataan untuk memperbarui record yang ada. Tidak disarankan menggunakan WHERE
klausa dalam kasus INSERT
.Anda harus menggunakan UPDATE
.
Sekarang Menggunakan Update Query: -
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
Apakah klausa WHERE sebenarnya dapat digunakan dengan INSERT-INTO-VALUES?
Jawabannya pasti tidak.
Menambahkan klausa WHERE setelah INSERT INTO ... VALUES ... hanyalah SQL yang tidak valid, dan tidak akan mengurai.
Kesalahan yang dikembalikan oleh MySQL adalah:
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
Bagian terpenting dari pesan kesalahan adalah
... syntax to use near 'WHERE id = 1' ...
yang menunjukkan bagian spesifik yang tidak diharapkan parser untuk ditemukan di sini: klausa WHERE.
Tidak. Sejauh yang saya tahu, Anda tidak dapat menambahkan klausa WHERE ke dalam kueri ini. Mungkin saya juga lupa SQL saya, karena saya tidak begitu yakin mengapa Anda membutuhkannya.
Anda tidak boleh menggunakan kondisi mana dalam pernyataan Sisipkan. Jika Anda ingin melakukannya, gunakan insert in a update statement dan kemudian perbarui record yang ada.
Sebenarnya bisakah saya tahu mengapa Anda membutuhkan klausa where dalam pernyataan Insert ??
Mungkin berdasarkan alasan saya mungkin menyarankan Anda opsi yang lebih baik.
Saya pikir pilihan terbaik Anda adalah menggunakan REPLACE, bukan INSERT
GANTI KE Pengguna (id, berat, bobot yang diinginkan) NILAI (1, 160, 145);
Ini tidak masuk akal ... bahkan secara harfiah
INSERT
berarti menambahkan a new row
dan ketika Anda mengatakan WHERE
Anda menentukan baris mana yang Anda bicarakan diSQL
.
Jadi menambahkan baris baru tidak dimungkinkan dengan kondisi pada baris yang sudah ada.
Anda harus memilih dari berikut ini:
A. Gunakan UPDATE
sebagai penggantiINSERT
B.Gunakan INSERT
dan hapus WHERE
klausa (Saya hanya mengatakannya ...) atau jika Anda benar-benar terikat untuk menggunakan INSERT
dan WHERE
dalam satu pernyataan itu hanya dapat dilakukan melalui INSERT..PILIH klausa ...
INSERT INTO Users( weight, desiredWeight )
SELECT FROM Users WHERE id = 1;
Tetapi ini melayani tujuan yang sama sekali berbeda dan jika Anda telah menetapkan id sebagai Kunci Utama, penyisipan ini akan gagal, jika tidak, baris baru akan dimasukkan dengan id = 1.
Saya menyadari bahwa ini adalah posting lama tetapi saya berharap ini masih akan membantu seseorang, dengan apa yang saya harap adalah contoh sederhana:
Latar Belakang:
Saya memiliki banyak kasus: pengguna yang sama terdaftar beberapa kali dengan banyak nilai dan saya ingin Membuat catatan baru, maka UPDATE tidak masuk akal dalam kasus saya dan saya perlu menangani pengguna tertentu seperti yang akan saya lakukan menggunakan klausa WHERE.
INSERT into MyTable(aUser,aCar)
value(User123,Mini)
Dengan menggunakan konstruksi ini Anda sebenarnya menargetkan pengguna tertentu (user123, yang memiliki catatan lain) sehingga Anda tidak benar-benar membutuhkan klausa where, saya rasa.
outputnya bisa jadi:
aUser aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
sintaks yang benar untuk memasukkan mysql ke dalam pernyataan menggunakan metode posting adalah:
$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
Saya tidak berpikir bahwa kita dapat menggunakan klausa mana dalam pernyataan sisipan
INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
Anda tidak dapat menggunakan INSERT dan WHERE secara bersamaan. Anda dapat menggunakan klausa UPDATE untuk menambah nilai pada kolom tertentu di bidang tertentu seperti kode di bawah ini;
UPDATE Users
SET weight='160',desiredWeight ='145'
WHERE id =1
Saya pikir bentuk yang benar untuk memasukkan nilai pada baris yang ditentukan adalah:
UPDATE table SET column = value WHERE columnid = 1
ini berfungsi, dan serupa jika Anda menulis di Microsoft SQL Server
INSERT INTO table(column) VALUES (130) WHERE id = 1;
di mysql Anda harus memperbarui tabel.