Оператор REPLACE в MySQL є розширенням стандарту SQL. Цей оператор працює так само, як і оператор INSERT, за винятком того, що якщо старий рядок відповідає новому запису в таблиці для ПЕРВИННОГО КЛЮЧА або УНІКАЛЬНОГО індексу, ця команда видаляє старий рядок перед додаванням нового.
Цей оператор потрібний, коли ми хочемо оновити наявні записи в таблиці, щоб підтримувати їх оновлення. Якщо ми використовуємо для цієї мети стандартний запит на вставку, він видасть дублікат запису для PRIMARY KEY або помилку ключа UNIQUE. У цьому випадку ми будемо використовувати оператор REPLACE для виконання нашого завдання. Команда REPLACE вимагає одного з двох можливо відбуваються дії:
- Якщо з існуючим рядком даних не знайдено відповідного значення, виконується стандартний оператор INSERT.
- Якщо знайдено повторюваний запис, команда заміни видалить наявний рядок, а потім додасть новий запис у таблицю.
У операторі REPLACE оновлення виконується у два кроки. Спочатку буде видалено наявний запис, а потім буде додано новий оновлений запис, подібно до стандартної команди INSERT. Таким чином, ми можемо сказати, що оператор REPLACE виконує дві стандартні функції, ВИДАЛИТИ і ВСТАВИТИ .
Синтаксис
Нижче наведено синтаксис ЗАМІНИТИ заява в MySQL :
REPLACE [INTO] table_name(column_list) VALUES(value_list);
Приклад MySQL REPLACE
t тригер
Давайте зрозуміємо роботу оператора REPLACE в MySQL за допомогою прикладу. Спочатку ми створимо таблицю з назвою 'Людина' використовуючи наступний оператор:
CREATE TABLE Person ( ID int AUTO_INCREMENT PRIMARY KEY, Name varchar(45) DEFAULT NULL, Email varchar(45) DEFAULT NULL UNIQUE, City varchar(25) DEFAULT NULL );
Далі нам потрібно заповнити запис у таблиці за допомогою ВСТАВИТИ твердження, наведене нижче:
INSERT INTO Person(ID, Name, Email, City) VALUES (1,'Mike', '[email protected]', 'California'), (2, 'Alexandar', '[email protected]', 'New York'), (3, 'Adam', '[email protected]', 'Los Angeles'), (4, 'Peter', '[email protected]', 'Alaska');
Виконати ВИБРАТИ оператор для перевірки записів, які можуть бути показані в наведеному нижче виводі:
Після перевірки даних у таблиці ми можемо замінити будь-який старий рядок новим за допомогою оператора REPLACE. Виконайте наведену нижче інструкцію, яка оновить місто людини з id 4 .
REPLACE INTO Person (id, city) VALUES(4,'Amsterdam');
Після успішного виконання наведеного вище оператора необхідно знову запитати дані таблиці Person, щоб перевірити заміну.
Значення в назва і електронною поштою стовпці є НУЛЬ тепер. Це тому, що оператор REPLACE працює наступним чином:
- Цей оператор спочатку намагається вставити новий рядок у таблицю Person. Але вставити новий рядок не вдалося, оскільки ідентифікатор = 4 уже існує в таблиці.
- Таким чином, цей оператор спочатку видаляє рядок, ідентифікатор якого = 4, а потім вставляє новий рядок із таким самим ідентифікатором і містом, як Амстердам. Оскільки ми не вказали значення для стовпців імені та електронної пошти, для нього встановлено значення NULL.
Оператор MySQL REPLACE для оновлення рядка
Ми можемо використати такий оператор REPLACE, щоб оновити дані рядка в таблиці:
REPLACE INTO table SET column1 = value1, column2 = value2;
Наведений вище синтаксис подібний до Оператор UPDATE крім ключового слова REPLACE. Слід зазначити, що ми не можемо використовувати речення WHERE з цим оператором.
Виконайте наведений нижче приклад, який використовує оператор REPLACE для оновлення міста вказаної особи Майк від Каліфорнія до Бірмінгем .
REPLACE INTO Person SET ID = 1, Name = 'Mike', City = 'Birmingham';
Після перевірки таблиці ми можемо побачити наступний результат:
Якщо ми не вказали значення стовпця в Речення SET , ця команда працює як Оператор UPDATE , що означає, що оператор REPLACE використовуватиме значення за замовчуванням цього стовпця.
MySQL REPLACE, щоб вставити дані з оператора SELECT.
Ми можемо використати наступний оператор REPLACE INTO, щоб вставити дані в таблицю з даними, отриманими із запиту.
REPLACE INTO table1(column_list) SELECT column_list FROM table2 WHERE condition;
Слід зазначити, що наведений вище запит REPLACE схожий на INSERT INTO SELECT заява. Виконайте наведений нижче приклад, який використовує оператор REPLACE INTO для копіювання рядка в тій же таблиці.
REPLACE INTO Person(Name, City) SELECT Name, City FROM Person WHERE id = 2;
Після перевірки таблиці ми отримаємо наступний вихід. У цьому виводі ми бачимо, що копію рядка в одній таблиці успішно додано.