Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Überprüfen Sie, ob Werte vor INSERT INTO ... ON DUPLICATE KEY UPDATE vorhanden sind

Statt review_autosave_data Sie können zwei Tabellen wie review_insert_drafts erstellen und review_update_drafts (eine für neue Rezensionen und eine für Rezensionsaktualisierungen).

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`)
);

(Nicht sicher, was der name ist Spalte ist gut für.)

In Ihrer Anwendung müssen Sie überprüfen, ob der Benutzer eine neue Bewertung schreibt oder eine vorhandene aktualisiert.

Für neue Überprüfungen führen Sie Folgendes aus:

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

oder

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

Für Überprüfungsaktualisierungen führen Sie Folgendes aus:

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

oder

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

Vorteile:Sie haben ein übersichtliches Design mit eindeutigen eindeutigen Schlüsseln und Fremdschlüsseln.

Nachteile:Sie haben zwei Tabellen mit ähnlichen Daten. Sie haben also zwei verschiedene Insert-Anweisungen. Und Sie benötigen eine UNION-Anweisung, wenn Sie die beiden Tabellen kombinieren möchten (z. B. alle Entwürfe für einen Benutzer anzeigen).