MySQL त्रुटि कोड: MySQL कार्यक्षेत्र में अद्यतन के दौरान 1175


816

मैं visitedइसे मान देने के लिए कॉलम को अपडेट करने की कोशिश कर रहा हूं । मैं MySQL कार्यक्षेत्र का उपयोग करता हूं, और मैं कार्यक्षेत्र के अंदर से SQL संपादक में बयान लिख रहा हूं। मैं निम्नलिखित कमांड लिख रहा हूँ:

UPDATE tablename SET columnname=1;

यह मुझे निम्नलिखित त्रुटि देता है:

आप सुरक्षित अपडेट मोड का उपयोग कर रहे हैं और आपने WHERE के बिना एक तालिका को अपडेट करने का प्रयास किया है जो सुरक्षित मोड को अक्षम करने के लिए एक कुंजी कॉलम का उपयोग करता है, टॉगल करें ...।

मैं निर्देशों का पालन किया है, और मैं अनचेक safe updateसे विकल्प Editमेनू तो Preferencesफिर SQL Editor। वही त्रुटि अभी भी दिखाई देती है और मैं इस मान को अपडेट नहीं कर पा रहा हूं। कृपया, मुझे बताएं कि क्या गलत है?


4
क्या आप जानते हैं कि यह आपकी तालिका की उन सभी पंक्तियों को अपडेट करेगा जहाँ = = विज़िट किए जाने के लिए = 1 पर गए हैं? क्या ये वही है जो तुम चाहते हो?
मार्क बायर्स

23
"सुरक्षित अपडेट" को अनचेक करने के बाद, नीचे दिए गए चरण का पालन करें: क्वेरी -> सर्वर पर फिर से कनेक्ट करें। अब अपनी क्वेरी
रिपन अल वसीम

5
इस परिवर्तन को प्रभावित करने से पहले आपको MySQL सर्वर (MySQL कनेक्शन को पुनरारंभ करें) को फिर से कनेक्ट करना होगा।
फिलिप ओल्सन

जवाबों:


1611

ऐसा लगता है कि आपके MySql सत्र में सुरक्षित-अपडेट विकल्प सेट है। इसका अर्थ है कि आप उस primary keyखंड में किसी कुंजी (पूर्व ) को निर्दिष्ट किए बिना रिकॉर्ड को अपडेट या हटा नहीं सकते हैं ।

प्रयत्न:

SET SQL_SAFE_UPDATES = 0;

या आप नियम (उपयोग primary keyमें where clause) का पालन करने के लिए अपनी क्वेरी को संशोधित कर सकते हैं ।


मैंने उल्लेख किया है कि मैंने पहले से ही GUI से सुरक्षित अपडेट विकल्प को निष्क्रिय कर दिया है जो उसी तरह का प्रभाव है जैसे कि मैंने कमांड टाइप किया था। हालाँकि, आपके उत्तर के लिए धन्यवाद, लेकिन मैंने पहले ही अपने प्रश्न का उत्तर दे दिया। समस्या क्या थी, यह जानने के लिए मेरे उत्तर की जाँच करें।
जूरी ए

8
एक बार जब आप GUI में विकल्प बदलते हैं, तो आपको सेटिंग को ठीक से सेट करने के लिए डेटाबेस को फिर से कनेक्ट करना होगा।
टिम कोसिएल्स्की

31
SET SQL_SAFE_UPDATES = 1जब आप यह कर लें, तो इसे वापस सेट करना सुनिश्चित करें , क्योंकि यह एक सार्थक सुरक्षा विशेषता है।
StockB

4
मैं StockB से असहमत हूं ... आप SQL का उपयोग करते समय बेहतर होने पर इसे रखना चाह सकते हैं ... लेकिन एक बार जब आप जानते हैं कि आप क्या कर रहे हैं ... तो यह बात पूरी तरह से बेकार है। आप किसी भी तरह से उत्पादन सर्वर पर अपना सामान विकसित नहीं कर रहे हैं, तो भी अगर आप गड़बड़ करते हैं, तो केवल एक चीज जिसे आप तोड़ रहे हैं वह आपका देव सर्वर है .. जो किसी को भी इसके बारे में कोई जानकारी नहीं देता है।
मैथ्यू टर्कोट

