Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL FOREIGN KEY से चाइल्ड टेबल में डेटा इंटीग्रिटी कैसे बनी रहती है

फॉरेन की (Foreign Key) रेफरेंशियल इंटीग्रिटी लागू करती है, जिससे डेटा की संगति और अखंडता स्वचालित रूप से बनी रहती है।

उदाहरण: customer (पैरेंट) और orders (चाइल्ड)

mysql> SELECT * FROM Customer;
+----+--------+
| id | name   |
+----+--------+
| 1  | Gaurav |
| 2  | Raman  |
| 3  | Harshit|
| 4  | Aarav  |
+----+--------+

mysql> SELECT * FROM orders;
+----------+----------+------+
| order_id | product  | id   |
+----------+----------+------+
| 100      | Notebook | 1    |
| 110      | Pen      | 1    |
| 120      | Book     | 2    |
| 130      | Charts   | 2    |
+----------+----------+------+

अस्तित्वहीन ग्राहक के लिए ऑर्डर इन्सर्ट करने का प्रयास

mysql> INSERT INTO orders VALUES(400, 'Notebook', 10);
ERROR 1452 (23000): Cannot add or update a child row: 
a foreign key constraint fails (`query`.`orders`, 
CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`id`) 
REFERENCES `customer` (`id`))

कैसे इंटीग्रिटी बनी रहती है

स्थितिFOREIGN KEY कार्रवाई
चाइल्ड में मान इन्सर्टपैरेंट में मौजूद होना चाहिए, वरना एरर
पैरेंट से पंक्ति डिलीटचाइल्ड में रेफरेंस होने पर एरर (या CASCADE/SET NULL)
पैरेंट PK अपडेटचाइल्ड में रेफरेंस होने पर एरर (या CASCADE/SET NULL)
चाइल्ड FK अपडेटनया मान पैरेंट में मौजूद होना चाहिए

एरर कोड संदर्भ

  • 1452: चाइल्ड पंक्ति जोड़/अपडेट नहीं कर सकते (पैरेंट मान गुम)
  • 1451: पैरेंट पंक्ति डिलीट/अपडेट नहीं कर सकते (चाइल्ड रेफरेंस मौजूद)

निष्कर्ष

FOREIGN KEY डेटाबेस लेवल पर बिजनेस नियम लागू करती है - एप्लिकेशन कोड पर निर्भर नहीं रहना पड़ता। यह डिक्लेरेटिव इंटीग्रिटी है।

  1. - दो MySQL टेबल को कैसे मर्ज करें?

    INSERT IGNORE ... SELECT से दो टेबल मर्ज करें दो टेबल को मर्ज करने के लिए (दूसरे से पहले में डेटा कॉपी करना, डुप्लिकेट से बचते हुए), INSERT IGNORE INTO ... SELECT का उपयोग करें। सिंटैक्स INSERT IGNORE INTO टेबल_लक्ष्य SELECT * FROM टेबल_स्रोत; उदाहरण 1. पहली टेबल बनाएं और डेटा डालें INSERT INTO

  1. - अलग-अलग MySQL डेटाबेस में अलग कॉलम वाली दो टेबल के बीच डेटा कैसे ले जाएं?

    इसके लिए, आपको INSERT SELECT स्टेटमेंट का उपयोग करना होगा। सिंटैक्स इस प्रकार है:INSERT INTO yourDatabaseName1.yourTableName1(yourColumnName1,yourColumnName2,....N) SELECT yourColumnName1,yourColumnName2,....N FROM yourdatabaseName2.yourTableName2;यहाँ, मैं निम्नलिखित दो डेटाबेस का उपयोग कर रहा हूँ:

  1. - MySQL टेबल में अधिकतम आईडी से जुड़ा डेटा कैसे प्राप्त करें? ORDER BY DESC LIMIT

    पहले DESC क्रम में ऑर्डर करें और फिर अधिकतम आईडी से जुड़ा मान प्राप्त करें। SELECT * FROM yourTableName ORDER BY yourColumnName DESC LIMIT 1,1; टेबल बनाएं mysql> create table DemoTable ( -> Alldata int -> ); Query OK, 0 rows affected (0.63 sec) रिकॉर्ड्स डालें mysql> insert in