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

mysql REPLACE zapytanie z wieloma kluczami podstawowymi

To nie powinno mieć znaczenia, to ta sama składnia. Tylko upewnij się, że masz oba klucze określone jako kolumny. Na przykład:

REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` /* , ... */ )
  VALUES ( 'widgets', 14, 'Blue widget with purple trim' );

EDYTUJ

Oto mój test, który przeprowadziłem w mojej testowej bazie danych, aby upewnić się, że nie zamierzam zniszczyć twoich danych. Oczywiście zachęcam do wypróbowania tego, jeśli nie masz pewności!

CREATE SCHEMA `my_testdb`;
USE `my_testdb`;
CREATE TABLE `my_table` (
  `key1` VARCHAR(20) NOT NULL,
  `key2` INTEGER NOT NULL,
  `othercolumn1` VARCHAR(50),
  CONSTRAINT PRIMARY KEY (`key1`, `key2`) );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
  VALUES ( 'widgets', 14, 'Green widget with fuchsia trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
  VALUES ( 'widgets', 15, 'Yellow widget with orange trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
  VALUES ( 'thingamabobs', 14, 'Red widget with brown trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `othercolumn1` )
  VALUES ( 'widgets', 14, 'Blue widget with purple trim' );
SELECT * FROM `my_table`;

Oto mój wynik:

key1          key2  othercolumn1
widgets       14    Blue widget with purple trim
widgets       15    Yellow widget with orange trim
thingamabobs  14    Red widget with brown trim

INNA EDYCJA

Myślę, że widzę, o czym mówisz w dokumentacji, zamieszanie związane z unikalnymi kolumnami:

Odnosi się to do dość wymyślonej okoliczności, w której wiersz, który zastępujesz, koliduje nie tylko z istniejącym kluczem podstawowym, ale także z innymi unikalnymi kolumnami. Oto kolejny przykład ilustrujący ten punkt:

CREATE SCHEMA `my_testdb2`;
USE `my_testdb2`;
CREATE TABLE `my_table` (
  `key1` VARCHAR(20) NOT NULL,
  `key2` INTEGER NOT NULL,
  `color` VARCHAR(20) NOT NULL UNIQUE,
  `othercolumn1` VARCHAR(50),
  CONSTRAINT PRIMARY KEY (`key1`, `key2`) );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
  VALUES ( 'widgets', 14, 'green', 'Green widget with fuchsia trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
  VALUES ( 'widgets', 15, 'yellow', 'Yellow widget with orange trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
  VALUES ( 'thingamabobs', 14, 'red', 'Red widget with brown trim' );
REPLACE INTO `my_table` ( `key1`, `key2`, `color`, `othercolumn1` )
  VALUES ( 'widgets', 14, 'yellow', 'Yellow widget with purple trim' );
SELECT * FROM `my_table`;

Zwróć uwagę, że ostatnia operacja REPLACE nie tylko powoduje konflikt z (key1 , key2 ) klucz podstawowy pierwszego REPLACE, ale także z unikalnym kolorem drugiego. W takim przypadku OBA wiersze są usuwane przed wykonaniem ostatniej operacji REPLACE, aby wynik nie powodował konfliktu. Otrzymasz tylko dwa rzędy:

key1          key2  color   othercolumn1
widgets       14    yellow  Yellow widget with purple trim
thingamabobs  14    red     Red widget with brown trim

Zarówno wiersz z (key1 , key2 ) równe ('widgety', 14) ORAZ wiersz z kolorem „żółtym” został zdmuchnięty z powodu konfliktu nowego wiersza z wieloma unikalnymi ograniczeniami w tabeli.

Mam nadzieję, że to pomoże!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dziwny błąd MySQL tylko do odczytu

  2. Laravel 5.1 - Połączenie Homestead MySQL. `Odmowa połączenia` &`Brak takiego pliku lub katalogu`

  3. Wyjaśnienie MySQL ISNULL()

  4. Łączenie 2 tabel w SELECT(MYSQL/PHP)

  5. SELECT * FROM people WHERE user_id='$user_id' ORDER BY time GROUP BY nazwisko