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

जांचें कि क्या मान INSERT INTO से पहले मौजूद हैं ... डुप्लीकेट कुंजी अद्यतन पर

इसके बजाय review_autosave_data आप review_insert_drafts . जैसे दो टेबल बना सकते हैं और review_update_drafts (एक नई समीक्षाओं के लिए और एक समीक्षा अपडेट के लिए)।

CREATE TABLE `review_insert_drafts` (
  `product_id` int(11) unsigned NOT NULL,
  `user_id` int(11) unsigned NOT NULL,
  `review` blob,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`product_id`, `user_id`),
  CONSTRAINT FOREIGN KEY (`product_id`) REFERENCES `products` (`id`),
  CONSTRAINT FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
);

CREATE TABLE `review_update_drafts` (
  `review_id` int(11) unsigned NOT NULL,
  `review` blob,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`review_id`),
  CONSTRAINT FOREIGN KEY (`review_id`) REFERENCES `reviews` (`id`)
);

(सुनिश्चित नहीं है कि name क्या है कॉलम के लिए अच्छा है।)

अपने आवेदन में आपको यह जांचना होगा कि उपयोगकर्ता एक नई समीक्षा लिख ​​रहा है या किसी मौजूदा को अपडेट कर रहा है।

आपके द्वारा चलाई जाने वाली नई समीक्षाओं के लिए:

INSERT INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";

या

REPLACE INTO review_insert_drafts (product_id, user_id, review)
VALUES (50, 1, "lorem ipsum");

आपके द्वारा चलाए जा रहे समीक्षा अपडेट के लिए:

INSERT INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum")
ON DUPLICATE KEY
UPDATE review = "lorem ipsum";

या

REPLACE INTO review_update_drafts (review_id, review)
VALUES (25, "lorem ipsum");

लाभ:आपके पास स्पष्ट अद्वितीय कुंजियों और विदेशी कुंजियों के साथ एक स्पष्ट डिज़ाइन है।

नुकसान:आपके पास समान डेटा वाली दो तालिकाएँ हैं। तो आपके पास दो अलग-अलग सम्मिलित कथन हैं। और यदि आप दो तालिकाओं को जोड़ना चाहते हैं तो आपको एक यूनियन स्टेटमेंट की आवश्यकता होगी (उदाहरण के लिए उपयोगकर्ता के लिए सभी ड्राफ्ट दिखाएं)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पायथन मुद्दा:vcvarsall.bat को खोजने में असमर्थ

  2. MySQL प्रत्येक घटना की पंक्तियों का चयन (एन) करता है

  3. SQL कथन अब से अगले 2 दिन की तारीख पाने के लिए

  4. MySQL का उपयोग करके C# में डेटाटेबल भरना

  5. mysqlimport:त्रुटि:1045, प्रवेश निषेध