SQL problemi

Salam .Belə bir qurluşlu cədvəlim var.
CREATE TABLE mehsul(
ID VARCHAR(10) DEFAULT DEFAULT ‘0’,
mehsul VARCHAR(15) DEFAULT ‘0’,
PRIMARY KEY (İD)
)
Proqramı Servletdə (JAVA) yazmışam.Koddan xırda bir hissəni sizə göstərim.
“DELETE FROM mehsul WHERE ID='”+ms+”‘”;
“INSERT INTO mehsul VALUSE(‘”+id+”‘,”‘+ms+”‘)”;
Kod i.l’yir lakin b’zi hallarda belə bir səff veririr.
3159085-Duplicate entry 3159085-121 for key 1
Burada 121-məhsulun İD-sidir.Yəniki birinci DELETE əmri bəzi hallarda yerinə yetrilmir.Əgər kimsə bu haqda nəsə bilirsə kömək etməyiniznizi xaiş edərdim.


Yadda saxlama
Kateqoriya: Proqramlaşdırma . . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (12 cavab var)

(14:39, 20/06/2011 ) #2827

Kamil. Sen İD ye primary key qoymusan. Bu o demekdir ki, eyni şeyi tekrar İD sutununa daxil ede bilmezsen. İNSERT edende birinci sutun İD, ikinci mehsuldu. yaxsi olarki İNSERT mehsul (İD, mehsul) VALUES (‘asdas’, ‘asd’) kimi yazasan. Onda hansi sutuna ne yazildigi aydin goruner. Bir sozle mehsul cedvelin ID sutununda iki eyni sey ola bilmez. primary oldugundan. umud edirem ki, cavab qane eder.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(23:22, 20/06/2011 ) #2834

Salam.Bilrəmki iki eyni şey təkrar ola bilməz.Məhz buna görə İNSERT-dən öncə DELET -dən istifadə edirem.işləyir.Lakin bəzi hallarda DELET komandası işləmir.sadəcə mən bunun səbəbini bilmək istərdim.Bu hal userlərin sayı gün ərzində 1000-dən çox olanda baş verir.Ola bilərmiki Server artıq yüklənir? yoxsa MYSQL-in konfiqrasiyonu faylında userlərə məhduduiyət qoyulur?

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (14:26, 21/06/2011 ) #2837

    Bu texniki problem deyil, kod problemidir.
    Fikrimcə səhv də məhz Sənan yazan variantdır. Siz eyni primary key-i təkrar daxil etməyə cəhd göstərirsiniz. Loru desək primaru key bir dəfə istifadə üçün yarayır ancaq, sonra onu silsəniz belə, yenə də istifadə edə bilməsziniz. Məsələn İD-yə auto_increment verəndən sonra ən son İD=10-dursa onu silin. Belədə ən son İD 9 olmuş olacaq. Və yeni bir sətir insert edin, görəcəksiniz ki İD=11 oldu, baxmayaraq ki, 10 yoxdur.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(22:57, 22/06/2011 ) #2855

Salam hörmətli admin.İlk önçə cavablarınıza görə çox sağ olun.

CREATE TABLE mehsul(
ID VARCHAR(10) DEFAULT DEFAULT ’0′,
mehsul VARCHAR(15) DEFAULT ’0′,
PRIMARY KEY (İD)
)

cədvəlin qurluşu belədir.və

DELETE FROM mehsul WHERE ID='1001'
INSERT INTO mehsul VALUSE('1001','858')

Lakin proqram yüksək dərəcədə yüklənənda yəniki eyni zamanda 20-25 user işlədəndə

DELETE FROM mehsul WHERE ID='1001'

bloklanır yəniki locked olur bunun səbəini bilmək istərdim.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (01:32, 23/06/2011 ) #2856

    Sizin sayt shared hostinqdə yerləşir ya öz serverinizdə? Shared hostinqlərdə mysql max_connections məhdudiyyəti var və online istifadəçilərin bazaya paralel müraciətlərinin(davamlı connectionların) sayı müəyyən həddə çatanda belə şeylər olur. Odur ki ola bilər ki problem məhz bundadır. Çünki deyirsiniz ki məhz problem çox user olanda olur. Siz hostinq administratoru ilə əlaqə saxlayıb max_connections nəyə bərabərdir öyrənin. Müstəqil Linux serverdə isə bu parametri /etc/my.cnf faylından dəyişmək olur. (Başqa serverlərdə də my.cnf faylıdır, amma fərqli papkalarda yerləşir).
    Bir də ki niyə delete,insert edirsiniz ki, birbaşa update edə bilməzsiniz? İki əvəzinə bir sorğu.
    P.S. Bu sualda ilk əvvəldən query-də VALUES əvəzinə VALUSE yazmısınız, ümid edirəm ki bu sadəcə burda hərf səhvi ilə elə düşüb, saytda belə olsa ümumiyyətlə işləməz 🙂

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(17:09, 23/06/2011 ) #2859

