Главная » Программирование » Основы SQL. Операторы DELETE, TRUNCATE
Русфонд

Основы SQL. Операторы DELETE, TRUNCATE

25 сентября 2012 - Рубрики Программирование

2167 просмотров

Приветствую вас, друзья!

Сегодня продолжим тему изучения языка SQL. Эта статья будет о операторе DELETE.

В сайдбар справа добавлена кнопка Google+. Если вам поможет данный материал, прошу вас нажмите на кнопку - порекомендуйте сайт в Google.

Оператор DELETE позволяет удалить данные из таблицы. Синтаксис оператора довольно прост

 

 

 

 

 

DELETE FROM <название таблицы>
WHERE <условие>

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

При использовании условия в секции WHERE допускается использование как простых условий, так и сложных с использованием логических операторов AND, OR, NOT. Кроме того допускается использование подзапросов.
Рассмотрим несколько примеров
1. Удаляем из таблицы departments отдел с номером 1

DELETE FROM departments
WHERE id=1

2. Удаляем из таблицы departments отдел, в названии которого есть отдел кадров. Здесь, кстати, можно использовать строковую функцию LOWER()

DELETE FROM departments
WHERE LOWER(name) LIKE '%отдел%кадров%'

3. Удаляем из таблицы employees сотрудников, у которых не заполнены поля возраст и номер отдела

DELETE FROM employees
where age IS NULL and dept_id IS NULL

4. Удаляем из таблицы employees сотрудников, которые работают в отделе Бухгалтерия

DELETE FROM employees
WHERE dept_id = (SELECT id FROM departments WHERE neme LIKE '%Бухгалтерия%')

Не допускается использование для нескольких таблиц, соединенных, например, через JOIN.

При использовании оператора DELETE в Oracle после выполнения запроса необходимо сделать COMMIT для сохранения изменений в таблице. Пока изменения не закоммичены остальные пользователи их не видят. Пока изменения не зафиксированы вы можете вернуть все изменения обратно с помощью оператора ROLLBACK.

Также возможна ситуация, когда поля удаляемых строк являются внешним ключом для какой-либо другой таблицы. В таком случае просто так удалить данные не получится, будет появляться ошибка. Для этих целей в Oracle можно использовать опции:

  • ON DELETE SET NULL — в другой таблице удаляемые данные, которые являются внешним ключом на исходную таблицу будут заменены на NULL
  • ON DLETE CASCADE — в другой таблице будут удалены строки, для которых удаляемые данные из исходной таблицы являются внешним ключом.

Оператор DELETE довольно долгий, т.к. все изменяемые данные заносятся сегменты отката. Если нужно очистить всю таблицу целиком и при этом вы понимаете, что эти данные точно не понадобятся в дальнейшем, то можно использовать оператор TRUNCATE. Синтаксис очень прост

TRUNCATE TABLE <имя таблицы>

TRUNCATE работает практически моментально, но после его работы восстановить данные практически не возможно.

Если этот материал оказался вам полезен, порекомендуйте его в в Google, нажав кнопку Google+ справа в сайдбаре или через кнопки социальных сервисов ниже.

П.С. не забудьте оставить комментарий к статье, а также поделиться ссылкой с друзьями и коллегами через социальные сервисы или скопировав ссылку на статью ниже. Кроме того, вы можете предложить тему статьи через кнопку слева "Предложить тему статьи". Там же можно оставить пожелания, идеи по развитию сайта, а также благодарности (ну а вдруг)
П.П.С. предлагаю вам также вступить в Группа Вконтакте!группу Вконтакте, где вы сможете пообщаться с участниками на интересующие вас темы. Смелее!!!
Если вы больше времени проводите в Twitter, то за обновлениями на сайте можно следить, подписавшись на мою лентуTwitter: follow me!

Возможно вам также будут интересны статьи :

 

Предыдущие материалы из данной категории:

Комментариев: 4 , , , , ,

Понравилась статья? Поделитесь ссылкой




Комментарии к «Основы SQL. Операторы DELETE, TRUNCATE»:

  1.  Евгений 13 декабря 2013 21:19:12

    Привет я смотрю ты немного шариш в mysgl если знаеш подскажи
    как исправить ошибку выскакивающюю при сохранении документа в джумла «Сохранить не удалось из-за ошибки: SQL=TRUNCATE TABLE `joo_finder_tokens` «

    •  Руслан 14 декабря 2013 15:56:38

      Добрый день!
      похоже на sql-иньекцию
      у вас в материале есть такой текст? похоже что кто-то хочет почистить полностью таблицу `joo_finder_tokens`

  2.  Евгений 14 декабря 2013 16:54:54

    Не понял? Вирус?
    У есть сохранённая таблица, если я переустановлю sgl не потеряю я последние данные. Или можно как-то помочь этой таблице.Ни чего не понимаю в mysgl всё ни как не найду времени разобраться.

    •  Руслан 14 декабря 2013 17:33:44

      что значит переустановлю sql?
      читайте про sql-инъекции и ищите на своем файле то место откуда берется SQL=TRUNCATE TABLE `joo_finder_tokens`
      суть этой строки — удалить все данные из таблицы `joo_finder_tokens`
      что это за таблица я не знаю

Оставьте комментарий:




:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

Я человек, а не бот.