9 Mayıs 2022 Pazartesi

UPSERT - INSERT ON CONFLICT

Giriş
Açıklaması şöyle
The UPSERT command doesn't exist in MySQL, but upserts can still be achieved. The best method for implementing an upsert in the current version of MySQL is INSERT ... ON DUPLICATE KEY UPDATE . Let's look at that command in a bit more detail.

As the command itself suggests, INSERT ... ON DUPLICATE KEY UPDATE will insert a new row into a table unless it detects a duplicate value in the primary key column, in which case it will update the existing row with the new information.
Söz dizimi şöyle
INSERT INTO my_table (column1, column2)
VALUES
    (value1, value2),
    (value3, value4),
    (value5, value6),
    (value7, value8)
ON DUPLICATE KEY UPDATE
    <column1> = <value1>,
    <column2> = <value2>;
Örnek
Şöyle yaparız. Burada aynı id varsa hiç bir şey yapmaz.
INSERT
IGNORE INTO post_details (
    id,
    created_by,
    created_on
)
VALUES (
    1,
    'Alice',
    {ts '2017-11-06 16:53:34.127'}
)
Örnek
Docker ile çalıştırırız
docker run -d -it  -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=db  --name upsertmysql \
 --rm -p 3306:3306 mysql
Şöyle yaparız
CREATE TABLE customer (
  id NUMERIC, 
  name VARCHAR(20), 
  age NUMERIC, 
  address VARCHAR(20), 
  salary NUMERIC,
  PRIMARY KEY (id)
);

INSERT INTO customer (id,name,age,address,salary)
VALUES (1, 'orcun', 47, 'ankara', 2000);

INSERT INTO customer (id,name,age,address,salary) 
VALUES (1, 'colak', 46, 'istanbul', 3000)
ON DUPLICATE KEY UPDATE 
  id = VALUES(id),
  name = VALUES(name),
  address = VALUES(address),
  salary = VALUES(salary)
Örnek
Şöyle yaparız. Burada aynı id varsa günceller
INSERT INTO employees (id, name, email) 
VALUES (2, ‘Dennis’, ‘dennisp@weyland.corp’) ON DUPLICATE KEY UPDATE;
Örnek
Şöyle yaparız. Burada birden fazla satır var, VALUES fonksiyonu kullanılarak belirttiğimiz veriye erişiriz.
INSERT INTO director (id, name)
VALUES
    (4, 'meg'),
    (2, 'robert'),
    (5, 'tamara')
ON DUPLICATE KEY UPDATE
    name = VALUES(name)
Örnek
Şöyle yaparız. Burada birden fazla satır var, VALUES fonksiyonu kullanılarak belirttiğimiz veriye erişiriz. Ayrıca mevcut değere de erişiriz
INSERT INTO t (id, value) VALUES ('A',3),('B',5),('C',7) 
ON DUPLICATE KEY UPDATE value = VALUES(value) + value;


Hiç yorum yok:

Yorum Gönder

Soft Delete

Giriş Açıklaması  şöyle When using the soft delete mechanism on the database, you might run into a situation where a record with a unique co...