Справочник по MySQL : SQL : Удаление строк из таблицы (DELETE FROM). Удалить столбец из таблицы sql


[sql-server] Как удалить столбец из существующей таблицы?

ALTER TABLE MEN DROP COLUMN Lname

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

Если этот столбец ссылается на другие таблицы, вам нужно выяснить, что делать с другими таблицами / столбцами. Один из вариантов - удалить внешние ключи и сохранить ссылки на данные в других таблицах.

Другой вариант - найти все ссылочные столбцы и удалить их, если они больше не нужны.

В таких случаях реальной проблемой является поиск всех внешних ключей. Вы можете сделать это, запросив системные таблицы или использовать сторонние инструменты, такие как ApexSQL Search (бесплатно) или Red Gate Dependency tracker (премиальные, но дополнительные функции). Здесь есть целая нить по внешним ключам

В SQL Server 2016 вы можете использовать новые инструкции DIE.

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

Вышеупомянутый запрос повторно запускается, он drops столбец, только если он exists в таблице, иначе он не будет вызывать ошибку.

Вместо использования больших IF оберток для проверки наличия column перед его удалением вы можете просто запустить вышеуказанный оператор DDL

Чтобы добавить столбцы в существующую таблицу:

ALTER TABLE table_name ADD column_name DATATYPE NULL

Чтобы удалить столбцы в существующей таблице:

ALTER TABLE table_name DROP COLUMN column_name

Простой ответ на этот вопрос:

ALTER TABLE MEN DROP COLUMN Lname;

Можно указать несколько столбцов:

ALTER TABLE MEN DROP COLUMN Lname, secondcol, thirdcol;

С SQL Server 2016 также можно оставить только столбец, если он существует. Это мешает вам получить сообщение об ошибке, о которой вы, вероятно, не заботитесь.

ALTER TABLE MEN DROP COLUMN IF EXISTS Lname;

Есть несколько предпосылок для удаления столбцов. Столбцы не могут быть:

  • Используется индексом
  • Используется ограничениями CHECK, FOREIGN KEY, UNIQUE или PRIMARY KEY
  • Связано с DEFAULT
  • Связано с правилом

Если какое-либо из вышеуказанных утверждений верно, сначала необходимо удалить эти ассоциации.

Кроме того, следует отметить, что удаление столбца не возвращает пространство с жесткого диска до тех пор, пока кластеризованный индекс таблицы не будет перестроен. Как правило, неплохо было бы следовать приведенному выше примеру команды перестроить таблицу следующим образом:

ALTER TABLE MEN REBUILD;

Наконец, как утверждают некоторые, это может быть медленным и, вероятно, заблокирует таблицу на время. Можно создать новую таблицу с нужной структурой, а затем переименовать ее следующим образом:

SELECT Fname -- Note LName the column not wanted is not selected INTO new_MEN FROM MEN; EXEC sp_rename 'MEN', 'old_MEN'; EXEC sp_rename 'new_MEN', 'MEN'; DROP TABLE old_MEN;

Но будьте осторожны, есть окно для потери данных вставленных строк здесь между первой командой select и последней командой rename.

code-examples.net

[alter-table] Как удалить столбец из таблицы в MySQL [ddl]

ALTER TABLE tbl_Country DROP COLUMN IsDeleted;

Here's рабочий пример.

Обратите внимание, что ключевое слово COLUMN является необязательным, так как MySQL будет принимать только DROP IsDeleted . Кроме того, чтобы удалить несколько столбцов, вы должны разделить их запятыми и включить DROP для каждого из них.

ALTER TABLE tbl_Country DROP COLUMN IsDeleted, DROP COLUMN CountryName;

Это позволяет вам DROP , ADD и ALTER несколько столбцов в одной таблице в одном выражении. Из справочного руководства MySQL :

