Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql REPLACE заявка с множество първични ключове

Не би трябвало да има разлика, синтаксисът е същият. Просто се уверете, че имате и двата ключа, посочени като колони. Например:

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

РЕДАКТИРАНЕ

Ето моя тест, който проведох в моята тестова база данни, за да се уверя, че нямам намерение да унищожа вашите данни. Разбира се, препоръчвам ви да го изпробвате, ако не сте сигурни!

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

Това е моят резултат:

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

ДРУГА РЕДАКТИРАНЕ

Мисля, че виждам за какво говорите в документацията, объркването около уникалните колони:

Това се отнася до доста измислено обстоятелство, при което редът, който заменяте с конфликти не само със съществуващ първичен ключ, но и с други уникални колони. Ето още един пример, който да илюстрира тази точка:

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

Забележете как последната операция REPLACE не само е в конфликт с (key1 , key2 ) първичен ключ, на първия REPLACE, но също и с уникалния цвят на втория. В този случай И ДВАТА реда се изтриват преди последната операция REPLACE да бъде извършена, така че резултатът да няма конфликт. В крайна сметка ще получите само два реда:

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

И двата реда с (key1 , key2 ) равно на ('widgets', 14) AND редът с цвят „жълто“ беше издухан поради конфликта на новия ред с множество уникални ограничения на таблицата.

Надявам се това да помогне!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се предаде променлива към извикване на съхранена процедура в mysql?

  2. Как да изтриете съхранена процедура в MySQL

  3. Защо моят cfloop спира след вмъкване на първи идентификатор?

  4. Схема на база данни за ACL

  5. Транспониране на редове в заглавки в MYSQL