Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

permintaan mysql REPLACE dengan beberapa kunci utama

Seharusnya tidak ada bedanya, sintaksnya sama. Pastikan Anda memiliki kedua kunci yang ditentukan sebagai kolom. Misalnya:

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

EDIT

Inilah pengujian saya yang saya jalankan di database pengujian saya untuk memastikan bahwa saya tidak akan menghancurkan data Anda. Tentu saja, saya mendorong Anda untuk mencobanya jika Anda tidak yakin!

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

Ini hasil saya:

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

EDIT LAIN

Saya rasa saya mengerti apa yang Anda bicarakan dalam dokumentasi, kebingungan tentang kolom unik:

Itu mengacu pada keadaan yang agak dibuat-buat di mana baris yang Anda ganti dengan konflik tidak hanya dengan kunci utama yang ada, tetapi juga dengan kolom unik lainnya. Berikut contoh lain untuk mengilustrasikan hal ini:

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

Perhatikan bagaimana operasi REPLACE terakhir tidak hanya bertentangan dengan (key1 , key2 ) kunci utama, dari REPLACE pertama, tetapi juga dengan warna unik dari yang kedua. Dalam hal ini, KEDUA baris dihapus sebelum operasi REPLACE terakhir dilakukan sehingga hasilnya tidak ada konflik. Anda akan mendapatkan hanya dua baris:

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

Kedua baris dengan (key1 , key2 ) sama dengan ('widget', 14) DAN baris dengan warna 'kuning' hilang karena baris baru bertentangan dengan beberapa batasan unik di tabel.

Semoga ini bisa membantu!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Data Biner di MySQL

  2. Tidak ditemukan driver yang cocok untuk jdbc di Spark

  3. Bagaimana Anda memungkinkan pelanggan untuk masuk ke situs Anda menggunakan akun Google mereka?

  4. SQL Untuk Menemukan Kategori Paling Populer

  5. Simpan kata sandi ok dalam variabel Sesi php?