Apa yang salah dengan kueri ini:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Ini bekerja tanpa WHERE
klausul. Sepertinya saya lupa SQL saya ..
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 KEYAnda tidak dapat menggabungkan klausa WHERE dengan klausa VALUES. Sejauh yang saya tahu, Anda memiliki dua opsi-
INSERT menentukan nilai
SISIPKAN menggunakan pernyataan SELECT
sumber
Anda menggunakan klausa WHERE untuk kueri UPDATE. Saat Anda MASUKKAN, Anda berasumsi bahwa baris tersebut tidak ada.
Pernyataan OP kemudian menjadi;
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.
sumber
Saya tidak percaya sisipan tersebut memiliki klausa WHERE.
sumber
Sisipkan kueri tidak mendukung di mana kata kunci *
Kondisi berlaku karena Anda bisa menggunakan kondisi where untuk pernyataan sub-pilih. Anda dapat melakukan penyisipan yang rumit menggunakan sub-pilihan.
Sebagai contoh:
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.
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:
Pernyataan ini menyisipkan banyak record dengan subselect.
Jika Anda ingin memasukkan satu record, Anda dapat menggunakan pernyataan berikut:
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
sumber
Jawaban yang benar untuk pertanyaan ini adalah seperti ini:
Sebuah). JIKA ingin memilih sebelum memasukkan:
b). JIKA catatan sudah ada gunakan pembaruan, bukan sisipkan:
Seharusnya
c). Jika Anda ingin memperbarui atau menyisipkan pada saat yang bersamaan
d). Jika Anda ingin CLONE record dari tabel SAMA, ingat saja Anda tidak dapat memilih dari tabel yang Anda masukkan.
Saya pikir ini cukup mencakup sebagian besar skenario
sumber
Anda tidak dapat menggunakan WHERE saat melakukan pernyataan INSERT:
seharusnya:
Bagian WHERE hanya berfungsi dalam pernyataan SELECT:
atau dalam pernyataan UPDATE:
sumber
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) ...
sumber
Anda dapat melakukan INSERT bersyarat berdasarkan input pengguna. Kueri ini hanya akan disisipkan jika vars input '$ userWeight' dan '$ userDesiredWeight' tidak kosong
sumber
Itu tergantung pada situasi INSERT sebenarnya dapat memiliki klausa where.
Misalnya jika Anda mencocokkan nilai dari formulir.
Masuk akal bukan?
sumber
Cara termudah adalah menggunakan IF untuk melanggar batasan utama Anda. Ini hanya berfungsi untuk INSERT IGNORE tetapi akan memungkinkan Anda menggunakan batasan dalam INSERT.
sumber
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 .
sumber
Jika Anda menentukan record tertentu tidak untuk memasukkan data, lebih baik menggunakan
UPDATE
pernyataan daripadaINSERT
pernyataan.Jenis kueri yang Anda tulis dalam pertanyaan ini seperti kueri dummy.
Kueri Anda adalah: -
Di sini, Anda menentukan id = 1, jadi lebih baik Anda menggunakan
UPDATE
pernyataan untuk memperbarui record yang ada. Tidak disarankan menggunakanWHERE
klausa dalam kasusINSERT
.Anda harus menggunakanUPDATE
.Sekarang Menggunakan Update Query: -
sumber
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:
Bagian terpenting dari pesan kesalahan adalah
yang menunjukkan bagian spesifik yang tidak diharapkan parser untuk ditemukan di sini: klausa WHERE.
sumber
itu benar-benar salah. INSERT QUERY tidak memiliki klausa WHERE, Hanya UPDATE QUERY yang memilikinya. Jika Anda ingin menambahkan data Dimana id = 1 maka Query Anda akan
sumber
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.
sumber
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.
sumber
Saya pikir pilihan terbaik Anda adalah menggunakan REPLACE, bukan INSERT
sumber
JANGAN BACA INI JUGA
Ini tidak masuk akal ... bahkan secara harfiah
INSERT
berarti menambahkan anew row
dan ketika Anda mengatakanWHERE
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 hapusWHERE
klausa (Saya hanya mengatakannya ...) atau jika Anda benar-benar terikat untuk menggunakanINSERT
danWHERE
dalam satu pernyataan itu hanya dapat dilakukan melalui INSERT..PILIH klausa ...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.
sumber
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.
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:
sumber
Salah satu cara untuk menggunakan INSERT dan WHERE adalah
INSERT INTO MYTABLE SELECT 953,'Hello',43 WHERE 0 in (SELECT count(*) FROM MYTABLE WHERE myID=953);
Dalam hal ini ist seperti tes yang ada. Tidak ada pengecualian jika Anda menjalankannya dua kali atau lebih ...sumber
sintaks yang benar untuk memasukkan mysql ke dalam pernyataan menggunakan metode posting adalah:
sumber
Saya tidak berpikir bahwa kita dapat menggunakan klausa mana dalam pernyataan sisipan
sumber
sumber
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;
sumber
Saya pikir bentuk yang benar untuk memasukkan nilai pada baris yang ditentukan adalah:
ini berfungsi, dan serupa jika Anda menulis di Microsoft SQL Server
di mysql Anda harus memperbarui tabel.
sumber
Anda dapat melakukannya dengan kode di bawah ini:
sumber