sql >> Databáze >  >> RDS >> Mysql

Zkontrolujte, zda existují hodnoty před INSERT INTO ... ON DUPLICATE KEY UPDATE

Místo review_autosave_data můžete vytvořit dvě tabulky jako review_insert_drafts a review_update_drafts (jeden pro nové recenze a jeden pro aktualizace recenzí).

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

(Nevím, jaký je name sloupec je dobrý pro.)

Ve své aplikaci musíte zkontrolovat, zda uživatel píše novou recenzi nebo aktualizuje existující.

Pro nové recenze, které spustíte:

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

nebo

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

Aktualizace recenzí, které spustíte:

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

nebo

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

Výhody:Máte jasný design s jasnými jedinečnými klíči a cizími klíči.

Nevýhody:Máte dvě tabulky obsahující podobná data. Takže máte dva různé příkazy vložení. A budete potřebovat příkaz UNION, pokud chcete zkombinovat dvě tabulky (např. zobrazit všechny koncepty pro uživatele).



  1. Komentáře MySql pro sloupce pohledu?

  2. Pochopení systémových sloupců v PostgreSQL

  3. proč toto levé spojení vrací pouze jeden záznam?

  4. Migrace BLOB dat z MS SQL Serveru do MySQL