3
मैं केवल यह कहने आया था कि मैंने पिछले 6 महीनों में 20 बार इस पद की खोज की है क्योंकि मेरे पास यह विकल्प हमेशा 11 वर्षों के लिए गलत था, लेकिन अब मैं इस सेट पर एक कंपनी के साथ काम कर रहा हूं जो कि विकास और उत्पादन पर सही है। डिफ़ॉल्ट रूप से इसे 0 पर सेट करने के कई कारण हैं, उदाहरण के लिए जब आप स्टैंड-अलोन सुविधाएँ विकसित करते हैं जिन्हें आप सीधे सीएसवी को निर्यात करना चाहते हैं और फिर इसे निर्यात या कुछ समान के रूप में चिह्नित कर सकते हैं। अन्य बार यह वैश्विक अद्यतनों के कारण कष्टप्रद है जो स्पष्ट रूप से कोई pk फ़िल्टर नहीं है। मैं इसे वास्तविक उपयोगी सुविधा की तुलना में नॉब-प्रोटेक्शन के रूप में अधिक देखता हूं।
जोएलबॉनेट

454

UPDATE कमांड निष्पादित करने से पहले निम्न चरणों का पालन करें: MySQL कार्यक्षेत्र में

  1. Edit-> पर जाएंPreferences
  2. "SQL Editor"टैब पर क्लिक करें और uncheck"सुरक्षित अपडेट"check box
  3. Query-> Reconnect to Server // लॉगआउट करें और फिर लॉगिन करें
  4. अब अपनी SQL क्वेरी को निष्पादित करें

ps, MySQL डेमॉन को पुनरारंभ करने की कोई आवश्यकता नहीं है!


20
संस्करण 6.3 के लिए चरण 2 के "Sql Editor"बजाय होना चाहिए "Sql Queries"और फिर नीचे की तरफ एक चेक बॉक्स है"Safe Updates"
meconroy

1
अगर यह एक समय की बात है तो मैं आपको इसे वापस चालू करने का सुझाव देता हूं क्योंकि अगर आप सावधान नहीं हैं तो यह आपके डेटा को बहुत आसानी से बदल सकता है
Frankenmint

2
धन्यवाद conroy। कुछ समय के लिए मैं उस बॉक्स को नहीं देख सका। मुझे बस खिड़की को बड़ा करना था।
arn-arn

शायद उन्होंने इसे स्थानांतरित कर दिया, लेकिन MySQL कार्यक्षेत्र 6.0 में, यह "SQL क्वेरी" के तहत है, "SQL संपादक" नहीं
MPelletier

1
यहाँ भी वही, इसे देखने के लिए थोड़ा नीचे स्क्रॉल करना पड़ा।
एलोन जीतो

167
SET SQL_SAFE_UPDATES=0;
UPDATE tablename SET columnname=1;
SET SQL_SAFE_UPDATES=1;

4
दुर्भाग्य से अन्य क्वेरी-आधारित समाधान मेरे लिए काम नहीं करते थे। लेकिन यह एक किया! मैं सराहना करता हूं कि आपने सुरक्षित अपडेट को चालू करने के लिए एक पंक्ति जोड़ी।
शेरलहोमन

1
मैं वास्तव में इसे पसंद करता हूं क्योंकि यह संभवतः सबसे सामान्य है जबकि अभी भी सुरक्षित है।
ना

117

SQL_SAFE_UPDATES को 0 पर सेट करने की आवश्यकता नहीं है , मैं वास्तव में इसे इस तरह से करने के लिए हतोत्साहित करूंगा। SAFE_UPDATES एक REASON के लिए डिफ़ॉल्ट रूप से है। आप सुरक्षा बेल्ट और अन्य चीजों के बिना एक कार चला सकते हैं यदि आप जानते हैं कि मेरा क्या मतलब है?) बस इसमें जोड़ें कि एक कुंजी-मूल्य जो एक प्राथमिक-कुंजी की तरह सब कुछ 0 से तुलना करता है, इसलिए लिखने के बजाय:

