Как удалить строку в sql
Перейти к содержимому

Как удалить строку в sql

  • автор:

Практическое руководство. Как удалить строки из базы данных

Вы можете удалить строки в базе данных, удалив соответствующие объекты LINQ to SQL из коллекции, связанной с таблицами. LINQ to SQL преобразует изменения в соответствующие команды SQL DELETE .

LINQ to SQL не поддерживает и не распознает операции каскадного удаления. Если требуется удалить строку в таблице, имеющей ограничения, необходимо выполнить любую из следующих задач.

  • Установите правило ON DELETE CASCADE в ограничении внешнего ключа в базе данных.
  • Используйте собственный код, чтобы сначала удалить дочерние объекты, не допускающие удаление родительского объекта.

В противном случае создается исключение. См. второй пример кода далее в этом разделе.

Вы можете переопределить LINQ to SQL методы по умолчанию для Insert операций с базой данных , Update и Delete . Дополнительные сведения см. в разделе Настройка операций вставки, обновления и удаления.

Разработчики, использующие Visual Studio, могут использовать реляционный конструктор объектов для разработки хранимых процедур с той же целью.

В следующих шагах предполагается, что подключение к базе данных Northwind выполняется с помощью допустимого объекта DataContext. Дополнительные сведения см. в разделе Практическое руководство. Подключение к базе данных.

Удаление строки в базе данных

  1. Отправьте в базу данных запрос на удаляемую строку.
  2. Вызовите метод DeleteOnSubmit.
  3. Отправьте изменение в базу данных.

Пример 1

В первом примере кода в базу данных отправляется запрос на сведения о заказе «Order #11000», помечаются сведения для удаления, а изменения отправляются в базу данных.

// Query the database for the rows to be deleted. var deleteOrderDetails = from details in db.OrderDetails where details.OrderID == 11000 select details; foreach (var detail in deleteOrderDetails) < db.OrderDetails.DeleteOnSubmit(detail); >try < db.SubmitChanges(); >catch (Exception e) < Console.WriteLine(e); // Provide for exceptions. >
' Query the database for the rows to be deleted. Dim deleteOrderDetails = _ From details In db.OrderDetails() _ Where details.OrderID = 11000 _ Select details For Each detail As OrderDetail In deleteOrderDetails db.OrderDetails.DeleteOnSubmit(detail) Next Try db.SubmitChanges() Catch ex As Exception Console.WriteLine(ex) ' Provide for exceptions End Try 

Пример 2

Целью второго примера является удаление заказа (с номером 10250). Код сначала проверяет таблицу OrderDetails на наличие в ней дочерних элементов удаляемого заказа. Если в таблице есть дочерние элементы заказа, сначала они, а затем сам заказ помечаются для удаления. DataContext располагает фактические действия по удалению в надлежащей последовательности, чтобы команды удаления, отправляемые в базу данных, подчинялись ее ограничениям.