Hərf səhfidir.max_connections =100 birdəki onu qeyd edimki hər bir bazaya müraciət bitəndəən sonra baza ilə əlaqə kəsilir.yeniki connectionlar açıq qalmır.nəisə……….

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (17:22, 23/06/2011 ) #2860

    Yuxarıdakı sualıma cavab vermədiniz. Update-lə bağlı. Və məncə 99% faiz dublicate entry səhvin nəticəsi odur. Siz delete, insert əvəzinə update-dən istifadə edin. Delete və insert olanda iki tranzaksiya olur, paralel başqa istifadəçi də bu əməliyyatı edəndə 2 tranzaksiya da ordan gəlir, əgər bu 2×2=4 sorğuda növbəlilik pozularsa(və eyni anda hər iki user müraciət edəndə olur bu) o halda bir user delete etməmiş o biri insert etmək istəyir eyni İD-ni, və dublicate error verir. Bunun ən effektiv həll yolu insert, delete-i ləğv edib update query-sindən istifadə etməkdir.

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(22:20, 23/06/2011 ) #2861

Hörmətli admin cavabınıza görə çox sağ olun.Bəs mən bir tranzaksiya ilə necə edə bilərəmki əgər varsa UPDATE olsun yoxsa İNSERT olsun? Yoxsa bunun üçündə bir SQL sorğu yazmalıyam?Minnətdaram sizə….

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (13:57, 18/09/2011 ) #3929

    Bunu üçün Oracle-da MERGE əmri var, amma gördüyüm qədər MySQL bunu dəstəkləmir. MySQL üçün belə bir variant var:

    INSERT ... ON DUPLICATE KEY UPDATE

    Sizin misal üçün belə olacaq:

    INSERT INTO mehsul (id,mehsul) VALUES ('1001','121')
      ON DUPLICATE KEY UPDATE mehsul='121';
    

    Sizin cədvəl və koda baxanda 2 sualım yarandı:
    1.İD sütunu niyə varchar kimi təyin etmisiniz? İçərisində rəqəmlər saxlayırsınızsa, int tipli və auto increment edin, daha yaxşı olar.

    2.SQL sorğularında niyə parameter istifadə etmirsiniz? Sizin bu sorğularınız qeyri optimaldır + SQL injection təhlükəsi var.

    “DELETE FROM mehsul WHERE ID=’”+ms+”‘”;
    

    JDBC-də PreparedStatement istifadə etməklə hər 2 problemin qarşısını almaq olar:

    String sql = "DELETE FROM mehsul WHERE ID=?";
    PreparedStatement ps = connection.prepareStatement(sql);
    ps.setString(1, "1001");
    ps.executeQuery();
    
    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

    (14:00, 18/09/2011 ) #3930

    INSERT … ON DUPLICATE KEY UPDATE ilə bağlı dokumentasiya
    http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

    Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(01:53, 27/06/2011 ) #2887

update table set value=’key’ where value=’key’

update sorgusu beledir cenab..

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(13:59, 27/09/2011 ) #4033

Cox sağ ol Ramin müəllim…..SQL injection təhlükəsi var.bəs bu təhlükəni aradan necə qaldıra bilərəm.?

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Bu suala aid öz sualım var:
Sual verin
Bu suala cavab vermək istəyirəm:
Cavab verin

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Son cavablar və şərhlər

MiMov cavab verdi - Özəl ip tv qurmaq (4 gün əvvəl)

MiMov cavab verdi - iptv onlayn paket almaq (4 gün əvvəl)

E. Hacı cavab verdi - 300$ Gömrük Limitini keçdim (10 gün əvvəl)

Software Developer cavab verdi - Aliexpress gömrük rüsumu nəyə görə hesablanır? (12 gün əvvəl)

AliyevYT cavab verdi - Honeygain, passiv gelir (13 gün əvvəl)

Sıradan biri cavab verdi - IMEI qeydiyyatı (15 gün əvvəl)

Fariz Huseynli cavab verdi - cerimenin öyrənilməsi (18 gün əvvəl)

Software Developer cavab verdi - cerimenin öyrənilməsi (19 gün əvvəl)

Software Developer cavab verdi - Kapital bank rekvizit payoneer (19 gün əvvəl)

Software Developer cavab verdi - Hər hansı kompyuter proqramının (EXE faylı) etibarlı olub olmaması yəni qanuni və ya saxta olduğunu necə bilmək olar ? (19 gün əvvəl)

txmn cavab verdi - Hərbi biletsiz, möhlətsiz iş (21 gün əvvəl)

Galaxy cavab verdi - X-də (Twitter) premium abunəliklə bağlı çətinlik (22 gün əvvəl)

Rsad Ncfli cavab verdi - Payonner 2024 ilə bağlı sual (28 gün əvvəl)

Software Developer cavab verdi - Payonner 2024 ilə bağlı sual (28 gün əvvəl)

Rsad Ncfli cavab verdi - Payonner 2024 ilə bağlı sual (28 gün əvvəl)

Software Developer - 615 xal

E. Hacı - 607 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 434 xal

Maqa - 346 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Sistemə daxil olmuş 23229 sualdan 92%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2024