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

व्यावहारिक उदाहरणों द्वारा MySQL TRUNCATE तालिका को समझना

MySQL TRUNCATE TABLE स्टेटमेंट एक DDL स्टेटमेंट है जिसका उपयोग MySQL टेबल से सभी रिकॉर्ड्स को हटाने के लिए किया जाता है। जब हम इस कमांड को चलाते हैं, तो यह पहले मौजूदा टेबल को गिराता है और फिर टेबल डेफिनिशन का उपयोग करके एक नई टेबल बनाता है। TRUNCATE TABLE कमांड का क्वेरी निष्पादन क्रम DROP TABLE and CREATE TABLE है।

TRUNCATE TABLE स्टेटमेंट की विशेषताएं इस प्रकार हैं:

  1. जब हम पंक्तियों को हटाने के बजाय TRUNCATE TABLE स्टेटमेंट चलाते हैं, तो MySQL टेबल को छोड़ देता है और इसे फिर से बनाता है। यह विशेष रूप से बड़ी तालिकाओं के लिए DELETE कथन से तेज़ है।
  2. TRUNCATE TABLE उच्च प्रदर्शन प्राप्त करने के लिए DELETE ट्रिगर्स को बायपास करती है।
  3. TRUNCATE TABLE को वापस नहीं लाया जा सकता क्योंकि यह एक अंतर्निहित प्रतिबद्धता का कारण बनता है।
  4. यदि आप परमाणु DDL- समर्थित स्टोरेज इंजन का उपयोग कर रहे हैं, और सर्वर TRUNCATE TABLE संचालन के दौरान रुक जाता है, तो लेनदेन पूरी तरह से प्रतिबद्ध या वापस ले लिया जाएगा।
  5. यह AUTO_INCREAMENT कॉलम मानों को प्रारंभ मान पर रीसेट करता है।
  6. यदि आपने InnoDB या NDB तालिकाओं पर विदेशी कुंजियाँ बनाई हैं, तो TRUNCATE TABLE कथन विफल हो जाता है।
  7. भले ही तालिका या अनुक्रमणिका दूषित हो, और तालिका परिभाषा मान्य हो, TRUNCATE TABLE कथन एक खाली तालिका को फिर से बनाता है।
  8. TRUNCATE TABLE स्टेटमेंट विभाजन को सुरक्षित रखता है। अनुक्रमणिका फ़ाइलें और डेटा हटा दिया जाएगा, लेकिन विभाजन की परिभाषा प्रभावित नहीं होगी।
  9. आप एक दूषित InnoDB तालिका को काट सकते हैं।
  10. यदि आप फ़ाइल-प्रति-तालिका तालिका स्थान का उपयोग कर रहे हैं, तो TRUNCATE TABLE कथन तालिका स्थान को छोड़ देता है और एक नया बना देता है।
  11. हम प्रदर्शन स्कीमा सारांश तालिकाओं में TRUNCATE TABLE का उपयोग कर सकते हैं, लेकिन यह तालिकाओं के डेटा को नहीं हटाता है। यह सारांश कॉलम मानों को NULL या शून्य (0) पर रीसेट करता है।

DELETE और TRUNCATE टेबल स्टेटमेंट के बीच अंतर

वरिष्ठ विवरण हटाएं टेबल स्टेटमेंट को छोटा करें
1 DELETE स्टेटमेंट एक DML स्टेटमेंट है। डेटाबेस बाइनरी लॉग में परिवर्तन लॉग किए गए हैं। TRUNCATE TABLE स्टेटमेंट एक DDL स्टेटमेंट है। ऑपरेशन बाइनरी लॉग में लॉग इन नहीं है।
2 ऑपरेशन को वापस लाया जा सकता है। इस ऑपरेशन को वापस नहीं लाया जा सकता।
3 यह धीमा है क्योंकि बाइनरी लॉग में परिवर्तन लॉग किए जाते हैं, DML ट्रिगर निष्पादित होते हैं। यह तेज़ है क्योंकि यह मौजूदा तालिका को छोड़ देता है और एक नई तालिका बनाता है।
4 DELETE कथन पंक्ति-स्तरीय लॉक प्राप्त करता है। TRUNCATE TABLE डेटा को हटाने से पहले डेटा पृष्ठों को लॉक कर देता है।
5 आप WHERE क्लॉज का उपयोग करके विशिष्ट रिकॉर्ड हटा सकते हैं छोटा तालिका तालिका से सभी डेटा को हटा देती है।

TRUNCATE TABLE Statement का अभ्यास में उपयोग करना

Truncate Table स्टेटमेंट का सिंटैक्स इस प्रकार है:

TRUNCATE TABLE [DatabaseName].[TABLE_NAME]

नोट:जिस तालिका से आप रिकॉर्ड हटाना चाहते हैं उसका नाम TRUNCATE TABLE के बाद है बयान। मान लीजिए कि आप tblStudent . को छोटा करना चाहते हैं टेबल। क्वेरी इस प्रकार होनी चाहिए:

TRUNCATE TABLE tblStudent

प्रदर्शन के लिए, मैंने MySQL 8.0 सर्वर स्थापित किया है और studentsDB . नामक डेटाबेस बनाया है . वहां, मैंने tblStudent . नाम की टेबल बनाई हैं , tblस्कूल, और tblStudent काउंसलर।

