Yanıtlar:
MySQL INSERT Sözdizimi WHERE yan tümcesini desteklemez, bu nedenle sorgunuz olduğu gibi başarısız olur. Sütununuzun idbenzersiz veya birincil anahtar olduğunu varsayarsak :
Kimliği 1 olan yeni bir satır eklemeye çalışıyorsanız, kullanmanız gerekir:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
Kimliği 1 olan mevcut bir satır için ağırlık / istenen Ağırlık değerlerini değiştirmeye çalışıyorsanız, kullanmanız gerekir:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
Eğer isterseniz INSERT .. ON DUPLICATE KEY sözdizimini şu şekilde kullanabilirsiniz:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
VEYA öyle bile olsa:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
idSütununuz bir otomatik artış sütunu ise, onu INSERT'inizden tamamen çıkarmanız ve mysql'in normal şekilde artırmasına izin vermeniz gerektiğini de unutmamak önemlidir .
If you're trying to insert a new row with ID 1 you should be usingINSERT INTO'dan bahsettiği gibi . Sizin durumunuzda, ID 1 zaten var olduğunda ve bu bir birincil veya benzersiz anahtar ve başarısız olduğunda eklemeye çalışıyorsunuz, bu nedenle ya UPDATE sözdizimini ya da INSERT .. ON DUPLICATE ANAHTAR sözdizimini kullanmalısınız
Bir WHERE yan tümcesini bir VALUES yan tümcesi ile birleştiremezsiniz. Bildiğim kadarıyla iki seçeneğiniz var.
INSERT değerleri belirten
INSERT INTO Users(weight, desiredWeight)
VALUES (160,145)
Bir SELECT ifadesi kullanarak INSERT
INSERT INTO Users(weight, desiredWeight)
SELECT weight, desiredWeight
FROM AnotherTable
WHERE id = 1
UPDATE sorguları için WHERE yan tümcesini kullanırsınız. INSERT yaptığınızda, satırın olmadığını varsayarsınız.
OP'nin açıklaması daha sonra;
GÜNCELLEME Kullanıcılar SET ağırlık = 160, istenilen Ağırlık = 45 burada id = 1;
MySQL'de, INSERT veya UPDATE istiyorsanız, REPLACE sorgusunu bir WHERE cümlesiyle kullanabilirsiniz. WHERE yoksa INSERTS, aksi takdirde GÜNCELLİR.
DÜZENLE
Bence Bill Karwin'in düşüncesi, yorumlardan çıkıp bunu açıkça ortaya koyacak kadar önemli. Teşekkürler Bill, MySQL ile çalışmayalı çok uzun zaman oldu, REPLACE ile ilgili sorunlar yaşadığımı hatırladım, ancak ne olduklarını unutmuşum. Bakmalıydım.
MySQL'in DEĞİŞTİRME işlevi böyle çalışmaz. Bir DELETE (satır yoksa işlem yok olabilir) ve ardından INSERT yapar. Sonuçlarını bir düşünün. tetikleyiciler ve yabancı anahtar bağımlılıkları. Bunun yerine INSERT ... ON DUPLICATE KEY UPDATE komutunu kullanın.
Alt seçim ifadeleri için where koşulunu kullanabileceğiniz için koşullar geçerlidir. Alt seçimleri kullanarak karmaşık eklemeleri gerçekleştirebilirsiniz.
Örneğin:
INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';
İnsert deyimine bir "select" yerleştirerek, birden çok ekleme işlemini hızlı bir şekilde gerçekleştirebilirsiniz.
Bu tür ek ile, eklenmekte olan satır sayısını kontrol etmek isteyebilirsiniz. Eklemeyi gerçekleştirmeden önce aşağıdaki SQL ifadesini çalıştırarak eklenecek satır sayısını belirleyebilirsiniz.
SELECT count(*)
FROM customers
WHERE city = 'Newark';
EXISTS koşulunu kullanarak yinelenen bilgileri girmediğinizden emin olabilirsiniz.
Örneğin, client_id birincil anahtarına sahip istemciler adlı bir tablonuz varsa, aşağıdaki ifadeyi kullanabilirsiniz:
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);
Bu ifade, bir alt seçime sahip birden çok kayıt ekler.
Tek bir kayıt eklemek isterseniz, aşağıdaki ifadeyi kullanabilirsiniz:
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);
İkili tablonun kullanımı, değerler şu anda bir tabloda depolanmamış olsa bile, değerlerinizi bir select deyimine girmenize olanak tanır.
Ayrıca bkz . Where cümlesi ile nasıl eklenir
Bu sorunun doğru cevabı şu şekilde olacaktır:
a). Eklemeden önce seçmek istiyorsanız:
INSERT INTO Users( weight, desiredWeight )
select val1 , val2 from tableXShoulatNotBeUsers
WHERE somecondition;
b). Kayıt zaten mevcutsa, eklemek yerine güncellemeyi kullanın:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Olmalı
Update Users set weight=160, desiredWeight=145 WHERE id = 1;
c). Aynı anda güncellemek veya eklemek istiyorsanız
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). AYNI tablodan bir kaydı CLONE istiyorsanız, bu nedenle eklediğiniz tablodan seçim yapamayacağınızı unutmayın.
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;
Sanırım bu güzel senaryoların çoğunu kapsıyor
Bir INSERT deyimi yaparken WHERE kullanamazsınız:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
olmalı:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );
WHERE bölümü yalnızca SELECT deyimlerinde çalışır:
SELECT from Users WHERE id = 1;
veya UPDATE ifadelerinde:
UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;
Kullanıcı girdisine bağlı olarak koşullu INSERT yapabilirsiniz. Bu sorgu yalnızca giriş değişkenleri '$ userWeight' ve '$ userDesiredWeight' boş değilse eklenecektir.
INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
INSERT'in gerçekte bir where cümlesine sahip olabileceği duruma bağlıdır.
Örneğin, bir formdaki değerleri eşleştiriyorsanız.
Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com
Mantıklı değil mi?
En basit yol, bir anahtar kısıtlamanızı ihlal etmek için IF kullanmaktır. Bu yalnızca INSERT IGNORE için çalışır, ancak INSERT'te kısıtlama kullanmanıza izin verir.
INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
WHERECümleden sonra bir koşul koyarsınız ve bu, verileri almak veya bir satırı güncellemek için kullanılır. Veri eklerken, satırın olmadığı varsayılır.
Öyleyse, soru şu, kimliği 1 olan herhangi bir satır var mı? öyleyse, MySQL UPDATE kullanın, aksi takdirde MySQL INSERT kullanın .
Veri eklemek için belirli bir kayıt numarası belirtiyorsanız, UPDATEifade yerine INSERTifade kullanmak daha iyidir .
Soru içinde yazdığınız bu tür sorgu, sahte bir sorgu gibidir.
Sorgunuz: -
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
Burada id = 1'i UPDATEbelirtiyorsunuz , bu yüzden mevcut kaydı güncellemek için daha iyi bir ifade kullanın . Durumunda WHEREcümle kullanılması tavsiye edilmez .INSERTUPDATE
Şimdi Güncelleme Sorgusunu Kullanıyor: -
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
WHERE-cümlesi her durumda INSERT-INTO-VALUES ile birlikte kullanılabilir mi?
Cevap kesinlikle hayır.
INSERT INTO ... VALUES ... sonrasına bir WHERE deyimi eklemek yalnızca geçersiz SQL'dir ve ayrıştırılmayacaktır.
MySQL tarafından döndürülen hata şudur:
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
Hata mesajının en önemli kısmı
... syntax to use near 'WHERE id = 1' ...
ayrıştırıcının burada bulmayı beklemediği belirli bölümü gösterir: WHERE yan tümcesi.
Hayır. Bildiğim kadarıyla bu sorguya WHERE yan tümcesini ekleyemezsiniz. Belki de SQL'imi de unutmuşumdur, çünkü zaten ona neden ihtiyacın olduğundan emin değilim.
Insert deyiminde where koşulunu kullanmamalısınız. Yapmak istiyorsanız, bir güncelleme ifadesinde insert kullanın ve ardından mevcut bir kaydı güncelleyin.
Aslında, Insert ifadesinde neden bir where cümlesine ihtiyacınız olduğunu öğrenebilir miyim?
Belki de size daha iyi bir seçenek önermemin nedenine dayanarak.
Bence en iyi seçeneğiniz INSERT yerine DEĞİŞTİRİN
Kullanıcılar (id, ağırlık, istenen Ağırlık) DEĞERLERİNE DEĞİŞTİRİN (1, 160, 145);
Mantıklı değil ... tam anlamıyla bile
INSERTdemek a eklemek new rowve içinde WHEREhangi satırdan bahsettiğinizi tanımladığınızı söylediğinizde SQL.
Bu nedenle, mevcut bir satırdaki bir koşulla yeni bir satır eklemek mümkün değildir.
Aşağıdakilerden birini seçmelisiniz:
A. UPDATEyerine kullanınINSERT
B. cümle kullanın INSERTve kaldırın WHERE(sadece söylüyorum ...) veya gerçekten kullanmak zorundaysanız INSERTve WHEREtek bir ifadede yalnızca INSERT..SELECT cümlesiyle yapılabilir ...
INSERT INTO Users( weight, desiredWeight )
SELECT FROM Users WHERE id = 1;
Ancak bu tamamen farklı bir amaca hizmet eder ve id'i Birincil Anahtar olarak tanımladıysanız bu ekleme başarısız olur, aksi takdirde id = 1 ile yeni bir satır eklenir.
Bunun eski bir gönderi olduğunun farkındayım ama umarım bu yine de birilerine yardımcı olur, umarım basit bir örnek:
arka fon:
Pek çok vakam vardı: aynı kullanıcı birden çok değerle birden çok kez listeleniyor ve yeni bir kayıt oluşturmak istedim, bu nedenle UPDATE benim durumumda bir anlam ifade etmiyordu ve tıpkı benim yapacağım gibi belirli bir kullanıcıya hitap etmem gerekiyordu WHERE yan tümcesi kullanarak.
INSERT into MyTable(aUser,aCar)
value(User123,Mini)
Bu yapıyı kullanarak, aslında belirli bir kullanıcıyı (başka kayıtları olan kullanıcı123) hedefliyorsunuz, bu yüzden gerçekten bir where cümlesine ihtiyacınız yok, sanırım.
çıktı şu olabilir:
aUser aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
mysql için doğru sözdizimi post yöntemini kullanarak ifadeye ekleyin:
$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
insert deyiminde where cümlesini kullanabileceğimizi sanmıyorum
INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
INSERT ve WHERE'ı birlikte kullanamazsınız. Aşağıdaki kod gibi belirli bir alanda belirli bir sütuna değer eklemek için UPDATE deyimini kullanabilirsiniz;
UPDATE Users
SET weight='160',desiredWeight ='145'
WHERE id =1
Belirtilen satıra değer eklemek için doğru formun şu olduğunu düşünüyorum:
UPDATE table SET column = value WHERE columnid = 1
çalışır ve Microsoft SQL Sunucusuna yazarsanız benzerdir
INSERT INTO table(column) VALUES (130) WHERE id = 1;
mysql'de tabloyu güncellemelisiniz.