UPDATE customers SET countryCode = 'USA'
    WHERE country = 'USA';               -- which gives the error, you just write:

UPDATE customers SET countryCode = 'USA'
    WHERE (country = 'USA' AND customerNumber <> 0); -- Because customerNumber is a primary key you got no error 1175 any more.

अब आप आश्वासन दिया जा सकता है कि हर रिकॉर्ड (ALWAYS) अपडेट किया गया है जैसा कि आप उम्मीद करते हैं।


3
यह प्रतिभा है!
अमोस लॉन्ग

सराहना की गई उत्तर: +1
आसिफ रज़ा

2
हाहा, यह एक अच्छी चाल है। मैंने WHERE id > 0इस लाइन के साथ एक ट्रिक की तरह इस्तेमाल किया ।
Csaba Toth

यह मेरे लिए काम नहीं करता है, यह मुझे एक ही संदेश दिखा रहा है। मैंने इसे सुरक्षित अपडेट मोड को निष्क्रिय करके इसे हल किया: -Edit -> प्राथमिकताएं -> Sql Editor तब सुरक्षित अपडेट अनचेक करें।
अब्देलहदी लाहौल

2
हालांकि, यह वास्तव में इसे कितना सुरक्षित बना रहा है?
मैट मैसर्समिथ

106

सभी की जरूरत है: एक नई क्वेरी शुरू करें और चलाएं:

SET SQL_SAFE_UPDATES = 0;

फिर: उस क्वेरी को चलाएं जिसे आप चलाने की कोशिश कर रहे थे जो पहले काम नहीं कर रहा था।


7
एसओ में आपका स्वागत है, टूर पेज और हेल्प पेज को पढ़ना सुनिश्चित करें , और इस तरह के उत्तर पोस्ट करने से बचें क्योंकि नीचे दिए गए कई उत्तर सटीक एक ही बात कहते हैं और महीनों पहले पोस्ट किए गए हैं
WOUNDEDStevenJones

1
क्वेरी चलाने के बाद आप इस विकल्प को फिर से सक्षम कर सकते हैं।
kta

यह उत्तर क्या जोड़ता है? आपने अभी दो साल बाद हबीबिलाह के रूप में एक ही बात पोस्ट की। कर्म काटते करना चाहते हैं?
ल्यूक


66

त्रुटि कोड: 1175। आप सुरक्षित अपडेट मोड का उपयोग कर रहे हैं और आपने WHERE के बिना एक तालिका को अपडेट करने का प्रयास किया है जो कि सेफ मोड को अक्षम करने के लिए एक कुंजी कॉलम का उपयोग करता है, प्राथमिकता में विकल्प को>> SQL एडिटर को फिर से कनेक्ट करें और फिर से कनेक्ट करें।

"सुरक्षित अपडेट मोड" अस्थायी बंद करें

SET SQL_SAFE_UPDATES = 0;
UPDATE options SET title= 'kiemvieclam24h' WHERE url = 'http://kiemvieclam24h.net';
SET SQL_SAFE_UPDATES = 1;

"सेफ अपडेट मोड" को हमेशा के लिए बंद कर दें

मायकेल वर्कबेंच 8.0:

MySQL Workbench => [ Edit ] => [ Preferences ] -> [ SQL Editor ] -> Uncheck "Safe Updates"

यहां छवि विवरण दर्ज करें पुराना संस्करण:

MySQL Workbench => [Edit] => [Preferences] => [SQL Queries]

41
  1. पसंद...
  2. "सुरक्षित अपडेट" ...
  3. सर्वर को पुनरारंभ करें

पसंद...

सुरक्षित अद्यतन सर्वर को पुनरारंभ करें


यह स्वीकृत उत्तर होना चाहिए था। यह अफ़सोस की बात है कि यह नहीं किया गया है
ErrorrrDetector

