sql >> Database >  >> RDS >> Mysql

Controleer of er waarden bestaan ​​voordat INSERT INTO ... ON DUPLICATE KEY UPDATE

In plaats van review_autosave_data je kunt twee tabellen maken zoals review_insert_drafts en review_update_drafts (een voor nieuwe recensies en een voor recensie-updates).

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

(Niet zeker wat de name kolom is goed voor.)

In uw applicatie moet u controleren of de gebruiker een nieuwe recensie schrijft of een bestaande bijwerkt.

Voor nieuwe beoordelingen die u uitvoert:

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

of

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

Voor recensie-updates die u uitvoert:

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

of

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

Voordelen:Je hebt een duidelijk ontwerp met duidelijke unieke sleutels en buitenlandse sleutels.

Nadelen:je hebt twee tabellen met vergelijkbare gegevens. Je hebt dus twee verschillende insert-statements. En je hebt een UNION-verklaring nodig als je de twee tabellen wilt combineren (bijvoorbeeld alle concepten voor een gebruiker weergeven).



  1. Hoe de prestaties van MySQL en MariaDB te benchmarken met SysBench

  2. Hoe verwijs ik naar bovenliggende tabel in een join met meerdere tabellen?

  3. Benoemde Query in slaapstand zetten - voeg samen met 3 tabellen

  4. Groottelimiet van JSON-gegevenstype in PostgreSQL