Вы можете выпускать несколько предложений ADD , ALTER , DROP и CHANGE в одном выражении ALTER TABLE , разделенных запятыми. Это расширение MySQL для стандартного SQL, которое допускает только одно предложение каждого оператора ALTER TABLE .

Удаление столбцов из таблицы.

ALTER TABLE tbl_Country DROP COLUMN IsDeleted1, DROP COLUMN IsDeleted2;

Или без слова «COLUMN»

ALTER TABLE tbl_Country DROP IsDeleted1, DROP IsDeleted2;

Чтобы удалить столбец, используйте это,

ALTER TABLE `tbl_Country` DROP `your_col` ALTER TABLE `tablename` DROP `columnname`;

Или,

ALTER TABLE `tablename` DROP COLUMN `columnname`; ALTER TABLE tbl_Country DROP columnName;

Когда мы выполняем операцию, например удаление столбца из таблицы, она меняет структуру вашей таблицы. Для выполнения такого рода операций нам необходимо использовать инструкции определения языка данных (DDL). В этом случае мы должны использовать инструкцию ALTER.

ALTER - изменяет структуру базы данных

Запрос был бы -

alter table tbl_Country drop column IsDeleted;

code-examples.net

[sql-server-2005] Как удалить все строки из всех таблиц в базе данных SQL Server?

Обратите внимание, что TRUNCATE не будет работать, если у вас есть какая-либо ссылочная целостность.

В этом случае это будет работать:

EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?' GO EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' GO EXEC sp_MSForEachTable 'DELETE FROM ?' GO EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' GO EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ?' GO

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

Используя хранимую процедуру sp_MSForEachTable, которая позволяет нам легко обрабатывать некоторый код для каждой таблицы в одной базе данных. Это означает, что он используется для обработки одной команды T-SQL или различных команд T-SQL для каждой таблицы в базе данных.

Поэтому выполните следующие шаги, чтобы обрезать все таблицы в базе данных SQL Server:

Шаг 1. Отключите все ограничения в базе данных, используя следующий sql-запрос:

EXEC sys.sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'

Шаг 2. Выполните операцию Delete или truncate в каждой таблице базы данных с помощью команды sql:

EXEC sys.sp_msforeachtable 'DELETE FROM ?'

Шаг 3. Включите все ограничения в базе данных, используя следующую команду sql:

EXEC sys.sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' Set nocount on Exec sp_MSForEachTable 'Alter Table ? NoCheck Constraint All' Exec sp_MSForEachTable ' If ObjectProperty(Object_ID(''?''), ''TableHasForeignRef'')=1 Begin -- Just to know what all table used delete syntax. Print ''Delete from '' + ''?'' Delete From ? End Else Begin -- Just to know what all table used Truncate syntax. Print ''Truncate Table '' + ''?'' Truncate Table ? End ' Exec sp_MSForEachTable 'Alter Table ? Check Constraint All'

Для некоторых требований нам, возможно, придется пропустить определенные таблицы. Я написал сценарий ниже, чтобы добавить дополнительные условия для фильтрации списка таблиц. В приведенном ниже скрипте также будет отображаться счетчик предварительного удаления и пост-удаления.

IF OBJECT_ID('TEMPDB..#TEMPRECORDCOUNT') IS NOT NULL DROP TABLE #TEMPRECORDCOUNT CREATE TABLE #TEMPRECORDCOUNT ( TABLENAME NVARCHAR(128) ,PREDELETECOUNT BIGINT ,POSTDELETECOUNT BIGINT ) INSERT INTO #TEMPRECORDCOUNT (TABLENAME, PREDELETECOUNT, POSTDELETECOUNT) SELECT O.name TableName ,DDPS.ROW_COUNT PREDELETECOUNT ,NULL FROM sys.objects O INNER JOIN ( SELECT OBJECT_ID,

code-examples.net

Удаление строк из таблицы (DELETE FROM) — Справочник Web-языков

Материал из Справочник Web-языков

Удаление записей осуществляется командой DELETE FROM.