1
आपको सर्वर को पुनरारंभ नहीं करना चाहिए। यह केवल कनेक्शन को बंद करने और फिर से खोलने के लिए पर्याप्त होना चाहिए।
मार्क एल।

1
मैक में, प्राथमिकताएँ MySQLWorkbench शीर्ष मेनू के अंतर्गत हैं।
zwitterion

36
SET SQL_SAFE_UPDATES=0;

या

के लिए जाओ Edit --> Preferences

SQL Queriesटैब पर क्लिक करें और चेक बॉक्स को अनचेक Safe Updates करें

Query --> Reconnect to Server

अब अपनी sql क्वेरी को निष्पादित करें


26

यदि आप एक सुरक्षित मोड में हैं, तो आपको जहां क्लॉज में आईडी प्रदान करनी है। तो इस तरह से कुछ काम करना चाहिए!

UPDATE tablename SET columnname=1 where id>0

1
यह पृष्ठ इस तथ्य की पुष्टि करता है: bennadel.com/blog/…
DivDiff

20

WorkBench पर मैंने इसे सुरक्षित अपडेट मोड को निष्क्रिय करके हल किया:

-Edit -> प्राथमिकताएं -> Sql Editor तब सुरक्षित अद्यतन अनचेक करें।


7
यह काम करता है लेकिन, मुझे MySQL कार्यक्षेत्र को पुनः आरंभ करना पड़ा।
लानिल मरासिंघे

17

मुझे जवाब मिल गया। समस्या यह थी कि मुझे स्कीमा नाम के साथ तालिका का नाम देना होगा। यानी, कमांड होना चाहिए:

UPDATE schemaname.tablename SET columnname=1;

सबको शुक्रीया।


5
आप बाएं पैनल पर स्कीमा का चयन करके स्कीमा नाम का उल्लेख करने से बच सकते हैं। बाएं पैनल पर स्कीमा का चयन करने का मतलब है कि आप चयनित स्कीमा / डेटाबेस का उपयोग कर रहे हैं
रिपन अल वसीम

10
यह सवाल (और शीर्षक) में वर्णित मुद्दे को हल करने का जवाब नहीं है। आपको स्वीकृत के रूप में दूसरे को चिह्नित करना चाहिए।
T30

मैंने योजनाबद्ध नाम के साथ प्रयास किया लेकिन एक ही त्रुटि, अद्यतन qms-active-db.gh_table सेट बुकमार्क = '1660_207100000001000'
Code_Mode

3
इसका जवाब नहीं है!
ईजेकील विक्टर

1
गलत जवाब, सही जवाब (नीचे) Habibillah द्वारा उत्तर दिया है
हरिहरन रों

14

MySQL Workbech संस्करण 6.2 में वरीयता SQLQueriesविकल्पों से बाहर नहीं निकलता ।

इस मामले में इसका उपयोग संभव है: SET SQL_SAFE_UPDATES=0;


1
यह मौजूद है, लेकिन विकल्प "SQL संपादक" के अंतर्गत है।
फिलिप ओल्सन

मुझे यह विकल्प दिखाई नहीं दे रहा है। कृपया आप एक स्क्रीनशॉट प्राप्त कर सकते हैं। धन्यवाद
ferdiado

प्राथमिकताएँ खोलें -> SQL संपादक टैब -> सबसे नीचे। 6.2-बीटा रिलीज़ में इस विकल्प का अभाव था, इसलिए शायद आपको 6.2.3+ पर अपग्रेड करना होगा।
फिलिप ओल्सन 20

मेरा संस्करण 6.3 है, यह
निम्न है

12

सबसे सरल उपाय पंक्ति की सीमा को परिभाषित करना और निष्पादित करना है। यह सुरक्षा उद्देश्यों के लिए किया जाता है।


2
इस समाधान पर +1। टेबल से हटाएं जहां कॉलम = 'xyz' की सीमा 9999999999 है
फ़्लाइंगज़ेब्रा 1

2
यह उत्तर स्वीकृत उत्तर होना चाहिए क्योंकि यह सबसे कम असुरक्षित तरीका है।
जूलियन

