Якщо існує, то оновіть іншу вставку


14

Я намагаюся створити STORED PROCEDUREте, яке буде використано для UPDATEтаблиці під назвою machine. Ця таблиця складається з трьох стовпців ( machine_id, machine_nameі reg_id).

У вищезгаданій таблиці reg_id( INT) - стовпець, значення якого можна змінити для a machine_id.

Я хотів би визначити QUERY/ PROCEDUREперевірити, чи reg_idіснує вже в цій таблиці. Якщо так, то UPDATEтой рядок, інакше INSERTновий рядок.

Може хтось, будь ласка, допоможе мені написати це QUERY/ PROCEDURE?

Відповіді:


12

Сподіваюсь, це допомагає, ДУПЛІКАТУЙТЕ КЛЮЧОВУ ОНОВЛЕННЯ

create table machine(
  machine_id int not null primary key,
  machine_name varchar(50),
  reg_id int
);

insert into machine (machine_id, machine_name, reg_id)
values(1, 'my_machine', 1);

INSERT INTO machine (reg_id, machine_id, machine_name) VALUES (1, 1, 'test_machine')
  ON DUPLICATE KEY UPDATE machine_name=VALUES(machine_name);

Робота над SQL Fiddle


Вони також можуть знадобитися reg_id = VALUES(reg_id).
ypercubeᵀᴹ

Що робити, якщо у нас є дві умови запиту, я маю на увазі, що не тільки ключ унікальний?
Сем

11

Єдина проблема полягає в тому, що ви не можете використовувати його як звичайний запит. Структури управління, такі як IF або WHILE , дозволені лише в збережених процедурах або функціях.

Просто створіть таку процедуру:

delimiter $$
create procedure select_or_insert()
begin
  IF EXISTS (select * from users where username = 'something') THEN
    update users set id= 'some' where username = 'something';
  ELSE 
    insert into users (username) values ('something');
  END IF;
end $$
delimiter ;

і називайте це так:

call select_or_insert();

і Готово


1
Привіт @Taz, чи можеш ти перевірити відповідь, з яким пішов?
Крейг Ефрейн

@Craig Efrein привіт. я пішов із першим. Ваша відповідь. Знову дякую.
Таз

@Taz Я радий, що ця інформація є корисною, будь ласка, якщо ця відповідь може зняти ваші сумніви, перейдіть до закриття питання.
Білл Н. Вареллі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.