Northwnd db = new Northwnd(@"c:\northwnd.mdf"); db.Log = Console.Out; // Specify order to be removed from database int reqOrder = 10250; // Fetch OrderDetails for requested order. var ordDetailQuery = from odq in db.OrderDetails where odq.OrderID == reqOrder select odq; foreach (var selectedDetail in ordDetailQuery) < Console.WriteLine(selectedDetail.Product.ProductID); db.OrderDetails.DeleteOnSubmit(selectedDetail); >// Display progress. Console.WriteLine("detail section finished."); Console.ReadLine(); // Determine from Detail collection whether parent exists. if (ordDetailQuery.Any()) < Console.WriteLine("The parent is present in the Orders collection."); // Fetch Order. try < var ordFetch = (from ofetch in db.Orders where ofetch.OrderID == reqOrder select ofetch).First(); db.Orders.DeleteOnSubmit(ordFetch); Console.WriteLine("OrderID is marked for deletion.", ordFetch.OrderID); > catch (Exception e) < Console.WriteLine(e.Message); Console.ReadLine(); >> else < Console.WriteLine("There was no parent in the Orders collection."); >// Display progress. Console.WriteLine("Order section finished."); Console.ReadLine(); try < db.SubmitChanges(); >catch (Exception e) < Console.WriteLine(e.Message); Console.ReadLine(); >// Display progress. Console.WriteLine("Submit finished."); Console.ReadLine(); 
Dim db As New Northwnd("c:\northwnd.mdf") db.Log = Console.Out ' Specify order to be removed from database. Dim reqOrder As Integer = 10252 ' Fetch OrderDetails for requested order. Dim ordDetailQuery = _ From odq In db.OrderDetails _ Where odq.OrderID = reqOrder _ Select odq For Each selectedDetail As OrderDetail In ordDetailQuery Console.WriteLine(selectedDetail.Product.ProductID) db.OrderDetails.DeleteOnSubmit(selectedDetail) Next ' Display progress. Console.WriteLine("Detail section finished.") Console.ReadLine() ' Determine from Detail collection whether parent exists. If ordDetailQuery.Any Then Console.WriteLine("The parent is present in the Orders collection.") ' Fetch order. Try Dim ordFetch = _ (From ofetch In db.Orders _ Where ofetch.OrderID = reqOrder _ Select ofetch).First() db.Orders.DeleteOnSubmit(ordFetch) Console.WriteLine(" OrderID is marked for deletion.,", ordFetch.OrderID) Catch ex As Exception Console.WriteLine(ex.Message) Console.ReadLine() End Try Else Console.WriteLine("There was no parent in the Orders collection.") End If ' Display progress. Console.WriteLine("Order section finished.") Console.ReadLine() Try db.SubmitChanges() Catch ex As Exception Console.WriteLine(ex.Message) Console.ReadLine() End Try ' Display progress. Console.WriteLine("Submit finished.") Console.ReadLine() 

См. также раздел

  • Практическое руководство. Как управлять конфликтами изменений
  • Практическое руководство. Назначение хранимых процедур для выполнения обновления, вставки и удаления (реляционный конструктор объектов)
  • Внесение и отправка изменений данных

Команда SQL для удаления и обновление данных в базе (DELETE, UPDATE)

В базу данных можно не только добавлять данные, но и удалять их оттуда. Ещё существует возможность обновить данные в базе. Рассмотрим оба случая.

Удаление данных из базы (DELETE)

Удаление из базы данных происходит с помощью команды «DELETE» (переводится с английского как «УДАЛИТЬ»). Функция удаляет не одну строку, а несколько, при этом выбирает для удаления строки по логике функции «SELECT». То есть чтобы удалить данные из базы, необходимо точно определить их. Приведём пример SQL команды для удаления одной строчки:

DELETE FROM `USERS` WHERE `ID` = 2 LIMIT 1;

Благодаря этому запросу из таблицы «USERS» будет удалена одна запись, у которой в столбце «ID» стоит значение «2».

Обратите внимание, что в конце запроса стоит лимит на выборку «LIMIT 1;» размером в 1 строку. Его можно было не ставить, если поле «ID» является «PRIMARY KEY» (первичный ключ, то есть содержит только уникальные значения). Но всё-таки рекомендуем ставить ограничение «LIMIT 1;» в любом случае, если вы намерены удалить только одну строчку.

Теперь попробуем удалить сразу диапазон данных. Для этого достаточно составить запрос, в результате выполнения которого вернётся несколько строк. Все эти строки будут удалены:

DELETE FROM `USERS` WHERE `ID` >= 5;

Этот запрос удалит все строки в таблицы, у которых в столбце «ID» стоит значение меньше 5. Если не поставить никакого условия «WHERE» и лимита «LIMIT», то будут удалены абсолютно все строки в таблице:

DELETE FROM `USERS`;

На некоторых версиях MySQL способ удаления всех строк через «DELETE FROM _;» может работать медленнее, чем «TRUNCATE _;«; Поэтому для очистки всей таблицы лучше всё-таки использовать «TRUNCATE».

