Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL पर गतिरोध पंक्तियों को हटा रहा है

DML करते समय संचालन, InnoDB स्कैन की गई सभी पंक्तियों को लॉक करता है, मेल नहीं खाता।

इस टेबल लेआउट पर विचार करें:

DROP TABLE t_tran;

CREATE TABLE t_tran (id INT NOT NULL PRIMARY KEY, data INT NOT NULL, KEY ix_tran_data (data)) Engine=InnoDB;

DROP TABLE t_tran;

CREATE TABLE t_tran (id INT NOT NULL PRIMARY KEY, data INT NOT NULL, KEY ix_tran_data (data)) Engine=InnoDB;

INSERT
INTO    t_tran
VALUES
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
(6, 6),
(7, 7),
(8, 8);

START TRANSACTION;

DELETE
FROM    t_tran
WHERE   data = 2
        AND id <= 5;

इस मामले में, MySQL RANGE का चयन करता है id . पर पहुंच पथ , जिसे वह REF . से सस्ता मानता है data पर ।

समवर्ती लेनदेन में, आप 6 rows पंक्तियों को हटाने या अपडेट करने में सक्षम होंगे , 7 , 8 लेकिन पंक्तियाँ नहीं 1 करने के लिए 5 चूंकि वे बंद हैं (इस तथ्य के बावजूद कि केवल पंक्ति 2 प्रभावित हुआ था)।

अगर आप id <= 5 . हटाते हैं उपरोक्त शर्त से, आप 3 row के अलावा किसी भी पंक्ति को हटा सकेंगे ।

दुर्भाग्य से, आप MySQL को नियंत्रित नहीं कर सकते DML . में पहुंच पथ संचालन।

सबसे अच्छा आप यह कर सकते हैं कि अपनी शर्तों को ठीक से अनुक्रमित करें और आशा करें कि MySQL इन अनुक्रमणिकाओं को चुनेंगे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO का उपयोग करके MYSQL क्वेरी के परिणाम दो बार प्रिंट किए गए

  2. पुनर्निर्माण पर प्रारंभिक डेटा डालने वाला इकाई फ्रेमवर्क

  3. Django/MySQL-पायथन - पुराने (पूर्व-4.1.1) प्रमाणीकरण प्रोटोकॉल का उपयोग कर कनेक्शन अस्वीकार कर दिया गया (क्लाइंट विकल्प 'सुरक्षित_ऑथ' सक्षम)

  4. केकपीएचपी मॉडल क्वेरी रिटर्न डेटा फ़ॉर्मेटिंग

  5. पॉलिमॉर्फिक टेबल पर कॉलम द्वारा लारवेल ऑर्डर परिणाम