Синтаксис оператора DELETE FROM

DELETE [LOW_PRIORITY | QUICK] FROM table_name [WHERE where_definition] [ORDER BY ...] [LIMIT rows]

или

DELETE [LOW_PRIORITY | QUICK] table_name[.*] [,table_name[.*] ...] FROM table-references [WHERE where_definition]

или

DELETE [LOW_PRIORITY | QUICK] FROM table_name[.*], [table_name[.*] ...] USING table-references [WHERE where_definition]

Команда DELETE удаляет из таблицы table_name все записи, удовлетворяющие условию where_definition. Если условие WHERE where_definition не задано, то из таблицы table_name удаляются все записи.

Команда DELETE возвращает количество удаленных записей.

Следует учитывать, что если в команде DELETE не задано условие WHERE where_definition, то команда возвратит 0, хотя записи были удалены.

Если все же необходимо удалить все записи и узнать их количество, то в условии where_definition нужно задать заведомо истинное значение:

DELETE FROM `users` WHERE 1=1

Но в этом случае выполнение команды происходит значительно медленнее.

LOW_PRIORITY - Если указано это ключевое слово, то удаление записей из таблицы table_name не будет произведено до тех пор, пока другие процессы не закончат чтение их этой таблицы. QUICK - Если указано это ключевое слово, то при удалении записей обработчик таблицы не будет объединять индексы, что может ускорить операцию удаления. table_name - Имя таблицы в базе данных, из которой будет происходить удаление строк. LIMIT - Задает максимальное количество строк, которые могут быть удалены за текущий запрос. Следующий запрос удалит из таблицы users только 5 строк: DELETE FROM `users` LIMIT 5 ORDER BY - Задает имя поля, или имена полей через запятую, по которым происходит сортировка удаляемых записей. Эта возможность актуальна при необходимости удалить только определенное кол-во записей, отсортированных по какому-либо свойству. Следующий пример удалит из таблицы users запись самого молодого человека. Допустим таблица users имеет следующий вид: CREATE TABLE `users`( `name` VARCHAR(255) NOT NULL, `age` SMALLINT(3) NOT NULL ) Запишем в нее несколько записей: INSERT INTO `users` ( `name`, `age` ) VALUES ('Миша', 25), ('Ксюша', 15), ('Настя', 12), ('Саша', 26), ('Дима', 30) Таблица users имеет значения: SELECT * FROM `users` +-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Настя | 12 | | Саша | 26 | | Дима | 30 | +-------+-----+ 5 rows in set (0.00 sec) Удаляем самого молодого: DELETE FROM `users` ORDER BY `age` LIMIT 1 Теперь таблица имеет значения: SELECT * FROM `users` +-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Саша | 26 | | Дима | 30 | +-------+-----+ 4 rows in set (0.00 sec) Можем также удалить самого старого: DELETE FROM `users` ORDER BY `age` DESC LIMIT 1 Теперь таблица имеет значения: SELECT * FROM `users` +-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Саша | 26 | +-------+-----+ 3 rows in set (0.00 sec) Сортировка удаляемых записей при помощи команды ORDER BY появилась в MySQL начиная с версии 4.0. FROM table-references и USING ... - Позволяют удалять записи сразу из нескольких таблиц руководствуясь многотабличным условием WHERE where_definition. Следующие два примера равнозначны по производимым действиям и удаляют одинаковые записи в таблицах table_1 и table_2 и используя при поиске значений еще и таблицу table_3: DELETE `table_1`, `table_2` FROM `table_1`, `table_2`, `table_3` WHERE `table_1`.`id`=`table_2`.`id` && `table_2`.`id`=`table_3`.`id` Аналогичный запрос: DELETE FROM `table_1`, `table_2` USING `table_1`, `table_2`, `table_3` WHERE `table_1`.`id`=`table_2`.`id` && `table_2`.`id`=`table_3`.`id` Возможность многотабличного удаления записей появилась в MySQL начиная с версии 4.0.