Обновление данных в базе (UPDATE)

Функция обновления «UPDATE» (переводится с английского как «ОБНОВИТЬ») довольно часто используется в проектах сайтов. Как и в случае с функцией «DELETE», фкнция обновления не успокоится до тех пор, пока не обновит все поля, которые подходят под условия, если нет лимита на выборку. Поэтому необходимо задавать однозначные условия, чтобы вместо одной строки нечаянно не обновить половину таблицы. Приведём пример использования команды «UPDATE»:

UPDATE `USERS` SET `NAME` = 'Мышь' WHERE `ID` = 3 LIMIT 1;

В этом примере, в таблие «USERS» будет установлено значение «Мышь» в столбец «NAME» у строки, в столбце «ID» которой стоит значение «3». Можно обновить сразу несколько столбцов у одной записи, передав значения через запятую. Попробуем обновить не только значение с толбце «NAME», но и значение в столбце «FOOD» используя один запрос:

UPDATE `USERS` SET `NAME` = 'Мышь', `FOOD` = 'Сыр' WHERE `ID` = 3 LIMIT 1;

Если не поставить никаких лимитов LIMIT и условий WHERE, то все записи таблицы будут обновлены без исключений.

Как удалить строки из таблицы sql

Тут используется запрос типа DELETE . Если мы хотим удалить вообще все строки из таблицы, то сделать это можно так:

DELETE FROM brands; 

Мы удалили все строки из таблицы brands , таким образом эта таблица теперь пуста.

DELETE FROM cars WHERE price = 1000; 

Добавляя WHERE мы можем выбирать только те строки, которые нам нужны и удалять именно их. Например, выше мы выбрали все автомобили с ценой 1000 из таблицы cars и удалили их все.

Как удалить строку в sql

Время от времени возникает задача удаления записей из таблицы. Для этого в SQL предусмотрены операторы DELETE и TRUNCATE , из которых наиболее универсальным и безопасным является первый вариант.

MySQL
DELETE FROM имя_таблицы [WHERE условие_отбора_записей]; 

Если условие отбора записей WHERE отсутствует, то будут удалены все записи указанной таблицы.

Эту же операцию (удаления всех записей) можно сделать также с помощью оператора TRUNCATE . Он выполнит удаление таблицы и пересоздаст её заново - этот вариант работает гораздо быстрее, чем удаление всех записей одна за другой (как в случае с DELETE ) особенно для больших таблиц.

MySQL
TRUNCATE TABLE имя_таблицы; 

Оптимизатор запросов СУБД MySQL автоматически использует оператор TRUNCATE , если оператор DELETE не содержит условия WHERE или конструкции LIMIT .

Однако у оператора TRUNCATE есть ряд отличий:

  • Не срабатывают триггеры, в частности, триггер удаления
  • Удаляет все строки в таблице, не записывая при этом удаление отдельных строк данных в журнал транзакций
  • Сбрасывает счётчик идентификаторов до начального значения
  • Чтобы использовать, необходимы права на изменение таблицы

Если в DELETE запросе используется JOIN , то необходимо указать из каких(ой) именно таблиц(ы) требуется удалять записи.

MySQL
DELETE имя_таблицы_1 [, имя_таблицы_2] FROM имя_таблицы_1 JOIN имя_таблицы_2 ON имя_таблицы_1.поле = имя_таблицы_2.поле [WHERE условие_отбора_записей]; 

Например, нам необходимо удалить все бронирования жилья, в котором отсутствует кухня. Тогда запрос будет выглядеть следующим образом:

MySQL
DELETE Reservations FROM Reservations JOIN Rooms ON Reservations.room_id = Rooms.id WHERE Rooms.has_kitchen = false; 

Если бы, помимо удаления бронирования, нам нужно было также удалить и жилье, то запрос приобрёл бы следующий вид:


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *