MySQL
त्रुटि कोड
खोज…
त्रुटि कोड 1064: सिंटैक्स त्रुटि
select LastName, FirstName,
from Person
संदेश देता है:
त्रुटि कोड: 1064. आपके SQL सिंटैक्स में एक त्रुटि है; पंक्ति 2 पर 'व्यक्ति से पास' का उपयोग करने के लिए सही सिंटैक्स के लिए अपने MySQL सर्वर संस्करण से मेल खाती पुस्तिका को देखें।
MySQL से "1064 त्रुटि" संदेश प्राप्त करने का अर्थ है कि वाक्यविन्यास त्रुटियों के बिना क्वेरी को पार्स नहीं किया जा सकता है। दूसरे शब्दों में यह क्वेरी का कोई मतलब नहीं है।
त्रुटि संदेश में उद्धरण क्वेरी के पहले चरित्र से शुरू होता है जिसे MySQL समझ नहीं पाता कि कैसे पार्स किया जाए। इस उदाहरण में MySQL from Person
संदर्भ में, समझ में नहीं आता है। इस मामले में, from Person
तुरंत पहले एक अतिरिक्त अल्पविराम है। अल्पविराम MySQL बताता है कि SELECT
क्लॉज में एक और कॉलम विवरण की उम्मीद है
एक वाक्यविन्यास त्रुटि हमेशा कहती है ... near '...'
। उद्धरण की शुरुआत में वह चीज़ बहुत निकट है जहाँ त्रुटि है। किसी त्रुटि का पता लगाने के लिए, उद्धरणों में पहले टोकन और उद्धरण से पहले अंतिम टोकन देखें।
कभी-कभी मिलेगा ... near ''
; वह है, उद्धरणों में कुछ भी नहीं। इसका मतलब है कि पहला चरित्र MySQL यह पता नहीं लगा सकता है कि यह कथन के अंत में है या शुरुआत में है। इससे पता चलता है कि क्वेरी में असंतुलित उद्धरण ( '
या "
) या असंतुलित कोष्ठक हैं या आपने सही तरीके से पहले बयान को समाप्त नहीं किया है।
एक संग्रहित नियमित के मामले में, आप ठीक ढंग से उपयोग करने के लिए भूल गए हैं DELIMITER
।
इसलिए, जब आप त्रुटि 1064 प्राप्त करते हैं, तो क्वेरी के पाठ को देखें, और त्रुटि संदेश में उल्लिखित बिंदु ढूंढें। उस बिंदु के चारों ओर क्वेरी के पाठ का निरीक्षण करें।
यदि आप किसी को 1064 त्रुटि का निवारण करने में मदद करने के लिए कहते हैं, तो यह संपूर्ण क्वेरी के पाठ और त्रुटि संदेश के पाठ दोनों को प्रदान करने के लिए सबसे अच्छा है।
त्रुटि कोड 1175: सुरक्षित अद्यतन
को शामिल किए बिना अद्यतन या हटाने के रिकॉर्ड की कोशिश करते हुए यह त्रुटि दिखाई WHERE
खंड का उपयोग करता है KEY
स्तंभ।
डिलीट या अपडेट को वैसे भी निष्पादित करने के लिए - टाइप करें:
SET SQL_SAFE_UPDATES = 0;
सुरक्षित मोड को फिर से सक्षम करने के लिए - टाइप करें:
SET SQL_SAFE_UPDATES = 1;
त्रुटि कोड 1215: विदेशी कुंजी बाधा नहीं जोड़ सकता
यह त्रुटि तब होती है जब विदेशी कुंजी ( FK
) आवश्यकताओं के त्वरित लुकअप सत्यापन को संभालने के लिए तालिकाओं को पर्याप्त रूप से संरचित नहीं किया जाता है जो कि डेवलपर को अनिवार्य है।
CREATE TABLE `gtType` (
`type` char(2) NOT NULL,
`description` varchar(1000) NOT NULL,
PRIMARY KEY (`type`)
) ENGINE=InnoDB;
CREATE TABLE `getTogethers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` char(2) NOT NULL,
`eventDT` datetime NOT NULL,
`location` varchar(1000) NOT NULL,
PRIMARY KEY (`id`),
KEY `fk_gt2type` (`type`), -- see Note1 below
CONSTRAINT `gettogethers_ibfk_1` FOREIGN KEY (`type`) REFERENCES `gtType` (`type`)
) ENGINE=InnoDB;
नोट 1: इस तरह से एक कुंजी स्वचालित रूप से बनाई जाएगी यदि एफके परिभाषा के कारण उस पंक्ति में है जो इसका अनुसरण करती है। डेवलपर इसे छोड़ सकता है, और यदि आवश्यक हो तो कुंजी (उर्फ सूचकांक) जोड़ा जाएगा। की यह डेवलपर द्वारा छोड़ी गई किया जा रहा एक उदाहरण में नीचे दिखाया गया है someOther
।
अब तक बहुत अच्छा, नीचे कॉल तक।
CREATE TABLE `someOther` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`someDT` datetime NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `someOther_dt` FOREIGN KEY (`someDT`) REFERENCES `getTogethers` (`eventDT`)
) ENGINE=InnoDB;
त्रुटि कोड: 1215. विदेशी कुंजी बाधा नहीं जोड़ सकते
इस स्थिति में यह संदर्भित तालिका getTogethers
में किसी इंडेक्स की कमी के कारण विफल हो जाता है ताकि किसी getTogethers
की शीघ्र खोज को नियंत्रित किया जा eventDT
। अगले बयान में हल किया जाना है।
CREATE INDEX `gt_eventdt` ON getTogethers (`eventDT`);
तालिका getTogethers
को संशोधित किया गया है, और अब someOther
का निर्माण सफल होगा।
MySQL मैनुअल पेज से प्रमुख कुंजी बाधाओं का उपयोग :
MySQL को विदेशी कुंजियों और संदर्भित कुंजियों पर अनुक्रमित करने की आवश्यकता होती है ताकि विदेशी कुंजी जांच तेज़ हो सके और टेबल स्कैन की आवश्यकता न हो। संदर्भित तालिका में, एक सूचकांक होना चाहिए जहां विदेशी कुंजी कॉलम को उसी क्रम में पहले कॉलम के रूप में सूचीबद्ध किया गया है। इस तरह के सूचकांक को संदर्भित तालिका पर स्वचालित रूप से बनाया जाता है यदि यह मौजूद नहीं है।
विदेशी कुंजी में संदर्भित कॉलम और संदर्भित कुंजी में समान डेटा प्रकार होना चाहिए। पूर्णांक प्रकारों का आकार और संकेत समान होना चाहिए। स्ट्रिंग प्रकारों की लंबाई समान होने की आवश्यकता नहीं है। गैर-चरित्र (वर्ण) स्ट्रिंग कॉलम के लिए, वर्ण सेट और टकराव समान होना चाहिए।
InnoDB किसी भी इंडेक्स कॉलम या कॉलम के समूह को संदर्भित करने के लिए एक विदेशी कुंजी की अनुमति देता है। हालांकि, संदर्भित तालिका में, एक सूचकांक होना चाहिए जहां संदर्भित कॉलम उसी क्रम में पहले कॉलम के रूप में सूचीबद्ध हैं।
ध्यान दें कि पहले (बाएं-सबसे) स्तंभों और एक प्राथमिक कुंजी आवश्यकता (हालांकि अत्यधिक सलाह दी गई) की कमी के ऊपर अंतिम बिंदु।
एक संदर्भ (बच्चे) तालिका के सफल निर्माण पर, आपके लिए स्वचालित रूप से बनाई गई कोई भी कुंजी निम्नलिखित जैसे एक कमांड के साथ दिखाई देती है:
SHOW CREATE TABLE someOther;
इस त्रुटि का सामना करने के अन्य सामान्य मामलों में शामिल हैं, जैसा कि डॉक्स से ऊपर बताया गया है, लेकिन इसे उजागर किया जाना चाहिए:
में मालूम होता है तुच्छ मतभेदों
INT
जो हस्ताक्षरित किया गया है, की ओर इशारा करते हुएINT UNSIGNED
।मल्टी-कॉलम (मिश्रित) कुंजी और पहले (बाएं-सबसे) ऑर्डर करने की आवश्यकताओं को समझने में डेवलपर्स को परेशानी हो रही है।
1045 प्रवेश से वंचित
"GRANT" और "पुनर्प्राप्त रूट पासवर्ड" में चर्चा देखें।
1236 प्रतिकृति में "असंभव स्थिति"
आमतौर पर इसका मतलब यह है कि मास्टर दुर्घटनाग्रस्त हो गया और sync_binlog
बंद हो गया। इसका समाधान गुलाम पर अगली बिनॉग फाइल (मास्टर को देखें) के CHANGE MASTER to POS=0
पर चेंज करने के लिए है।
कारण: मास्टर अपने बिनलॉग (जब sync_binlog=OFF
) को फ्लश करने से पहले दास को प्रतिकृति आइटम भेजता है। यदि मास्टर फ्लश से पहले क्रैश हो जाता है, तो स्लेव पहले से ही बनलॉग पर फ़ाइल के अंत में तार्किक रूप से स्थानांतरित हो गया है। जब मास्टर फिर से शुरू होता है, तो यह एक नया बिनलॉग शुरू करता है, इसलिए उस बिनलॉग की शुरुआत में परिवर्तन सबसे अच्छा उपलब्ध समाधान है।
यदि आप अतिरिक्त I / O का कारण बन सकते हैं, तो एक लंबी अवधि का समाधान sync_binlog=ON
।
(यदि आप GTID के साथ चल रहे हैं, ...?)
2002, 2003 कनेक्ट नहीं कर सकता
फ़ायरवॉल समस्या अवरोधन पोर्ट 3306 के लिए जाँच करें।
कुछ संभव निदान और / या समाधान
- क्या सर्वर वास्तव में चल रहा है?
- "सर्विस फ़ायरवॉल स्टॉप" और "सिस्टेक्टल डिसेबल फ़ायरवॉल"
- टेलनेट मास्टर 3306
-
bind-address
जांच करें - चेक
skip-name-resolve
- सॉकेट की जाँच करें।
1067, 1292, 1366, 1411 - संख्या, तिथि, डिफ़ॉल्ट, आदि के लिए खराब मान।
1067 यह संभवतः TIMESTAMP
चूक से संबंधित है, जो समय के साथ बदल गए हैं। TIMESTAMP defaults
& Times पृष्ठ में TIMESTAMP defaults
देखें। (जो अभी तक मौजूद नहीं है)
1292/1366 DOUBLE / पूर्णांक पत्र या अन्य वाक्यविन्यास त्रुटियों के लिए जाँच करें। जांचें कि कॉलम संरेखित हैं; शायद आपको लगता है कि आप VARCHAR
में डाल रहे हैं, लेकिन यह एक संख्यात्मक कॉलम के साथ संरेखित है।
1292 अतीत या भविष्य में बहुत दूर तक जाँच करें। डेलाइट बचत में बदलाव होने पर सुबह 2 से 3 बजे के बीच की जाँच करें। खराब सिंटैक्स की जांच करें, जैसे कि +00
टाइमज़ोन सामान।
1292 वार्बल उस VARIABLE
लिए अनुमत मूल्यों की जाँच करें जिन्हें आप SET
करने की कोशिश कर रहे हैं।
1292 LOAD DATA उस लाइन को देखें जो 'खराब' है। भागने के प्रतीकों की जांच करें, आदि डेटाटिप्स देखें।
1411 STR_TO_DATE गलत स्वरूपित तिथि?
126, 127, 134, 144, 145
जब आप MySQL डेटाबेस से रिकॉर्ड एक्सेस करने की कोशिश करते हैं, तो आपको ये त्रुटि संदेश मिल सकते हैं। ये त्रुटि संदेश MySQL डेटाबेस में भ्रष्टाचार के कारण हुआ। निम्नलिखित प्रकार हैं
MySQL error code 126 = Index file is crashed
MySQL error code 127 = Record-file is crashed
MySQL error code 134 = Record was already deleted (or record file crashed)
MySQL error code 144 = Table is crashed and last repair failed
MySQL error code 145 = Table was marked as crashed and should be repaired
MySQL बग, वायरस अटैक, सर्वर क्रैश, अनुचित शटडाउन, क्षतिग्रस्त टेबल इस भ्रष्टाचार के पीछे कारण हैं। जब यह दूषित हो जाता है, तो यह दुर्गम हो जाता है और आप उन्हें अब एक्सेस नहीं कर सकते हैं। पहुँच प्राप्त करने के लिए, अद्यतन बैकअप से डेटा पुनर्प्राप्त करने का सबसे अच्छा तरीका है। हालांकि, अगर आपके पास अपडेट या कोई वैध बैकअप नहीं है तो आप MySQL Repair के लिए जा सकते हैं।
यदि टेबल इंजन का प्रकार MyISAM
, तो CHECK TABLE
लागू करें, फिर उस पर REPAIR TABLE
लिखें।
फिर सोचें कि InnoDB में कनवर्ट करने के बारे में, इसलिए यह त्रुटि फिर से नहीं होगी।
वाक्य - विन्यास
CHECK TABLE <table name> ////To check the extent of database corruption
REPAIR TABLE <table name> ////To repair table
139
139 त्रुटि का मतलब यह हो सकता है कि तालिका परिभाषा में फ़ील्ड की संख्या और आकार कुछ सीमा से अधिक है। समाधान:
- स्कीमा पर फिर से विचार करें
- कुछ क्षेत्रों को सामान्य करें
- ऊर्ध्वाधर रूप से तालिका का विभाजन करें
1366
इसका आमतौर पर मतलब है कि क्लाइंट और सर्वर के बीच कैरेक्टर सेट हैंडलिंग सुसंगत नहीं थी। देखें ... आगे की सहायता के लिए
126, 1054, 1146, 1062, 24
(विराम लेते हुए) उन 4 त्रुटि नंबरों को शामिल किए जाने के साथ, मुझे लगता है कि इस पृष्ठ में उपयोगकर्ताओं को मिलने वाली विशिष्ट त्रुटियों का लगभग 50% कवर होगा।
(हां, इस 'उदाहरण' में संशोधन की जरूरत है।)
24 फ़ाइल नहीं खोल सकते (बहुत सारी खुली फाइलें)
open_files_limit
एक OS सेटिंग से आता है। table_open_cache
इससे कम होना चाहिए।
ये उस त्रुटि का कारण बन सकते हैं:
संग्रहीत कार्यविधि में
DEALLOCATE PREPARE
को विफल करने के लिए।बड़ी संख्या में विभाजन और innodb_file_per_table = ON के साथ विभाजन तालिका। किसी दी गई तालिका में (विभिन्न कारणों से) 50 से अधिक विभाजन न होने की सलाह दें। (जब "मूल विभाजन" उपलब्ध हो जाता है, तो यह सलाह बदल सकती है।)
स्पष्ट वर्कअराउंड OS सीमा बढ़ाने के लिए है: अधिक फ़ाइलों की अनुमति देने के लिए, ulimit
या /etc/security/limits.conf
या sysctl.conf
(kern.maxfiles & kern.maxfileperproc) या कुछ और (OS पर निर्भर) में परिवर्तन करें। फिर open_files_limit
और table_open_cache
।
5.6.8 के रूप में, open_files_limit
स्वतः आकार पर आधारित है max_connections
, लेकिन यह डिफ़ॉल्ट से इसे बदलने के लिए ठीक है।
1062 - डुप्लीकेट एंट्री
यह त्रुटि मुख्य रूप से निम्नलिखित दो कारणों से होती है
डुप्लिकेट मान -
Error Code: 1062. Duplicate entry '12' for key 'PRIMARY'
प्राथमिक कुंजी कॉलम अद्वितीय है और यह डुप्लिकेट प्रविष्टि को स्वीकार नहीं करेगा। इसलिए जब आप एक नई पंक्ति सम्मिलित करने का प्रयास कर रहे हैं जो पहले से ही आपके पास मौजूद है तो यह त्रुटि उत्पन्न करेगी।
इसे हल करने के लिए, प्राथमिक कुंजी कॉलम को
AUTO_INCREMENT
रूप में सेट करें। और जब आप एक नई पंक्ति सम्मिलित करने का प्रयास कर रहे हों, तो प्राथमिक कुंजी कॉलम को अनदेखा करें या प्राथमिक कुंजी मेंNULL
मान डालें।
CREATE TABLE userDetails(
userId INT(10) NOT NULL AUTO_INCREMENT,
firstName VARCHAR(50),
lastName VARCHAR(50),
isActive INT(1) DEFAULT 0,
PRIMARY KEY (userId) );
--->and now while inserting
INSERT INTO userDetails VALUES (NULL ,'John', 'Doe', 1);
विशिष्ट डेटा फ़ील्ड -
Error Code: 1062. Duplicate entry 'A' for key 'code'
आप एक कॉलम को अद्वितीय मान सकते हैं और उस कॉलम के लिए पहले से मौजूद मान के साथ एक नई पंक्ति सम्मिलित करने का प्रयास कर रहे हैं।
इस त्रुटि को दूर करने के लिए, सामान्य
INSERT
बजायINSERT IGNORE
उपयोगINSERT
। यदि आप जिस नई पंक्ति को सम्मिलित करने का प्रयास कर रहे हैं वह मौजूदा रिकॉर्ड की नकल नहीं करती है, तो MySQL इसे हमेशा की तरह सम्मिलित करता है। यदि रिकॉर्ड डुप्लिकेट है, तोIGNORE
कीवर्ड बिना किसी त्रुटि के उत्पन्न करता है।
INSERT IGNORE INTO userDetails VALUES (NULL ,'John', 'Doe', 1);