www.spravkaweb.ru

Удаление строк из таблицы (DELETE FROM) — WebWikiABCD

Удаление записей осуществляется командой DELETE FROM.

Синтаксис оператора DELETE FROM

DELETE [LOW_PRIORITY | QUICK] FROM table_name [WHERE where_definition] [ORDER BY ...] [LIMIT rows]

или

DELETE [LOW_PRIORITY | QUICK] table_name[.*] [,table_name[.*] ...] FROM table-references [WHERE where_definition]

или

DELETE [LOW_PRIORITY | QUICK] FROM table_name[.*], [table_name[.*] ...] USING table-references [WHERE where_definition]

Команда DELETE удаляет из таблицы table_name все записи, удовлетворяющие условию where_definition. Если условие WHERE where_definition не задано, то из таблицы table_name удаляются все записи.

Команда DELETE возвращает количество удаленных записей.

Следует учитывать, что если в команде DELETE не задано условие WHERE where_definition, то команда возвратит 0, хотя записи были удалены.

Если все же необходимо удалить все записи и узнать их количество, то в условии where_definition нужно задать заведомо истинное значение:

DELETE FROM `users` WHERE 1=1

Но в этом случае выполнение команды происходит значительно медленнее.

LOW_PRIORITY - Если указано это ключевое слово, то удаление записей из таблицы table_name не будет произведено до тех пор, пока другие процессы не закончат чтение их этой таблицы. QUICK - Если указано это ключевое слово, то при удалении записей обработчик таблицы не будет объединять индексы, что может ускорить операцию удаления. table_name - Имя таблицы в базе данных, из которой будет происходить удаление строк. LIMIT - Задает максимальное количество строк, которые могут быть удалены за текущий запрос. Следующий запрос удалит из таблицы users только 5 строк: DELETE FROM `users` LIMIT 5 ORDER BY - Задает имя поля, или имена полей через запятую, по которым происходит сортировка удаляемых записей. Эта возможность актуальна при необходимости удалить только определенное кол-во записей, отсортированных по какому-либо свойству. Следующий пример удалит из таблицы users запись самого молодого человека. Допустим таблица users имеет следующий вид: CREATE TABLE `users`( `name` VARCHAR(255) NOT NULL, `age` SMALLINT(3) NOT NULL ) Запишем в нее несколько записей: INSERT INTO `users` ( `name`, `age` ) VALUES ('Миша', 25), ('Ксюша', 15), ('Настя', 12), ('Саша', 26), ('Дима', 30) Таблица users имеет значения: SELECT * FROM `users` +-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Настя | 12 | | Саша | 26 | | Дима | 30 | +-------+-----+ 5 rows in set (0.00 sec) Удаляем самого молодого: DELETE FROM `users` ORDER BY `age` LIMIT 1 Теперь таблица имеет значения: SELECT * FROM `users` +-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Саша | 26 | | Дима | 30 | +-------+-----+ 4 rows in set (0.00 sec) Можем также удалить самого старого: DELETE FROM `users` ORDER BY `age` DESC LIMIT 1 Теперь таблица имеет значения: SELECT * FROM `users` +-------+-----+ | name | age | +-------+-----+ | Миша | 25 | | Ксюша | 15 | | Саша | 26 | +-------+-----+ 3 rows in set (0.00 sec) Сортировка удаляемых записей при помощи команды ORDER BY появилась в MySQL начиная с версии 4.0. FROM table-references и USING ... - Позволяют удалять записи сразу из нескольких таблиц руководствуясь многотабличным условием WHERE where_definition. Следующие два примера равнозначны по производимым действиям и удаляют одинаковые записи в таблицах table_1 и table_2 и используя при поиске значений еще и таблицу table_3: DELETE `table_1`, `table_2` FROM `table_1`, `table_2`, `table_3` WHERE `table_1`.`id`=`table_2`.`id` && `table_2`.`id`=`table_3`.`id` Аналогичный запрос: DELETE FROM `table_1`, `table_2` USING `table_1`, `table_2`, `table_3` WHERE `table_1`.`id`=`table_2`.`id` && `table_2`.`id`=`table_3`.`id` Возможность многотабличного удаления записей появилась в MySQL начиная с версии 4.0.

