पूर्ण त्रुटि:चेतावनी: असुरक्षित बयान BINLOG_FORMAT के बाद से बयान प्रारूप का उपयोग कर द्विआधारी लॉग के लिए लिखा = वक्तव्य
Warning: Unsafe statement written to the binary log using statement format
since BINLOG_FORMAT = STATEMENT. Statements writing to a table with an
auto-increment column after selecting from another table are unsafe because
the order in which rows are retrieved determines what (if any) rows will be
written. This order cannot be predicted and may differ on master and the
slave.
मैं केवल जब Django से कच्चे एसक्यूएल भागने की कोशिश कर यह त्रुटि प्राप्त करने लगते हैं। यदि मैं MySQL CLI क्लाइंट से SQL चलाता हूं तो मुझे एक ही त्रुटि नहीं मिलती है।
UPDATE picture p
JOIN (
SELECT @inc := @inc + 1 AS new_weight, id
FROM (SELECT @inc := 0) temp, (
SELECT id FROM picture
WHERE album_id = 5
ORDER BY taken_date ASC
) AS pw
) AS pw
ON p.id = pw.id
SET p.weight = pw.new_weight;
इसका उद्देश्य रिकॉर्ड आदेश, और आदेश डेटाबेस में इस आदेश लागू करने के लिए में वजन करने के लिए एक अनुक्रमिक संख्या लागू करने के लिए है: यहाँ एसक्यूएल है।
मैं ग्राहक के भीतर इस आदेश चलाकर अगर मैं इस मुद्दे को दोहराने कर सकते हैं देखने के लिए कोशिश की है लेकिन यह अभी भी सफलतापूर्वक चलता:
mysql> SET GLOBAL binlog_format = 'STATEMENT';
इसके अलावा, यह महत्वपूर्ण है कि मैं या तो हल या SQL के साथ काम करने को फिर से लिखने अंतिम बाधा के रूप में यह बाधा लगभग निश्चित रूप से मास्टर-गुलाम डेटाबेस सेटअप में चलने जा रही है।
* संपादित करें: थोड़ा और binlog_format
पढ़ने के बाद, ऐसा लगता है कि ROW या MIXED पूरी तरह से स्वीकार्य होगा, हालांकि मेरी मुख्य चिंता MySQL CLI में इस समस्या को दोहराने में सक्षम नहीं है कि यह जांचने के लिए कि MIXED/ROW इस समस्या को हल कर सकते हैं?
हाँ मुझे लगता है कि बस 'मिश्रित' पर स्विच करना उत्तर है, और इससे समस्या मेरे लिए ठीक हो गई। इच्छा है कि मैं सीएलआई पर दोहराना चाहूंगा लेकिन यह अब काम करता है :) – DanH