निम्न स्क्रिप्ट डेटाबेस और टेबल बनाती है:

Create database studentDB;

CREATE TABLE studentDB.tblstudent (
  studentID integer NOT NULL AUTO_INCREMENT,
  StudentName varchar(255) DEFAULT NULL,
  StudentGrade char(1) DEFAULT NULL,
  SchoolID int,
  PRIMARY KEY (studentID)
)
ENGINE = INNODB;

CREATE TABLE studentDB.tblschool (
  SchoolID int NOT NULL AUTO_INCREMENT,
  SchoolName varchar(255) DEFAULT '',
  City varchar(255) DEFAULT '',
  PRIMARY KEY (SchoolID)
)
ENGINE = INNODB;

CREATE TABLE studentDB.tblStudentCounsiler (
  CounsilerID int NOT NULL AUTO_INCREMENT,
  CounsilerName varchar(255) DEFAULT '',
  PRIMARY KEY (CounsilerID)
)
ENGINE = INNODB;

मैंने tblStudent . पर एक विदेशी कुंजी बनाई है तालिका जो स्कूल आईडी . का संदर्भ देती है tblStudent . का कॉलम टेबल।

विदेशी कुंजी बनाने की स्क्रिप्ट निम्नलिखित है:

ALTER TABLE studentDB.tblstudent
ADD CONSTRAINT FK_tblstudent_SchoolID FOREIGN KEY (SchoolID)
REFERENCES studentDB.tblschool (SchoolID) ON DELETE NO ACTION;

ईआर आरेख नीचे है:

निम्न स्क्रिप्ट सभी तालिकाओं में सारांशित डेटा सम्मिलित करती है:

Use studentDB;

insert INTO tblSchool(SchoolName,City) VALUES ('Nalanda School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Sarvajanik School','Mehsana');
insert INTO tblSchool(SchoolName,City) VALUES ('Diwan Ballubhai','Ahmedabad');

INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nisarg Upadhyay','A',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Nirali Upadhyay','A',2);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Manushi Upadhyay','C',3);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Dixit Upadhyay','B',1);
INSERT INTO tblstudent (StudentName,StudentGrade,SchoolID) VALUES ('Bharti Upadhyay','A',1);

INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Raghav Dave');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Keyur Dalwadi');
INSERT INTO tblStudentCounsiler (CounsilerName) VALUES ('Sawan Panchal');

आइए अब उपयोग के मामलों को समझते हैं।

सबसे पहले, आइए हम tblStudentCounsiler . को छोटा करें निम्नलिखित प्रश्न के साथ:

mysql> truncate table studentdb.tblStudentCounsiler;

आउटपुट :

Query OK, 0 rows affected (0.08 sec)

डेटा देखने के लिए सेलेक्ट स्टेटमेंट चलाएँ:

mysql> select * from studentdb.tblStudentCounsiler;

क्वेरी आउटपुट:

Empty set (0.01 sec)

जैसा कि आप ऊपर स्क्रीनशॉट में देख सकते हैं, कमांड को सफलतापूर्वक निष्पादित किया गया था।

अब, आइए tblSchool . को छोटा करने का प्रयास करें निम्न क्वेरी के साथ तालिका:

mysql> Truncate table tblSchool;

निम्न त्रुटि इसलिए होती है क्योंकि हम उस तालिका को काट नहीं सकते जिसे किसी अन्य तालिका द्वारा संदर्भित किया जा रहा है:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`studentdb`.`tblstudent`, CONSTRAINT `FK_tblstudent_SchoolID`)

इस त्रुटि को ठीक करने के लिए, हमें विदेशी कुंजी को छोड़ना होगा। इसे करने के लिए निम्न क्वेरी चलाएँ:

mysql> ALTER TABLE tblstudent DROP FOREIGN KEY FK_tblstudent_SchoolID;

क्वेरी आउटपुट:

Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

एक बार जब विदेशी कुंजी छोड़ दी जाती है, तो ट्रंकेट टेबल कमांड चलाएँ:

mysql> Truncate table tblSchool;

क्वेरी आउटपुट:

Query OK, 0 rows affected (0.08 sec)

सारांश

वर्तमान लेख में TRUNCATE TABLE स्टेटमेंट और इसकी विशेषताओं का परिचय दिया गया है। हम TRUNCATE TABLE और DELETE कमांड के बीच के अंतर से परिचित हुए, साथ ही अवधारणाओं को स्पष्ट करने के लिए कुछ व्यावहारिक उदाहरणों की खोज की।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैसकल - एक क्वेरी के साथ कई तालिकाओं से हटाएं

  2. ECONNREFUSED कनेक्ट करें - नोड जेएस, एसक्यूएल

  3. अपवाद:पहले से ही इस कनेक्शन से जुड़ा एक खुला डेटा रीडर है जिसे पहले बंद किया जाना चाहिए

  4. मैसकल रिकर्सिव का चयन करें सभी बच्चे को कई स्तरों के साथ प्राप्त करें

  5. MySQL में उपयोगकर्ताओं और प्रमाणीकरण को कैसे प्रबंधित करें