ww.abcd.bz

Как удалить строку из таблицы CE SQL Server?

Я хочу удалить запись из таблицы SQL Server CE.

Существует 3 таблицы сценариев, варианты и результаты. Я хотел бы удалить запись из таблицы результатов. Предложение where содержит динамическую информацию, полученную с помощью других запросов. Эти запросы отлично работают и предоставляют требуемые данные.

Ошибки я получаю:

Был ошибка разбора запроса. [Знак номер строки = 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?

EDIT

Использование Kafs предложенное решение ниже, за исключением все та же:

Был ошибка разбора запроса. [Знак номер строки = 1, маркер линии смещения = 10, Token по ошибке = от]

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» уважительно.

Возможно, стоит упомянуть для тех, кто читает это в будущем, что я изменил «SQLParameter» на SQLCeParameter, поскольку этот запрос отправляется на сервер SQL CE.

stackoverrun.com

Удаление столбцов из таблицы

 

Опубликовано: Август 2016

ПРИМЕНЯЕТСЯ К: SQL Server (начиная с 2016) База данных SQL Azure Хранилище данных SQL Azure Parallel Data Warehouse

В этом разделе приведены инструкции по удалению столбцов таблиц в SQL Server 2016 в среде SQL Server Management Studio или с помощью Transact-SQL.

 Внимание!

При удалении столбца из таблицы этот столбец и все содержащиеся в нем данные удаляются из базы данных. Отменить это действие невозможно.

В этом разделе

  • Перед началом работы выполните следующие действия.

    Ограничения

    Безопасность

  • Удаление столбца из таблицы с помощью:

    Среда SQL Server Management Studio

    Transact-SQL

Ограничения

Нельзя удалить столбец, имеющий ограничение CHECK. В первую очередь необходимо удалить ограничение.

Удалить столбец, имеющий ограничения PRIMARY KEY, FOREIGN KEY или другие зависимости можно только с использованием конструктора таблиц. При использовании обозревателя объектов или Transact-SQLнеобходимо в первую очередь удалить зависимости столбца.

Безопасность

Разрешения

Требуется разрешение ALTER на таблицу.

Удаление столбцов с помощью обозревателя объектов
  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.

  2. В обозревателе объектов щелкните правой кнопкой мыши таблицу, из которой необходимо удалить столбцы, и выберите пункт Удалить.

  3. В диалоговом окне Удаление объекта нажмите кнопку ОК.

Если столбец содержит ограничения или другие зависимости, то в диалоговом окне Удаление объекта будет отображено сообщение об ошибке. Чтобы устранить проблему, удалите упомянутые ограничения.

Удаление столбцов с использованием конструктора таблиц
  1. В обозревателе объектов щелкните правой кнопкой мыши таблицу, из которой необходимо удалить столбцы, и выберите пункт Конструктор.

  2. Щелкните правой кнопкой мыши столбец, который надо удалить, и выберите из контекстного меню пункт Удалить столбец.

  3. Если столбец участвует в связи (FOREIGN KEY или PRIMARY KEY), то будет выдано сообщение с запросом на подтверждение удаления выбранных столбцов и их связей. Выберите Да.

Удаление столбцов
  1. В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить.

    USE AdventureWorks2012; GO ALTER TABLE dbo.doc_exb DROP COLUMN column_b ;

Если столбец содержит ограничения или другие зависимости, то будет возвращено сообщение об ошибке. Чтобы устранить проблему, удалите упомянутые ограничения.

Дополнительные примеры см. в статье ALTER TABLE (Transact-SQL).

technet.microsoft.com