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

Предимства:Имате ясен дизайн с ясни уникални ключове и външни ключове.

Недостатъци:Имате две таблици, съдържащи подобни данни. Така че имате две различни изрази за вмъкване. И ще ви трябва изявление UNION, ако искате да комбинирате двете таблици (напр. да покажете всички чернови за потребител).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Алтернатива на функцията LOAD_FILE()?

  2. Не мога да се свържа с MySQL сървър на '127.0.0.1' (10061) (2003)

  3. mysql_exceptions.OperationalError:(1045, Достъпът е отказан за потребител 'root'@'localhost' (използвайки парола:ДА))

  4. Mysql изберете Заявка с множество условия от една и съща колона

  5. Какво е еквивалентът на bind_result в PDO