7

चूंकि प्रश्न का उत्तर दिया गया था और सुरक्षित अपडेट के साथ इसका कोई लेना-देना नहीं था, यह गलत जगह हो सकती है; मैं सिर्फ जानकारी जोड़ने के लिए पोस्ट करूंगा।

मैंने एक अच्छा नागरिक बनने की कोशिश की और आईडी की एक अस्थायी तालिका का उपयोग करने के लिए क्वेरी को संशोधित किया जिसे अपडेट किया जाएगा:

create temporary table ids ( id int )
    select id from prime_table where condition = true;
update prime_table set field1 = '' where id in (select id from ids);

विफलता। अद्यतन को संशोधित:

update prime_table set field1 = '' where id <> 0 and id in (select id from ids);

वह काम किया। अच्छी तरह से - अगर मैं हमेशा सुरक्षित अद्यतन जाँच के आसपास कुंजी <> 0 जोड़ रहा हूँ, या यहां तक ​​कि SQL_SAFE_UPDATE = 0 सेट करता हूं, तो मैंने अपनी क्वेरी पर 'चेक' खो दिया है। मैं विकल्प को स्थायी रूप से बंद कर सकता हूं। मुझे लगता है कि यह हटाने और एक के बजाय एक दो कदम प्रक्रिया को अद्यतन करने के लिए बनाता है .. लेकिन अगर आप पर्याप्त तेजी से टाइप करते हैं और कुंजी विशेष होने के बारे में सोचना बंद कर देते हैं लेकिन सिर्फ एक उपद्रव के रूप में ..


4

सच है, यह सबसे उदाहरण के लिए व्यर्थ है। लेकिन अंत में, मैं निम्नलिखित कथन पर आया और यह ठीक काम करता है:

update tablename  set column1 = '' where tablename .id = (select id from tablename2 where tablename2.column2 = 'xyz');

3

यह मैक के लिए है, लेकिन वरीयताओं के स्थान को छोड़कर अन्य ओएस के लिए समान होना चाहिए।

त्रुटि तब मिलती है जब हम एक असुरक्षित DELETEऑपरेशन की कोशिश करते हैं

यह त्रुटि मिलने पर प्राथमिकताएं पर क्लिक करें

नई विंडो पर, विकल्प को अनचेक करें Safe updates

सुरक्षित अपडेट अनचेक करें

फिर बंद करें और कनेक्शन को फिर से खोलें। सेवा को पुनरारंभ करने की आवश्यकता नहीं है।

अब हम DELETEफिर से सफल परिणामों के साथ प्रयास करने जा रहे हैं ।

यहां छवि विवरण दर्ज करें

तो इस सुरक्षित अपडेट के बारे में सब क्या है? यह कोई बुरी बात नहीं है। इस बारे में MySql का कहना है।

--safe-updatesविकल्प का उपयोग करना

शुरुआती लोगों के लिए, एक उपयोगी स्टार्टअप विकल्प --safe-updates(या --i-am-a-dummy, जिसका प्रभाव समान है)। यह उन मामलों के लिए मददगार है जब आपने एक DELETE FROM tbl_nameबयान जारी किया होगा, लेकिन WHEREखंड को भूल गए । आम तौर पर, इस तरह के एक बयान तालिका से सभी पंक्तियों को हटा देता है। इसके साथ --safe-updates, आप केवल उन प्रमुख मानों को निर्दिष्ट करके पंक्तियों को हटा सकते हैं जो उन्हें पहचानते हैं। इससे दुर्घटनाओं को रोकने में मदद मिलती है।

जब आप --safe-updatesविकल्प का उपयोग करते हैं , तो MySQL सर्वर से कनेक्ट होने पर mysql निम्नलिखित स्टेटमेंट जारी करता है:

SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;

उत्पादन डेटाबेस से निपटते समय इस विकल्प को चालू करना सुरक्षित है। अन्यथा, आपको बहुत सावधानी बरतनी चाहिए कि गलती से महत्वपूर्ण डेटा को नष्ट न करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.