Sql как удалить строку из таблицы: Практическое руководство. Как удалить строки из базы данных — ADO.NET
Удаление записей в MySQL (DELETE)
Из этого руководства вы узнаете, как удалять записи из таблицы базы данных MySQL с помощью SQL запроса.
Удаление данных из таблиц
Подобно тому, как вы вставляете записи в таблицу с помощью оператора INSERT, вы также можете удалять записи из таблицы с помощью инструкции DELETE.
Синтаксис
Оператор DELETE используется для удаления одной или нескольких строк из таблицы.
DELETE FROM table_name WHERE condition;
Условие WHERE в операторе DELETE указывает, какая запись или записи должны быть удалены. Если вы пропустите или забудете условие WHERE, все записи будут удалены из таблицы.
Давайте удалим некоторые записи из таблицы employees, которую мы создали в главе создания таблицы.
Предположим, что наша таблица в настоящее время имеет следующие записи:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Vasya Pupkin | 2001-05-01 | 5000 | 4 | | 2 | Vanya Pupkin | 2002-07-15 | 6000 | 2 | | 3 | Sanya Pupkin | 2005-10-18 | 8000 | 5 | +--------+--------------+------------+--------+---------+
Удалить записи в MySQL по условию
Следующая инструкция удалит строки из таблицы лиц, где идентификатор равен 3.
DELETE FROM employees WHERE id = 3;
После выполнения запроса таблица лиц будет выглядеть так:
+--------+--------------+------------+--------+---------+ | emp_id | emp_name | hire_date | salary | dept_id | +--------+--------------+------------+--------+---------+ | 1 | Vasya Pupkin | 2001-05-01 | 5000 | 4 | | 2 | Vanya Pupkin | 2002-07-15 | 6000 | 2 | +--------+--------------+------------+--------+---------+
Удалить все данные в таблице MySQL
Как упоминалось выше, если вы не укажете условие WHERE в операторе DELETE, все строки таблицы будут удалены. Однако сама таблица назначения не будет удалена, что означает, что структура таблицы, атрибуты и индексы останутся нетронутыми.
Следующее утверждение удалит все записи из таблицы:
DELETE FROM persons;
Теперь, если вы попытаетесь выбрать записи из таблицы, вы получите пустой набор результатов.
Команда 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 — Как удалить строку из таблицы SQL Server CE?
Я хочу, чтобы удалить запись из таблицы SQL Server CE.
Есть 3 таблицы сценарии, параметры и результаты. Я хотел бы, чтобы удалить запись из таблицы результатов. Пункт, где содержит динамическую информацию, найденную с помощью других запросов. Эти запросы работают нормально и доставить нужные данные.
Ошибки я получаю:
Была ошибка разбора запроса. [Знак номер строки = 1, маркер линии смещения = 25, лексема ошибки = от]
Код, который бросает исключение выглядит следующим образом:
Dim connLoc As SqlCeConnection = New SqlCeConnection(My.Settings.ConnectionString)
connLoc.Open()
Dim strDel As String = Delete ResultsTable from ResultsTable r inner join OptionsTable o ON o.TestName=r.TestName inner join ScriptTable c ON r.TestName=c.TestName WHERE r.TestName = ' & ds1Loc.Tables(0).Rows(0)(1) & ' AND [Index] = ' & lstIndex & '
Dim cmdDel As SqlCeCommand = New SqlCeCommand
cmdDel.CommandText = strDel
cmdDel.Connection = connLoc
cmdDel.ExecuteScalar()
Значения проводятся в ds1Loc.Tables(0). Rows(0)(1)
и lstIndex
правильно , так не должно быть проблемой.
Кроме того, этот запрос работает с SQL Server. Это возможно, что SQL CE не поддерживает функцию Удалить так же, как SQL Server 2008?
РЕДАКТИРОВАТЬ
Использование Kafs предложенного решение ниже, за исключением все то же:
Была ошибка разбора запроса. [Знак номер строки = 1, маркер линии смещения = 10, лексема ошибки = от]
CommandText из cmdDel перед казнью является
Delete r from ResultsTable r inner join OptionsTable o ON o.TestName=r.TestName inner join ScriptTable c ON r.TestName=c.TestName WHERE r.TestName = @TestName AND [Index] = @lstIndex
@TestName
и @lstIndex
имеет значение «Мой тест» и «3» respectivley.
Может быть, стоит отметить, для тех, кто читает это в будущем, что я изменил «SqlParameter» в SQLCeParameter, как этот запрос будет к SQL CE Server.
Удаление строк из таблиц
Вы
можете удалять строки из таблицы командой
модификации — DELETE. Она может удалять
только введенные строки, а не индивидуальные
значе- ни полей, так что параметр пол
является необязательным или недоступным.
Чтобы удалить все содержание таблицы
Продавцов, вы можете ввести следующее
условие:
DELETE
FROM Salespeople;
Теперь
когда таблица пуста ее можно окончательно
удалить командой DROP TABLE ( это объясняется
в Главе 17 ). Обычно, вам нужно удалить
только некоторые определенные строки
из таб- лицы. Чтобы определить какие
строки будут удалены, вы используете
предикат, так же как вы это делали для
запросов. Например, чтобы удалить
продавца Axelrod из таблицы, вы можете
ввести
DELETE
FROM Salespeople
WHERE snum = 1003;
Мы
использовали поле snum вместо пол sname
потому, что это лучшая тактика при
использовании первичных ключей когда
вы хотите чтобы действию подвергалась
одна и только одна строка. Для вас — это
аналогично действию первичного ключ.
Конечно, вы можете также использовать
DELETE с предикатом который бы выбирал
группу строк, как показано в этом примере:
DELETE
FROM Salespeople
WHERE
city = ‘London’;
Изменение значений поля
Теперь,
когда вы уже можете вводить и удалять
строки таблицы, вы должны узнать как
изменять некоторые или все значения в
существующей строке. Это выполняется
командой UPDATE. Эта команда содержит
предложение UPDATE в которой указано им
используемой таблицы и предложение SET
которое указывает на изменение которое
нужно сделать для определенного столбца.
Например, чтобы изменить оценки всех
заказчиков на 200, вы можете ввести
UPDATE
Customers
SET
rating = 200;
Модифицирование только определенных строк
Конечно,
вы не всегда захотите указывать все
строки таблицы для изменения единственного
значения, так что UPDATE, наподобие DELETE,
может брать предикаты. Вот как например
можно выполнить изменение одинаковое
для всех заказчиков продавца Peel ( имеющего
snum=1001 ):
UPDATE
Customers
SET rating = 200
WHERE snum = 1001;
Команда update для многих столбцов
Однако,
вы не должны, ограничивать себя
модифицированием единственного столбца
с помощью команды UPDATE. Предложение SET
может назначать любое число столбцов,
отделяемых запятыми. Все указанные
назначения могут быть сделаны для любой
табличной строки, но только для одной
в каждый момент времени. Предположим,
что продавец Motika ушел на пенсию, и мы
хотим переназначить его номер новому
продавцу:
UPDATE
Salespeople
SET
sname = ‘Gibson’,city = ‘Boston’,comm = .10
WHERE
snum = 1004;
Эта
команда передаст новому продавцу Gibson,
всех текущих заказчиков быв- шего
продавца Motika и порядки, в том виде в
котором они были скомпонованы для Motika
с помощью пол snum. Вы не можете, однако,
модифицировать сразу много таблиц в
одной команде, частично потому, что вы
не можете использовать префиксы таблицы
со столбцами измененными предложением
SET. Другими словами, вы не можете сказать
— «SET Salespeople.sname = Gibson» в команде
UPDATE, вы можете сказать только так — «SET
sname = Gibson».
Использование выражений для модификации
Вы
можете использовать скалярные выражения
в предложении SET команды UPDATE, однако,
включив его в выражение пол которое
будет изменено. В этом их отличие от
предложения VALUES команды INSERT, в котором
выражения не могут использоваться; это
свойство скалярных выражений — весьма
полезна особенность. Предположим, что
вы решили удвоить комиссионные всем
вашим продавцам. Вы можете использовать
следующее выражение:
UPDATE
Salespeople
SET
comm = comm * 2;
Всякий
раз, когда вы ссылаетесь к указанному
значению столбца в предложении SET,
произведенное значение может получится
из текущей строки, прежде в ней будут
сделаны какие-то изменения с помощью
команды UPDATE. Естественно, вы можете
скомбинировать эти особенности, и
сказать, — удвоить комиссию всем продавцам
в Лондоне, таким предложением:
UPDATE
Salespeople
SET
comm = comm * 2
WHERE
city = ‘London’;
Операторы SQL DELETE, TRUNCATE, DROP
Оператор DELETE используется для удаления строк из таблицы.
Синтаксис оператора SQL DELETE
УДАЛИТЬ ИЗ имя_таблицы [условие ГДЕ];
- table_name — имя таблицы, которую необходимо обновить.
ПРИМЕЧАНИЕ: Предложение WHERE в команде удаления sql является необязательным и определяет строки в столбце, который удаляется. Если вы не включили предложение WHERE, все строки в таблице будут удалены, поэтому будьте осторожны при написании запроса DELETE без предложения WHERE.
Пример SQL DELETE
Чтобы удалить сотрудника с идентификатором 100 из таблицы сотрудников, запрос на удаление sql будет иметь вид
УДАЛИТЬ ОТ сотрудника, ГДЕ id = 100;
Чтобы удалить все строки из таблицы сотрудников, запрос будет выглядеть так:
УДАЛИТЬ ОТ сотрудника;
Команда SQL TRUNCATE используется для удаления всех строк из таблицы и освобождения пространства, содержащего таблицу.
Синтаксис для ОБРЕЗКИ таблицы:
TRUNCATE TABLE имя_таблицы;
Пример инструкции SQL TRUNCATE
Чтобы удалить все строки из таблицы сотрудников, запрос будет иметь вид
Сотрудник TRUNCATE TABLE;
Разница между операторами DELETE и TRUNCATE:
Оператор DELETE: Эта команда удаляет только строки из таблицы на основе условия, заданного в предложении where, или удаляет все строки из таблицы, если условие не указано. Но это не освобождает пространство, в котором находится таблица.
Оператор TRUNCATE: Эта команда используется для удаления всех строк из таблицы и освобождения пространства, содержащего таблицу.
Команда SQL DROP используется для удаления объекта из базы данных. Если вы отбрасываете таблицу, все строки в таблице удаляются, а структура таблицы удаляется из базы данных. После удаления таблицы мы не можем ее вернуть, поэтому будьте осторожны при использовании команды DROP. Когда таблица удаляется, все ссылки на нее становятся недействительными.
Синтаксис для удаления структуры таблицы sql:
DROP TABLE имя_таблицы;
Пример инструкции SQL DROP
Чтобы удалить сотрудника таблицы, запрос будет иметь вид
Сотрудник DROP TABLE;
Разница между операторами DROP и TRUNCATE:
Если таблица удаляется, все отношения с другими таблицами больше не будут действительны, ограничения целостности будут отброшены, привилегии предоставления или доступа к таблице также будут отброшены, если вы хотите снова использовать таблицу, ее необходимо воссоздать с помощью ограничения целостности, привилегии доступа и отношения с другими таблицами должны быть установлены снова. Но если таблица усечена, структура таблицы останется прежней, поэтому никаких из вышеперечисленных проблем не будет.
Отметить страницу в закладки
ChartJS CodeMirror CSS ES6 Ворчание HTML JavaScript jQuery JWT TinyMCE Машинопись Язык программирования | Программирование на C Ява PHP Python Контроль версийGit База данныхMongoDB MySQL Unix / LinuxПрограммирование оболочки Unix Vim ТестированиеМокко Мокко Чай PHPUnit КодПрограммирование Код JavaScript Типовой проектЭскиз Фотошоп Подробнее. ..Apache ActiveMQ Зеркалка Деньги Веб-разработчикCSS HTML JavaScript jQuery База данныхСУБД Redis SQL Язык программированияПрограммирование на C PHP Символы ASCII База данных Греческие буквы HTML-объекты JavaScript Linux Математические символы Римские цифры Сервер Интернет YouTube Больше. .. Mac Ubuntu VMware Веб-сайт WordPress ИнтернетРедактор начальной загрузки Смеситель цветов CSS Minifier HTML редактор HTML Entities Encoder Декодер Айпи адрес Минификатор JavaScript URL Encoder Decoder УтилитаДень Свидания Найдите Fileinfo Изображение в Base64 Генератор случайных паролей КалькуляторКалькулятор сложных процентов Калькулятор EMI FD — Калькулятор срочного депозита RD — Калькулятор периодических депозитов Калькулятор простых процентов Вопросы о способностях Столица страны Общий английский Пробный тест Умножить Картинная головоломка Плюс Минус Слайдер Пазл Судоку Крестики-нолики C # проект Проект обработки изображений Java |
УДАЛИТЬ
удалить-stmt:
скрыть
Команда DELETE удаляет записи из таблицы, обозначенной
квалифицированное имя-таблицы.
Если предложение WHERE отсутствует, все записи в таблице удаляются.
Если предоставляется предложение WHERE, то только те строки, для которых
Условие WHERE, логическое выражение истинно, удаляется.
Строки, для которых выражение является ложным или NULL, сохраняются.
Следующие ограничения применяются к операторам DELETE, которые встречаются в
тело оператора CREATE TRIGGER:
Имя таблицы, указанное как часть
Оператор DELETE внутри
триггерный орган должен быть неквалифицированным.Другими словами,
имя-схемы . Префикс в имени таблицы не допускается
внутри триггеров. Если таблица, к которой привязан триггер,
не во временной базе данных, тогда операторы DELETE в триггере
body должен работать с таблицами в той же базе данных, что и он. Если таблица
к которому привязан триггер, находится в базе данных TEMP, то
неквалифицированное имя удаляемой таблицы разрешается так же, как
это для оператора верхнего уровня (путем поиска сначала в базе данных TEMP, затем
основная база данных, затем любые другие базы данных в том порядке, в котором они были
прилагается).Предложения INDEXED BY и NOT INDEXED не допускаются при DELETE.
операторы внутри триггеров.Предложения LIMIT и ORDER BY (описанные ниже) не поддерживаются для
Операторы DELETE в триггерах.
Если SQLite скомпилирован с SQLITE_ENABLE_UPDATE_DELETE_LIMIT
параметр времени компиляции, то синтаксис оператора DELETE будет
расширен добавлением необязательных предложений ORDER BY и LIMIT:
delete-stmt-limited:
Если оператор DELETE имеет предложение LIMIT, максимальное количество строк,
будет удален найден путем оценки сопутствующего выражения и приведения
это целочисленное значение.Если результат оценки предложения LIMIT
не может быть преобразовано без потерь в целое число, это ошибка. А
отрицательное значение LIMIT интерпретируется как «без лимита». Если оператор DELETE
также имеет предложение OFFSET, затем оно аналогичным образом оценивается и преобразуется в
целочисленное значение. Опять же, это ошибка, если значение не может быть без потерь.
преобразован в целое число. Если нет предложения OFFSET или вычисленное
целочисленное значение отрицательное, эффективное значение OFFSET равно нулю.
Если оператор DELETE имеет предложение ORDER BY, то все строки, которые
быть удаленными при отсутствии предложения LIMIT, сортируются в соответствии с
СОРТИРОВАТЬ ПО.Первые M строк, где M — значение, найденное
оценивая выражение предложения OFFSET, пропускаются, а следующие
N , где N — значение выражения LIMIT, удаляются.
Если после выполнения предложения OFFSET осталось менее N строк
во внимание, или если предложение LIMIT дало отрицательное значение, то все
остальные строки удаляются.
Если в инструкции DELETE нет предложения ORDER BY, то все строки,
будут удалены в отсутствие предложения LIMIT, собраны в
произвольный порядок до применения предложений LIMIT и OFFSET для определения
фактически удаленное подмножество.
Предложение ORDER BY в инструкции DELETE используется только для определения того, какой
строки попадают в ПРЕДЕЛ. Порядок удаления строк произвольный.
и на него не влияет предложение ORDER BY.
Когда WHERE опущен в инструкции DELETE и в таблице
удаление не имеет триггеров,
SQLite использует оптимизацию для удаления всего содержимого таблицы
без необходимости посещать каждую строку таблицы отдельно.
Эта оптимизация «усечения» значительно ускоряет процесс удаления.До версии SQLite 3.6.5 (2008-11-12) оптимизация усечения
также означало, что sqlite3_changes () и
sqlite3_total_changes () интерфейсы
и прагма count_changes
фактически не вернет количество удаленных строк.
Эта проблема исправлена в версии 3.6.5 (2008-11-12).
Оптимизацию усечения можно навсегда отключить для всех запросов
путем перекомпиляции
SQLite с переключателем времени компиляции SQLITE_OMIT_TRUNCATE_OPTIMIZATION.
Оптимизацию усечения также можно отключить во время выполнения, используя
интерфейс sqlite3_set_authorizer ().Если обратный вызов авторизатора
возвращает SQLITE_IGNORE для кода действия SQLITE_DELETE, затем
операция DELETE продолжится, но оптимизация усечения будет
будут пропущены, и строки будут удаляться одна за другой.