sql >> Databasteknik >  >> RDS >> Mysql

Kontrollera om värden finns innan INSERT INTO ... PÅ DUPLIKATNYCKELUPPDATERING

Istället för review_autosave_data du kan skapa två tabeller som review_insert_drafts och review_update_drafts (en för nya recensioner och en för recensionsuppdateringar).

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

(Osäker på vad name är kolumn är bra för.)

I din ansökan måste du kontrollera om användaren skriver en ny recension eller uppdaterar en befintlig.

För nya recensioner du kör:

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

eller

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

För recensionsuppdateringar du kör:

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

eller

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

Fördelar:Du har en tydlig design med tydliga unika nycklar och främmande nycklar.

Nackdelar:Du har två tabeller som innehåller liknande data. Så du har två olika infogningssatser. Och du behöver en UNION-sats om du vill kombinera de två tabellerna (t.ex. visa alla utkast för en användare).



  1. MySQL - Hur man räknar alla rader per tabell i en fråga

  2. Skicka HTML-e-postresultat i e-post som visar HTML-källa (Codeginiter Email Class)

  3. MySQL GROUP BY beteende

  4. Finns det någon legitim anledning till att använda Unix-sockets över TCP/IP med mysql?