Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Оператор ALTER TABLE




Обеспечивает возможность изменять структуру существующей таблицы.

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

Синтаксис: ALTER [IGNORE] TABLE имя_таблицы alter_specification [, alter_specification...].

Можно производить следующие изменения в таблице (все они записываются в alter_specification):

добавление поля:

ADD [COLUMN] определение_столбца [FIRST | AFTER имя_столбца ]

или

ADD [COLUMN] (определение_столбца, определение_столбца,...)

Здесь, как и далее, определение_столбца записывается так же, как при создании таблицы.

¾ добавление индексов:

ADD INDEX [имя_индекса] (имя_индексируемого_столбца,...) или ADD PRIMARY KEY (имя_индексируемого_столбца,...) или ADD UNIQUE [имя_индекса] (имя_индексируемого_столбца,...) или ADD FULLTEXT [имя_индекса] (имя_индексируемого_столбца,...);

¾ изменение поля:

ALTER [COLUMN] имя_столбца {SET DEFAULT literal | DROP DEFAULT} или CHANGE [COLUMN] старое_имя_столбца определение_столбца или MODIFY [COLUMN] определение_столбца;

¾ удаление поля, индекса, ключа:

DROP [COLUMN] имя_столбца DROP PRIMARY KEY DROP INDEX имя_индекса;

¾ переименование таблицы:

RENAME [TO] новое_имя_таблицы;

¾ переупорядочение полей таблицы:

ORDER BY поле или опции_таблицы.

Если оператор ALTER TABLE используется для изменения определения типа столбца, но DESCRIBE имя_таблицы показывает, что столбец не изменился, то, возможно, MySQL игнорирует данную модификацию по одной из причин, описанных в специальном разделе документации.

Например, при попытке изменить столбец VARCHAR на CHAR MySQL будет продолжать использовать VARCHAR, если данная таблица содержит другие столбцы с переменной длиной.

Оператор ALTER TABLE во время работы создает временную копию исходной таблицы. Требуемое изменение выполняется на копии, затем исходная таблица удаляется, а новая переименовывается. Это делается для того, чтобы в новую таблицу автоматически попадали все обновления, кроме неудавшихся. Во время выполнения ALTER TABLE исходная таблица доступна для чтения другими клиентами. Операции обновления и записи в этой таблице приостанавливаются, пока не будет готова новая таблица.

Следует отметить, что при использовании любой другой опции для ALTER TABLE, кроме RENAME, MySQL всегда будет создавать временную таблицу, даже если данные, строго говоря, и не нуждаются в копировании (например, при изменении имени столбца).

Пример 1.3

Добавим в созданную таблицу Persons поле для записи года рождения человека: mysql> ALTER TABLE Persons ADD bday INTEGER AFTER last_name.

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

Оператор SELECT

Применяется для извлечения строк, выбранных из одной или нескольких таблиц. То есть, с его помощью мы задаем столбцы или выражения, которые надо извлечь (select_выражения), таблицы (table_references), из которых должна производиться выборка, и, возможно, условие (where_definition), которому должны соответствовать данные в этих столбцах, и порядок, в котором эти данные нужно выдать.

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

Например, чтобы вычислить, чему равно 2*2, нужно просто написать: mysql> SELECT 2*2.

Упрощенно структуру оператора SELECT можно представить следующим образом: SELECT select_выражение1, select_выражение2,... [FROM table_references [WHERE where_definition] [ORDER BY {число | имя_столбца | формула} [ASC | DESC],...]].

Квадратные скобки [ ] означают, что использование находящегося в них оператора необязательно, вертикальная черта | означает перечисление возможных вариантов. После ключевого слова ORDER BY указывают имя столбца, число (целое беззнаковое) или формулу и способ упорядочения (по возрастанию – ASC, или по убыванию – DESC). По умолчанию используется упорядочение по возрастанию.

Когда в select_выражении мы пишем «*», это значит выбрать все столбцы. Кроме «*» в select_выражения могут использоваться функции типа max, min и avg.

Пример 1.4

Выбрать из таблицы Persons все данные, для которых поле first_name имеет значение 'Александр':

mysql> SELECT * FROM Persons WHERE first_name='Александр';

Пример 1.5

Использование оператора SELECT. Выбрать название и описание (title, description) артефакта под номером 10: mysql> SELECT title,description FROM Artifacts WHERE id=10.

Оператор INSERT

Вставляет новые строки в существующую таблицу.

Оператор имеет несколько форм. Параметр имя_таблицы во всех этих формах задает таблицу, в которую должны быть внесены строки. Столбцы, для которых задаются значения, указываются в списке имен столбцов (имя_столбца) или в части SET.

Синтаксис:

1. INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы [(имя_столбца,...)] VALUES (выражение,...),(...),...

Эта форма команды INSERT вставляет строки в соответствии с точно указанными в команде значениями. В скобках после имени таблицы перечисляются столбцы, а после ключевого слова VALUES – их значения.

Например: mysql> INSERT INTO Persons (last_name, bday) VALUES ('Иванов', '1934') вставит в таблицу Persons строку, в которой значения фамилии (last_name) и даты рождения (bday) будут заданы соответственно как «Иванов» и «1934».

2. INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы [(имя_столбца,...)] SELECT...

Эта форма команды INSERT вставляет строки, выбранные из другой таблицы или таблиц.

Например: mysql> INSERT INTO Artifacts (author) SELECT id FROM Persons WHERE last_name='Иванов' AND bday='1934'; вставит в таблицу Artifacts в поле «автор» (author) значение идентификатора, выбранного из таблицы Persons по условию, что фамилия человека Иванов и год рождения 1934.

3. INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] имя_таблицы SET имя_столбца=выражение, имя_столбца=выражение,...

Например: mysql> INSERT INTO Persons SET last_name='Петров', first_name='Иван'; Эта команда вставит в таблицу Persons в поле last_name значение «Петров», а в поле first_name – строку «Иван».

Форма INSERT... VALUES со списком из нескольких значений поддерживается в версии MySQL 3.22.5 и более поздних. Синтаксис выражения имя_столбца=выражение поддерживается в версии MySQL 3.22.10 и более поздних.

Действуют следующие соглашения:

1. Если не указан список столбцов для INSERT... VALUES или INSERT... SELECT, то величины для всех столбцов должны быть определены в списке VALUES() или в результате работы SELECT.

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

3. Любой столбец, для которого явно не указано значение, будет установлен в свое значение по умолчанию.

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

Выражение expression может относиться к любому столбцу, который ранее был внесен в список значений.

Например, можно указать следующее: mysql> INSERT INTO имя_таблицы (col1,col2) VALUES(15,col1*2).

Но нельзя указать: mysql> INSERT INTO имя_таблицы (col1,col2) VALUES(col2*2,15).

Мы еще не обсудили три необязательных параметра, присутствующих во всех трех формах команды: LOW_PRIORITY, DELAYED и IGNORE.

Параметры LOW_PRIORITY и DELAYED используются, когда с таблицей работает большое число пользователей. Они предписывают устанавливать приоритет данной операции перед операциями других пользователей. Если указывается ключевое слово LOW_PRIORITY, то выполнение данной команды INSERT будет задержано до тех пор, пока другие клиенты не завершат чтение этой таблицы. В этом случае клиент должен ожидать, пока данная команда вставки не будет завершена, что в случае интенсивного использования таблицы может потребовать значительного времени. В противоположность этому команда INSERT DELAYED позволяет данному клиенту продолжать операцию сразу же, независимо от других пользователей.

Если в команде INSERT указывается ключевое слово IGNORE, то все строки, имеющие дублирующиеся ключи PRIMARY или UNIQUE в этой таблице, будут проигнорированы и не внесены в таблицу. Если не указывать IGNORE, то данная операция вставки прекращается при обнаружении строки, имеющей дублирующееся значение существующего ключа.

Оператор UPDATE

Синтаксис: UPDATE [LOW_PRIORITY] [IGNORE] имя_таблицы SET имя_столбца1=выражение1 [, имя_столбца2=выражение2,...] [WHERE where_definition] [LIMIT число].

Оператор UPDATE обновляет значения существующих столбцов таблицы в соответствии с введенными значениями.

В выражении SET указывается, какие именно столбцы следует модифицировать и какие величины должны быть в них установлены.

В выражении WHERE, если оно присутствует, задается, какие строки подлежат обновлению. В остальных случаях обновляются все строки.

Если задано выражение ORDER BY, то строки будут обновляться в указанном в нем порядке.

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

Если указывается ключевое слово IGNORE, то команда обновления не будет прервана, даже если возникнет ошибка дублирования ключей. Строки, из-за которых возникают конфликтные ситуации, обновлены не будут.

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

Например, следующая команда устанавливает столбец death_date в значение, на единицу большее его текущей величины: mysql> UPDATE Persons SET death_date=death_date+1.

В версии MySQL 3.23 можно использовать параметр LIMIT #, чтобы убедиться, что было изменено только заданное количество строк.

Например, такая операция заменит в первой строке нашей таблицы экспонатов название title на строку «Ламповая ЭВМ»: mysql> UPDATE Artifacts SET title='Ламповая ЭВМ' Limit 1.

Оператор DELETE

Удаляет из таблицы имя_таблицы строки, удовлетворяющие заданным в where_definition условиям, и возвращает число удаленных записей.

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

Синтаксис: DELETE [LOW_PRIORITY] FROM имя_таблицы [WHERE where_definition] [LIMIT rows].

Например, следующая команда удалит из таблицы Persons все записи, у которых поле «год рождения» (bday) больше 2003: mysql> DELETE FROM Persons WHERE bday>2003.

Удалить все записи в таблице можно еще и с помощью такой команды: mysql> DELETE FROM Persons WHERE 1>0;

Но этот метод работает гораздо медленнее, чем использование той же команды без условия: mysql> DELETE FROM Persons;

Специфическая для MySQL опция LIMIT для команды DELETE указывает серверу максимальное количество строк, которые следует удалить до возврата управления клиенту. Эта опция может использоваться для гарантии того, что данная команда DELETE не потребует слишком много времени для выполнения.


Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...