Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Sprawdź, czy wartości istnieją przed INSERT INTO ... W AKTUALIZACJI ZDUPLIKOWANEGO KLUCZA

Zamiast review_autosave_data możesz utworzyć dwie tabele, takie jak review_insert_drafts i review_update_drafts (jeden dla nowych recenzji i jeden dla aktualizacji recenzji).

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

(Nie jestem pewien, jaka jest name kolumna jest dobra dla.)

W swojej aplikacji musisz sprawdzić, czy użytkownik pisze nową recenzję, czy aktualizuje istniejącą.

W przypadku nowych recenzji, które wygenerujesz:

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

lub

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

Aby uruchomić aktualizacje recenzji:

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

lub

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

Zalety:Masz przejrzysty projekt z wyraźnymi unikalnymi kluczami i kluczami obcymi.

Wady:Masz dwie tabele zawierające podobne dane. Masz więc dwie różne instrukcje wstawiania. I będziesz potrzebować oświadczenia UNION, jeśli chcesz połączyć dwie tabele (np. pokazać wszystkie wersje robocze dla użytkownika).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz tylko nazwy kolumn jak w tablicy mysql

  2. LIKE zapytanie sql nie działa w połączonych wartościach ze spacją

  3. Regresja liniowa, znajdowanie nachylenia w MySQL

  4. Grupuj według miesiąca i roku w MySQL

  5. MySQL WYBIERZ LIKE lub REGEXP, aby dopasować wiele słów w jednym rekordzie