Очистка процедурного КЭШа
Оптимизатор MS SQL Server кэширует планы запросов для их повторного выполнения. Это делается для того, чтобы экономить время, затрачиваемое на компиляцию запроса в том случае, если такой же запрос уже выполнялся и его план известен.
Возможна ситуация, при которой MS SQL Server, ориентируясь на устаревшую статистическую информацию, построит неоптимальный план запроса. Этот план будет сохранен в процедурном КЭШе и использован при повторном вызове такого же запроса. Если Вы обновили статистику, но не очистили процедурный кэш, то SQL Server может выбрать старый (неоптимальный) план запроса из КЭШа вместо того, чтобы построить новый (более оптимальный) план.
Таким образом, рекомендуется всегда после обновления статистик очищать содержимое процедурного КЭШа.
Для очистки процедурного КЭШа MS SQL Server необходимо выполнить следующий SQL запрос:
Этот запрос следует выполнять непосредственно после обновления статистики. Соответственно, частота его выполнения должна совпадать с частотой обновления статистики.
Настройка очистки процедурного КЭШа (MS SQL 2005)
Поскольку процедурный КЭШ необходимо очищать при каждом обновлении статистики, данную операцию рекомендуется добавить в уже созданный субплан «Обновление статистик». Для этого следует открыть субплан и добавить в его схему задачу Execute T-SQL Statement Task. Затем следует соединить задачу Update Statistics Task стрелочкой с новой задачей.
В тексте созданной задачи Execute T-SQL Statement Task следует указать запрос «DBCC FREEPROCCACHE»:
Update Warning!
Be careful when updating records. If you omit the clause, ALL records
will be updated!
Example
UPDATE Customers
SET ContactName=’Juan’;
The selection from the «Customers» table will now look like this:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Juan | Obere Str. 57 | Frankfurt | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Juan | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Juan | Mataderos 2312 | México D.F. | 05023 | Mexico |
4 | Around the Horn | Juan | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Juan | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
❮ Previous
Next ❯
Команда UPDATE
Команда UPDATE — производит изменения (обновление) в уже существующей записи или во множестве записей в таблице SQL. Изменяет существующие значения в таблице или в основной таблице представления.
Команда UPDATE Синтаксис команды
Команда UPDATE. Основные ключевые слова и параметры команды UPDATE
- schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
- table view — имя таблицы SQL, в которой изменяются данные; если определяется представление, данные изменяются в основной таблице SQL представления
- subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
- сolumn — столбец таблицы SQL или представления SQL, значение которого изменяется; если столбец таблицы из предложения SET опускается, значение столбца остается неизменяемым
- expr — новое значение, назначаемое соответствующему столбцу; это выражение может содержать главные переменные и необязательные индикаторные переменные
- subquery_2 — новое значение, назначаемое соответствующему столбцу
- subquery_3 — новое значение, назначаемое соответствующему столбцу
WHERE — определяет диапазон изменяемых строк теми, для которых определенное условие является TRUE; если опускается эта фраза, модифицируются все строки в таблице или представлении. При выдаче утверждения UPDATE включается любой UPDATE-триггер, определенный на таблице. Подзапросы. Если предложение SET содержит подзапрос, он возвращает точно одну строку для каждой модифицируемой строки. Каждое значение в результате подзапроса назначается соответствующим столбцам списка в круглых скобках. Если подзапрос не возвращает никакие строки, столбцу назначается NULL. Подзапросы могут выбирать данные из модифицируемой таблицы. Предложение SET может совмещать выражения и подзапросы.
Команда UPDATE Пример 1
Изменение для всех покупателей рейтинга на значение, равное 200:
Команда UPDATE Пример 2
Замена значения столбца во всех строках таблицы, как правило, используется редко. Поэтому в команде UPDATE, как и в команде DELETE, можно использовать предикат. Для выполнения указанной замены значений столбца rating, для всех покупателей, которые обслуживаются продавцом Giovanni (snum = 1003), следует ввести:
Команда SQL UPDATE Пример 3
В предложении SET можно указать любое количество значений для столбцов, разделенных запятыми:
Команда UPDATE Пример 4
В предложении SET можно указать значение NULL без использования какого-либо специального синтаксиса (например, такого как IS NULL). Таким образом, если нужно установить все рейтинги покупателей из Лондона (city = ‘London’) равными NULL-значению, необходимо ввести:
Команда UPDATE Пример 5
Поясняет использование следующих синтаксических конструкций команды UPDATE:
- Обе формы предложения SET вместе в одном утверждении.
- Подзапрос.
- Предложение WHERE, ограничивающее диапазон модифицируемых строк.
Вышеупомянутое утверждение UPDATE выполняет следующие операции:
- Модифицирует только тех служащих, кто работают в Dallas или Detroit
- Устанавливает значение колонки deptno для служащих из Бостона
- Устанавливает жалованье каждого служащего в 1.1 раз больше среднего жалованья всего отдела
- Устанавливает комиссионные каждого служащего в 1.5 раза больше средних комиссионных всего отдела
Примеры SQL INSERT INTO SELECT
Следующая инструкция SQL копирует «Suppliers» в «Customers» (столбцы, которые не заполнены данными, будут содержать NULL):
Пример
INSERT INTO Customers (CustomerName, City, Country)SELECT SupplierName, City, Country FROM Suppliers; Попробуйте сами »
Следующая инструкция SQL копирует «Suppliers» в «Customers» (заполните все столбцы):
Пример
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers; Попробуйте сами »
Следующая инструкция SQL копирует только немецких поставщиков в раздел «Customers»:
Пример
INSERT INTO Customers (CustomerName, City, Country)SELECT SupplierName, City, Country FROM SuppliersWHERE Country=’Germany’; Попробуйте сами
Описание инструкции UPDATE в T-SQL
UPDATE – инструкция SQL, с помощью которой происходит изменение существующих данных в таблицах.
Важные моменты:
- Если инструкция UPDATE, т.е. обновление строк, нарушает какое-нибудь ограничение или правило, или новое значение имеет несовместимый тип данных (хотя бы для одной строки), то возникнет ошибка и все изменения отменяются, никакие строки не обновляются;
- По умолчанию инструкция UPDATE получает монопольную блокировку на целевую таблицу, которую она изменяет, это означает, что пока одна инструкция UPDATE выполняется, т.е. изменяет данные в таблице, другие инструкции не могут изменять данные в этой таблице;
- Чтобы использовать инструкцию UPDATE, нужны соответствующие разрешения на изменение данных, а также на чтение данных, если инструкция содержит условие WHERE;
- Если Вам нужно узнать количество строк, которые Вы обновили инструкцией UPDATE, например, для возврата в клиентское приложение или для любых других целей, то для этого Вы можете использовать функцию @@ROWCOUNT.
Упрощенный синтаксис UPDATE
Синтаксис UPDATE достаточно большой, и начинающим понять его сложно, поэтому, для того чтобы было проще понять логику формирования инструкции UPDATE, я приведу упрощенный синтаксис.
UPDATE Целевая таблица SET Имя столбца = Значение
FROM Таблица источник
WHERE Условие
Где
- UPDATE – инструкция обновления;
- Целевая таблица – таблица, данные в которой необходимо изменить;
- SET – команда, которая задает список обновляемых столбцов. Каждый следующий столбец указывается через запятую;
- Имя столбца – столбец, в котором расположены данные, которые необходимо изменить;
- Значение – новое значение, на которое необходимо изменить значение столбца. Можно указывать как конкретное значение, так и расчётное выражение, функцию или подзапрос. Также можно указать ключевое слово DEFAULT, что будет означать, что столбцу необходимо присвоить значение по умолчанию;
- FROM – секция, которая указывает таблицу, из которой необходимо взять новое значение столбца. Секция может содержать объединение JOIN;
- Таблица источник – таблица, в которой расположено новое значение столбца;
- WHERE – условие отбора строк, подлежащих обновлению.
Что это такое
Sql — язык структурированных запросов. Создан для определения типа данных, предоставления доступа к ним и обработке информации за короткие промежутки времени. Он описывает компоненты или какие-то результаты, которые вы хотите видеть на интернет-проекте.
Если говорить по-простому, то этот язык программирования позволяет добавлять, изменять, искать и отображать информацию в БД. Популярность mysql связана с тем, что он используется для создания динамических интернет-проектов, основа которых составляет база данных. Поэтому для разработки функционального блога вам необходимо выучить этот язык.
Описание инструкции UPDATE в T-SQL
UPDATE – инструкция SQL, с помощью которой происходит изменение существующих данных в таблицах.
Важные моменты:
- Если инструкция UPDATE, т.е. обновление строк, нарушает какое-нибудь ограничение или правило, или новое значение имеет несовместимый тип данных (хотя бы для одной строки), то возникнет ошибка и все изменения отменяются, никакие строки не обновляются;
- По умолчанию инструкция UPDATE получает монопольную блокировку на целевую таблицу, которую она изменяет, это означает, что пока одна инструкция UPDATE выполняется, т.е. изменяет данные в таблице, другие инструкции не могут изменять данные в этой таблице;
- Чтобы использовать инструкцию UPDATE, нужны соответствующие разрешения на изменение данных, а также на чтение данных, если инструкция содержит условие WHERE;
- Если Вам нужно узнать количество строк, которые Вы обновили инструкцией UPDATE, например, для возврата в клиентское приложение или для любых других целей, то для этого Вы можете использовать функцию @@ROWCOUNT.
Упрощенный синтаксис UPDATE
Синтаксис UPDATE достаточно большой, и начинающим понять его сложно, поэтому, для того чтобы было проще понять логику формирования инструкции UPDATE, я приведу упрощенный синтаксис.
UPDATE Целевая таблица SET Имя столбца = Значение
FROM Таблица источник
WHERE Условие
Где
- UPDATE – инструкция обновления;
- Целевая таблица – таблица, данные в которой необходимо изменить;
- SET – команда, которая задает список обновляемых столбцов. Каждый следующий столбец указывается через запятую;
- Имя столбца – столбец, в котором расположены данные, которые необходимо изменить;
- Значение – новое значение, на которое необходимо изменить значение столбца. Можно указывать как конкретное значение, так и расчётное выражение, функцию или подзапрос. Также можно указать ключевое слово DEFAULT, что будет означать, что столбцу необходимо присвоить значение по умолчанию;
- FROM – секция, которая указывает таблицу, из которой необходимо взять новое значение столбца. Секция может содержать объединение JOIN;
- Таблица источник – таблица, в которой расположено новое значение столбца;
- WHERE – условие отбора строк, подлежащих обновлению.
Выборка информации
Для извлечения значений из БД используется команда SELECT. Пишем такой код:
SELECT * FROM ‘table’ WHERE id = ‘1’
В данном примере в таблице выбираем все имеющиеся поля. Это происходит если прописать в команде звездочку «*». Если нужно выбрать какое-то выборочное значение пишем так:
SELECT log , pass FROM table WHERE id = ‘1’
Необходимо отметить, что умения работать с базами данных будет недостаточно. Для создания профессионального интернет-проекта придется научиться добавлять на страницы данные из БД. Для этого ознакомьтесь с языком веб-программирования php. В этом вам поможет классный курс Михаила Русакова .
Команда «ALTER TABLE»
Общий синтаксис команды «ALTER TABLE» выглядит так:
ALTER TABLE Наименование_таблицы
{ ADD наименование_нового_столбца указать_тип_информации_столбца |
DROP COLUMN наименование_столбца |
MODIFY COLUMN наименование_столбца указать_тип_информации_столбца |
ALTER COLUMN наименование_столбца SET DEFAULT назначаем_значение_по_умолчанию |
ADD определяем_ограничения_таблицы |
DROP задаем_название_ограничениям }
Возможностей у команды «ALTER TABLE» намного больше, но не все они используются на практике, поэтому остановимся на тех, которые могут часто встретиться.
MySQL: как добавить столбец в таблицу
Представим, что у вас есть таблица MySQL с какой-то информацией под названием «MyTable», куда нужно добавить столбец «NewColumn». Код будет таким:
ALTER TABLE MyTable
ADD NewColumn VARCHAR(60) NULL;
В коде мы создали новый столбец «MyTable» с типом данных «VARCHAR» и атрибутом «NULL».
Добавить столбец в таблицу MySQL — не проблема. Однако это может стать проблемой, когда таблица далеко не новая и заполнена большим объемом информации, особенно когда таблица содержит очень много строк
Поэтому добавление столбцов нужно использовать с осторожностью, чтобы не навредить. Если таблица новая, тогда проблем возникнуть не должно
MySQL: как удалить столбец
Чуть выше мы добавили новый столбец в таблицу MySQL, теперь давайте его удалим. Таким же способом можно удалить любой столбец таблицы. Для этого будем использовать следующий код:
ALTER TABLE MyTable
DROP COLUMN NewColumn
MySQL: как изменить значение столбца по умолчанию
Представим, что в добавленном столбце нужно изменить значение по умолчанию, в нашем случае это будет число «35». Для этого будем использовать такой код:
ALTER TABLE MyTable
ALTER COLUMN NewColumn SET DEFAULT 35;
MySQL: как изменить тип столбца
Иногда нужно поменять тип информации, сохраняемой в столбце. В нашем случае мы при добавлении столбца указали тип данных «VARCHAR». Теперь давайте сменим его на «CHAR(90)», но оставим тот же атрибут «NULL». Код будет таким:
ALTER TABLE MyTable
MODIFY COLUMN NewColumn CHAR(90) NULL;
MySQL: как переименовать столбец таблицы
Допустим, мы хотим название нашего столбца «NewColumn» поменять на другое название — «OldColumn». В этом случае нам поможет вот такой код:
ALTER TABLE MyTable
RENAME COLUMN NewColumn TO OldColum
С переименованием столбцов таблицы нужно быть осторожными, потому что, если с этим столбцом была настроена какая-то зависимость, тогда она будет нарушена, а потому повлечет дальнейшие проблемы в работе с базой данных. Поэтому для переименования столбцов таблицы лучше всего использовать инструмент рефакторинга, который управляет зависимостями и обновит их при переименовании столбца этим инструментом.
MySQL: как переименовать таблицу
Метод «ALTER TABLE» хорош тем, что он работает не только «внутри» таблицы, но и с самой таблицей. Например, с его помощью можно переименовать таблицу MySQL. В нашем случае название «MyTable» мы поменяем на «GoodTable». Вот как это делается в коде:
ALTER TABLE MyTable RENAME TO GoodTable
1С:Предприятие Бухгалтерия переход с редакции 2.0 на 3.0. Практика перевода информационной базы для работы в управляемом приложении. Промо
Из информационного выпуска 1С № 16872 от 08.07.2013г. стало известно об относительно скором необходимом переходе на редакцию 1С:Бухгалтерия 3.0. В данной публикации будут разобраны некоторые особенности перевода нетиповой конфигурации 1С:Бухгалтерия 2.0 на редакцию 3.0, которая работает в режиме «Управляемое приложение».
Публикация будет дополняться по мере подготовки нового материала. Публикация не является «универсальной инструкцией».
Update 3. Права доступа. 14.08.2013
Update 4. Добавлен раздел 0. Дополнен раздел 4. Добавлен раздел 7. Внесены поправки, актуализирована информация. 23.11.2013.
1 стартмани
66
Защита данных и права доступа
Важной задачей базы данных является защита информации от несанкционированного доступа. Предположим, ваш секретарь Мери прежде не имела разрешения на ввод в базу данных сведений о новых клиентах
С помощью следующей инструкции SQL можно дать ей такое разрешение.
Аналогично приведенная ниже инструкция дает Мери разрешение на изменение данных о клиентах и чтение информации о них с помощью .
Если вы решите запретить Мери добавлять в базу данных сведения о новых клиентах, для этого достаточно воспользоваться инструкцией .
Точно так же следующая инструкция revoke отменит все привилегии Мери на доступ и модифицирование данных о клиентах.
Практическое упражнение № 1:
На основании таблицы suppliers заполненной следующими данными, обновите city на ‘Denver’ для всех записей, чьё supplier_name является ‘INTEL’.
Oracle PL/SQL
CREATE TABLE suppliers
( supplier_id number(10) not null,
supplier_name varchar2(50) not null,
city varchar2(50),
CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id)
);
INSERT INTO suppliers (supplier_id, supplier_name, city)
VALUES (5001, ‘Microsoft’, ‘Chicago’);
INSERT INTO suppliers (supplier_id, supplier_name, city)
VALUES (5002, ‘INTEL’, ‘Chicago’);
INSERT INTO suppliers (supplier_id, supplier_name, city)
VALUES (5003, ‘Red Hat’, ‘Detroit’);
INSERT INTO suppliers (supplier_id, supplier_name, city)
VALUES (5004, ‘NVIDIA’, ‘New York’);
1 |
CREATETABLEsuppliers supplier_namevarchar2(50)notnull, cityvarchar2(50), CONSTRAINTsuppliers_pkPRIMARYKEY(supplier_id) INSERTINTOsuppliers(supplier_id,supplier_name,city) VALUES(5001,’Microsoft’,’Chicago’); INSERTINTOsuppliers(supplier_id,supplier_name,city) VALUES(5002,’INTEL’,’Chicago’); INSERTINTOsuppliers(supplier_id,supplier_name,city) VALUES(5003,’Red Hat’,’Detroit’); INSERTINTOsuppliers(supplier_id,supplier_name,city) VALUES(5004,’NVIDIA’,’New York’); |
Решение для практического упражнения № 1:
Следующий оператор UPDATE будет выполнять это обновление в Oracle.
Oracle PL/SQL
UPDATE suppliers
SET city = ‘Denver’
WHERE supplier_name = ‘INTEL’;
1 |
UPDATEsuppliers SETcity=’Denver’ WHEREsupplier_name=’INTEL’; |
Таблица suppliers будет выглядеть следующим образом:
SUPPLIER_ID | SUPPLIER_NAME | CITY |
---|---|---|
5001 | Microsoft | Chicago |
5002 | INTEL | Denver |
5003 | Red Hat | Detroit |
5004 | NVIDIA | New York |
Как мы обычно меняем записи регистров сведений?
1С с записями баз данных работает вполне сносно, особенно если это набор записей того или иного регистра. Если записей немного, то для их изменения вполне годится чтение набора записей, заполнение нужной колонки и запись изменившихся данных. Т.е. примерно так:
Набор = РегистрыСведений.КакойТоРегистрСведений.СоздатьНаборЗаписей(); Набор.Отбор.Реквизит.Значение = ЗначениеФильтра; Набор.Отбор.Реквизит.Использование = Истина; Набор.Прочитать(); Для Каждого Ст ИЗ Набор Цикл Набор.НужнаяКолонка = НужноеЗначение; Набор.НоваяКлонка = Набор.КолонкаСоСтанымЗначением; КонецЦикла; Набор.Записать();
При существенном размере таблицы такой подход будет неоправдан. Для решения подобных задач программист часто пишет запрос, выбирая нужные записи для изменения, а потом через менеджер записи меняет оные в цикле. Как-то так:
Запрос = Новый Запрос( "ВЫБРАТЬ | НужнаяКолонка КАК НужнаяКолонка, | КолонкаСоСтанымЗначением КАК НоваяКлонка, | Реквизит, | Реквизит1, | Реквизит2 |ИЗ | РегистрыСведений.КакойТоРегистрСведений |ГДЕ | Реквизит = &ЗначениеОтбора"); Запрос.УстановитьПараметр("ЗначениеОтбора"); Для Каждого Ст ИЗ Запрос.Выполнить().Выгрузить() Цикл Запись = РегистрыСведений.КакойТоРегистрСведений.СоздатьМенеждерЗаписи(); ЗаполнитьЗначенияСвойств(Запись, Ст); Запись.Записать(); КонецЦикла;
Это уже работает куда медленнее. Можно, конечно, распараллелить процесс с помощью фоновых заданий, но тут уже трудоемкость становится неадекватна решаемой задаче (хотя, если у вас есть подсистема мультипоточного вычисления, то трудоемкость оказывается не сильно выше).
Как обновить несколько столбцов одновременно
У Молли отсутствует значение в двух разных столбцах. Мы можем использовать один оператор UPDATE, разделяя назначения запятыми, например:
Таблица теперь будет выглядеть так:
id(PK) | name | age | state | |
---|---|---|---|---|
1 | Paul | 24 | Michigan | paul@example.com |
2 | Molly | 22 | New Jersey | molly@example.com |
3 | Robert | 19 | New York | robert@example.com |
Поэтому, прежде чем отправлять запрос UPDATE, отправьте запрос SELECT с тем же условием WHERE. Если он возвращает запись(записи), которую(которые) вы хотите обновить. Если SELECT запрос вернул не ту или не те записи которые ожидались, вам нужно изменить условие WHERE.
Например, перед выполнением UPDATE запроса для изменения пользователя Молли, мы могли бы отправить запрос SELECT, чтобы убедиться, что использованное нами предложение WHERE id = 2 является правильным:
Удаление данных с помощью представления
С помощью представления можно удалить строки из таблицы, на которой оно основано, как это показано в примере ниже:
Запрос в примере создает представление, посредством которого затем удаляются строки из таблицы Works_on. В отличие от инструкций INSERT и UPDATE, инструкция DELETE допускает значения, получаемые из констант или выражений, в столбце представления, используемого для удаления строк из таблицы, на которой оно основано.
В примере ниже показано представление, посредством которого можно удалять строки, но не вставлять строки или изменять значения столбцов:
Инструкция DELETE в примере выше удаляет все строки таблицы Project, на которой основано представление view_budget.
5.3Резервное копирование базы данных ПО «Луч»
5.3.1Резервное копирование
К сожалению, в SQL Server Express отсутствуют средства автоматического резервного копирования данных, поэтому данный раздел содержит описание резервного копирования вручную, через интерфейс SQL Server Management Studio Express.
Запустите SSMSE через меню Пуск/Программы/MS SQL Server/Среда SQL Server Management Studio Express.
Для соединения с SQL Server используйте проверку подлинности Windows или введите имя и пароль администратора SQL Server, если используется другой режим проверки.
В качестве имени сервера укажите имя компьютера, на котором установлен SQL Server Express, и далее через обратный слэш — имя экземпляра. Для экземпляра по умолчанию SQL Server Express это SQLEXPRESS.
В обозревателе объектов разверните дерево выбранного сервера, щелкнув имя сервера, раскройте узел «Базы данных» и выберите базу данных ПО «Луч»:
Из контекстного меню «Задачи» выберите пункт «Создать резервную копию».
В окне «Резервное копирование базы данных» убедитесь, что выбрана база данных ПО «Луч» и тип резервной копии «Полное». Полная резервная копия содержит все данные заданной базы данных и журналов с возможностью последующего восстановления этих данных.
В поле «Назначение» оставьте путь по умолчанию или укажите новые пути к файлу с копией базы данных с помощью кнопки «Добавить».
Если будет задано несколько путей назначения, резервная копия будет разделена таким образом, что восстановление будет возможно только при указании всех этих путей.
Введите путь и имя файла резервной копии. Расширение файла может быть произвольным, но чаще всего это bak.
Нажмите «ОК».
Подождите, пока осуществляется копирование:
В случае успешного копирования будет выдано сообщение:
Файлы с копией базы данных появятся во всех папках, указанных в поле «Назначение».
5.3.2Восстановление
В окне «Восстановление базы данных» выберите опцию «С устройства» и нажмите кнопку для выбора файла с резервной копией.
Нажмите кнопку «Добавить», чтобы указать путь к файлу с резервной копией.
Если резервное копирование было осуществлено в несколько файлов, все они должны быть указаны при восстановлении.
Нажмите «ОК».
Отметьте флажком имя резервного набора и нажмите кнопку «ОК», чтобы начать восстановление:
По завершении восстановления появится сообщение об успешном восстановлении базы данных:
Выборка данных при помощи SQL
Вначале просмотрим список офисов с указанием города, где размещается офис, и объема продаж офиса с начала года по текущий день. Инструкция SQL, которая извлекает информацию из базы данных, называется select. Приведенная ниже инструкция SQL выбирает из базы данных интересующую вас информацию.
Инструкция применяется во всех SQL-запросах на выборку данных. Так, далее приведен запрос, который запрашивает список имен и текущих объемов продаж по всем служащим в базе данных. Кроме того, в запросе приводится планируемый объем продаж и номер офиса, где работает служащий. В этом случае данные извлекаются из таблицы SALESREPS. Инструкция запрашивает для каждого офиса три вида данных: город, номер офиса и объем продаж. Еще она определяет, что данные находятся в таблице OFFICES, в которой хранится информация об офисах. Результаты запроса приведены сразу после рассматриваемой инструкции в форме таблицы. Заметим, что форматирование вывода результатов запроса зависит от конкретной реализации SQL и может изменяться при переходе от одной СУБД к другой.
SQL позволяет также запрашивать вычисляемые результаты. Например, можно попросить вычислить сумму, на которую каждый служащий опережает план или отстает от него. Значения в строке продавца Тома Снайдера представляют отсутствующие или неизвестные данные. Он — новичок в компании и пока не получил ни назначения в определенный офис, ни планируемый объем продаж. Но тем не менее он уже осуществил некоторое количество продаж, о чем свидетельствуют выведенные данные в его строке.
Запрашиваемые данные (включая вычисленную разницу между объемом продаж и планом) снова представлены в виде строк и столбцов таблицы. Возможно, вы хотели бы получить сведения о служащих, которые не выполняют план. SQL позволяет легко получить такую информацию, добавив в предыдущий запрос операцию сравнения.
С помощью этого же приема можно получить список больших заказов и определить, кто сделал конкретный заказ, какие товары и в каких количествах были заказаны. SQL, кроме того, позволяет упорядочить заказы по их стоимости.
1.3.2. Добавление/удаление файла
Когда вы используете автоматическое увеличение, и база данных состоит из нескольких файлов, SQL Server использует стратегию пропорционального заполнения между всеми фалами каждой файловой группы. По мере записи данных в файловую группу, сервер записывает результат пропорционально свободному пространству в каждом файле файловой группы и после этого записывает в следующий файл. Тут есть и положительные и отрицательные моменты. Положительное видно сразу, ведь если диски подключены к разным контроллерам, то мы добиваемся параллельности, а жесткие диски являются самым слабым звеном. Но отрицательный момент может возникнуть при автоматическом увеличении файлов. Чаще всего размеры дисков разные, да и свободное пространство на них распределяется не равномерно (если на один диск установить пару игр, то свободного места будет меньше, чем на другом). Теперь, один диск будет заполнен раньше, чем другой. Нет, база данных в этом случае останется доступной, и запись будет только на один диск, но произойдет резкое падение производительности во время записи.
Допустим, что на вашем основном диске, где расположена база данных, заканчивается место на диске. В этом случае, если есть другие логические разделы или жесткие диски, можно добавить к серверу новый файл и расположить его на этом диске. Добавление чем-то похоже на определение файла при создании базы данных:
ALTER DATABASE TestDatabase ADD FILE ( NAME = dbFile2, FILENAME = 'c:\Data\dbfile2.ndf', SIZE = 5MB, FILEGROWTH = 5MB )
В данном примере изменяется уже существующая база данных, на которой мы тестировали не один пример — TestDatabase. Затем указывается ключевое слово ADD FILE, указывающее на необходимость добавить новый файл. После этого ключевого слова, в круглых скобках описываются параметры файла точно так же, как при описании файла во время создания базы данных.
В качестве расширения для файла выбрано .ndf. Такое расширение рекомендуется для всех вторичных файлов, но может быть и другим. Напоминаю, что для основного файла рекомендуется указывать расширение .mdf.
Для удаления файла из базы данных совместно с ALTER DATABASE используется ключевое слово REMOVE FILE. Если вы создали файл и поместили в него таблицу, то файл уже нельзя удалить, пока он не станет пустым, то есть, пока из файла не будут удалены все таблицы.
Нам в данной книге лишний файл не нужен, поэтому давайте удалим то, что создали. Для этого нужно указать оператор REMOVE FILE и имя удаляемого файла:
ALTER DATABASE TestDatabase REMOVE FILE dbFile2
Ответы 11
Специально для SQL Server используйте sp_rename
Комментарии (2)
В PostgreSQL (и многих других СУБД) вы можете сделать это с помощью обычного оператора ALTER TABLE:
Комментарии (4)
ALTER TABLE — это стандартный SQL. Но это не полностью реализовано во многих системах баз данных.
Комментарии (2)
В Informix вы можете использовать:
Это было реализовано до того, как стандарт SQL решил проблему — если она решена в стандарте SQL. Моя копия стандарта SQL 9075: 2003 не показывает его как стандарт (среди прочего, RENAME не является одним из ключевых слов). Я не знаю, действительно ли это в SQL 9075: 2008.
Комментарии (2)
Стандарт будет ALTER TABLE, но он не обязательно поддерживается каждой СУБД, с которой вы, вероятно, столкнетесь, поэтому, если вы ищете всеобъемлющий синтаксис, вам может не повезти.
К сожалению, для решения, не зависящего от базы данных, вам нужно будет знать все о столбце. Если он используется в других таблицах в качестве внешнего ключа, их также необходимо изменить.
Для самых простых случаев (без ограничений, триггеров, индексов или ключей) потребуется 3 строки, указанные выше. Для чего-то более сложного это может стать очень беспорядочным, поскольку вы заполняете недостающие части.
Однако, как упоминалось выше, существуют более простые методы, специфичные для базы данных, если вы заранее знаете, какую базу данных нужно изменить.
Комментарии (2)
В качестве альтернативы SQL вы можете сделать это в Microsoft SQL Server Management Studio из панели дизайна таблицы.
Первый путь
Медленно дважды щелкните столбец. Имя столбца станет редактируемым текстовым полем.
Второй путь
Третий путь
Таблица >> RightClick >> Дизайн
В MySQL синтаксис ALTER TABLE … CHANGE:
Обратите внимание, что вы не можете просто переименовать и оставить тип и ограничения как есть; вы должны повторно ввести тип данных и ограничения после нового имени столбца. Комментарии (2)
Комментарии (2)
Я думаю, что это самый простой способ изменить имя столбца.
Комментарии (1)
На сервере sql вы можете использовать
Или же
Вы можете использовать следующую команду, чтобы переименовать столбец любой таблицы в SQL Server:
Другие вопросы по теме
Как программно скопировать базу данных MS SQL 2000 с помощью C#?Запрос, показывающий список ассоциаций в отношении «многие-ко-многим»Подсчет количества удаленных строк в хранимой процедуре SQL ServerПолучение схемы для таблицыКак расшифровать пароль от SQL-сервера?НЕ В И НЕ СУЩЕСТВУЕТКурсоры SQL … Какие варианты использования вы бы защищали?Какой дизайн БД использовать для сбора настраиваемых демографических данных?Индексирование URL-адресов в SQL Server 2005Как мне немного перевернуть SQL Server?
1.3.5. Изменение свойств базы данных
У базы данных существует множество свойств, которые мы не задавали во время создания, но которые можно изменить уже у существующей базы. К таким свойствам относятся уровень доступа, модель восстановления и т.д. Давайте рассмотрим, что и как можно изменять.
Для изменения свойства используется оператор SET. Команда будет выглядеть следующим образом:
ALTER DATABASE Имя_базы SET имя_свойства
После ALTER DATABASE указывается имя базы данных, свойства которой нужно изменить, а после оператора SET нужно указать имя свойства.
Давайте посмотрим имена свойств которые нужно подставить вместо параметра имя_свойства:
- SINGLE_USER – перевести базу данных в однопользовательский режим. Только один пользователь сможет работать с базой;
- RESTRICTED_USER – к базе данных разрешено подключаться только пользователям, которые принадлежат роли db_owner, dbcreator или sysadmin;
- MULTI_USER – нормальный многопользовательский режим, при котором действуют все права (используется по умолчанию);
- OFFLINE – отключить базу данных, подключения будут невозможны. Команды должна выполняться, когда к базе данных нет активных подключений. Вы при этом должны быть подключены к базе данных master.
- ONLINE – вернуть базу данных в активное состояние;
- READ_ONLY — перевести базу данных в режим только для чтения, изменение данных будет невозможно;
- READ_WRITE — вернуть базе данных полный доступ на запись и чтение;
- CURSOR_CLOSE_ON_COMMIT ON – по завершении транзакции (принятии или откате) все открытые курсоры будут закрываться. Если ON заменить на OFF, то при нормальном завершении транзакции (принятии изменений) курсоры остаются открытыми. При откате все курсоры кроме INSENSITIVE и STATIC закрываются;
- RECOVERY FULL – использовать полную модель восстановления;
- BULK_LOGGED — установить модель восстановления BULK_LOGGED;
- SIMPLE – установить простую модель восстановления.
Это основные параметры, которые можно изменить. Более подробно о моделях восстановления можно узнать из файла Doc/BackupRestore.pdf на компакт диске.
Теперь давайте посмотрим на примеры использования этих свойств:
Следующий пример разрешает доступ только одному пользователю:
ALTER DATABASE TestDatabase SET SINGLE_USER
Доступ только только пользователям ролей db_owner, dbcreator или sysadmin:
ALTER DATABASE TestDatabase SET RESTRICTED_USER
Возвращаем нормальный многопользовательский режим:
ALTER DATABASE TestDatabase SET MULTI_USER
Вывести базу данных в off-line, т.е. доступ будет запрещен всем пользователям:
ALTER DATABASE TestDatabase SET OFFLINE
Возобновить доступ к базе данных:
ALTER DATABASE TestDatabase SET ONLINE
Перевести базу данных в режим только для чтения, любые изменения будут отклонены:
ALTER DATABASE TestDatabase SET READ_ONLY
Вернуть базе данных полный доступ на запись и чтение:
ALTER DATABASE TestDatabase SET READ_WRITE
По завершении транзакции (принятии или откате) все открытые курсоры будут закрываться:
ALTER DATABASE TestDatabase SET CURSOR_CLOSE_ON_COMMIT ON
Установить полную модель восстановления:
ALTER DATABASE TestDatabase SET RECOVERY FULL
Установить модель восстановления BULK_LOGGED:
ALTER DATABASE TestDatabase SET BULK_LOGGED
Установить простую модель восстановления:
ALTER DATABASE TestDatabase SET SIMPLE
И последнее, что нам предстоит узнать – это возможность изменения раскладки (кодировки) по умолчанию для базы данных. Для этого выполняется команда:
ALTER DATABASE Имя_базы COLLATE имя_кодировки