Существуют следующие типы данных даты и времени: DATETIME, DATE, TIMESTAMP, TIME и YEAR. Каждый из них имеет интервал допустимых значений, а также значение ``ноль'', которое используется, когда пользователь вводит действительно недопустимое значение. MySQL позволяет хранить некоторые не вполне достоверные значения даты, например 1999-11-31. В следующей таблице представлены форматы значения ``ноль'' для каждого из типов столбцов:
DATE Дата. Поддерживается интервал от '1000-01-01' до '9999-12-31'. MySQL выводит значения DATE в формате 'YYYY-MM-DD', но можно установить значения в столбец DATE, используя как строки, так и числа. Позволяет присваивать значения колонкам DATE в таких форматах: YYMMDD YYYYMMDD YY..MM.DD YYYY.MM.DD
Здесь «.» может быть любым нецифровым разделителем, а при задании года двумя цифрами предполагается год 20YY, если YY меньше 70.
DATETIME Комбинация даты и времени. Поддерживается интервал от '1000-01-01 00:00:00' до '9999-12-31 23:59:59'. MySQL выводит значения DATETIME в формате 'YYYY-MM-DD HH:MM:SS', но можно устанавливать значения в столбце DATETIME, используя как строки, так и числа. DATETIME
TIMESTAMP[(M)] Временная метка. Интервал от '1970-01-01 00:00:00' до некоторого значения времени в 2037 году. MySQL выводит значения TIMESTAMP в форматах YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD или YYMMDD в зависимости от значений M:
Тип столбца
Формат вывода
TIMESTAMP(14)
YYYYMMDDHHMMSS
TIMESTAMP(12)
YYMMDDHHMMSS
TIMESTAMP(10)
YYMMDDHHMM
TIMESTAMP(8)
YYYYMMDD
TIMESTAMP(6)
YYMMDD
Колонки типа TIMESTAMP удобно использовать для регистрации времени операций INSERT или UPDATE, поскольку если для них не указывается значение, им присваивается время последней операции. Текущее время устанавливается и при попытке присвоить значение NULL.
TIMEВремя. Интервал от '-838:59:59' до '838:59:59'. MySQL выводит значения TIME в формате 'HH:MM:SS'.
YEAR[(2|4)]Год в двухзначном или четырехзначном форматах (по умолчанию формат четырехзначный). Допустимы следующие значения: с 1901 по 2155, 0000 для четырехзначного формата года и 1970-2069 при использовании двухзначного формата (70-69), выводит величины YEAR в формате YYYY. Диапазон возможных значений - от 1901 до 2155.
Величины DATETIME, DATE и TIMESTAMP могут быть заданы любым стандартным набором форматов: Как строка в формате 'YYYY-MM-DD HH:MM:SS', 'YY-MM-DD HH:MM:SS'. Например, '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45'
'YYYY-MM-DD',YY-MM-DD' Например '98-12-31', "98.12.31', '98/12/31'
Как результат выполнения функции, возвращающей величину, приемлемую в контекстах типов данных DATETIME, DATE или TIMESTAMP (например, функции NOW() или CURRENT_DATE().
Модификация таблиц
ALTER [IGNORE] TABLE table ADD [COLUMN] create_clause
ALTER [IGNORE] TABLE table ADD INDEX [name] (column, . . .)
ALTER [IGNORE] TABLE table ALTER [COLUMN] column SET DEFAULT value
ALTER [IGNORE] TABLE table ALTER [COLUMN] column DROP DEFAULT
ALTER [IGNORE] TABLE table CHANGE [COLUMN] column create..clause
ALTER [IGNORE] TABLE table DROP [COLUMN] column
ALTER [IGNORE] TABLE table DROP FOREIGN KEY key
ALTER [IGNORE] TABLE table DROP INDEX key
ALTER [IGNORE] TABLE table DROP PRIMARY KEY
ALTER [IGNORE] TABLE table MODIFY [COLUMN] create_clause
ALTER [IGNORE] TABLE table RENAME [AS] new_name
Оператор ALTER охватывает широкий набор действий, которые изменяют структуру таблицы. Этот оператор используется для добавления, изменения или удаления столбцов существующей таблицы, а также для удаления индексов. Несколько операторов ALTER могут быть объединены в одно предложение с помощью запятых:
ALTER TABLE mytable DROP myoldcolumn, ADD mynewcolumn INT
Для модификации таблицы MySQL создает копию таблицы и изменяет ее, выполняя все модифицирующие запросы. Когда все изменения сделаны, старая таблица удаляется, а ее место занимает новая таблица. В этой точке выполняются все поставленные в очередь запросы. В целях безопасности, если какой-либо из запросов создает дублирующие ключи, которые должны быть уникальными, предложение ALTER откатывается и отменяется. Если в предложении присутствует ключевое слово IGNORE, дублированные уникальные ключи игнорируются, и запрос ALTER исполняется как обычно.
ADD [COLUMN] create,clauseДобавляет новый столбец в таблицу. Выражение create_clause имеет тот же вид, что и используемое в операторе CREATE. Таблица должна существовать и не иметь столбца с тем же именем, что у добавляемого столбца.
ADD INDEX [ name ] ( column , ...)Создает индекс из указанных столбцов. В индексе могут быть скомбинированы до 15 столбцов. Указывать имя для индекса необязательно. Если не задано имя, индекс будет назван по имени первого столбца в списке (с числовым суффиксом _2, _3 и т. д., если это необходимо для уникальности).
ADD UNIQUE [name] (column, ...)Идентично ADD INDEX за исключением того, что индексированные поля гарантированно уникальны. То есть, если пользователь попытается добавить значение, уже существующее в уникальном индексе, будет выдано сообщение об ошибке.
ALTER [COLUMN] column SET DEFAULT value
ALTER [COLUMN] column DROP DEFAULT
Создает, изменяет или удаляет значение по умолчанию для столбца. Если используется фраза SET DEFAULT , значение по умолчанию для указанного столбца изменяется на новое (даже если до этого не существовало значений по умолчанию). При использовании DROP DEFAULT, существующее значение по умолчанию удаляется. При этом любые существующие записи, созданные с помощью этого значения, остаются неизмененными. (Ключевое слово COLUMN необязательно и не имеет эффекта.)
CHANGE [COLUMN] new_column_name create_clause
MODIFY [COLUMN] create__clause
Изменяет определение столбца. Предложение используется для изменения типа данных столбца с минимально возможным воздействием на данные. Выражение create_clause то же, что и в операторе CREATE. Оно включает имя столбца и поэтому, используя это предложение, вы изменяете имя столбца. (Например, ALTER TABLE mytable CHANGE name newname CHAR(30)). Предложение MODIFY аналогично CHANGE, но новый столбец имеет то же имя, что и старый.
DROP [COLUMN] column Удаляет столбец из таблицы. Это предложение удалит из таблицы столбец и все его содержимое. Единственный способ восстановить данные, уничтоженные таким способом, - использовать резервную копию. Все ссылки в индексах на этот столбец будут удалены. Все индексы, где этот столбец был единственным, будут также уничтожены.
DROP INDEX key Удаляет индекс из таблицы. Это предложение полностью сотрет индекс из таблицы. Предложение не затронет данные самой таблицы, только данные индекса. Поэтому индекс, удаленный таким способом, может быть воссоздан с помощью оператора ALTER TABLE ... ADD INDEX.
DROP PRIMARY KEY Аналог DROP INDEX . Ищет специальный индекс, называемый первичным ключом (Primary Key). Если в таблице первичный ключ не найден, будет удален первый уникальный индекс.
RENAME [AS] new_tableИзменяет имя таблицы. Эта операция не влияет на данные или индексы внутри таблицы. Если предложение применяется одно, без других ALTER TABLE операторов, MySQL не создает временную таблицу, как в случае других операторов, а просто выполняет быстрое переименование табличных файлов на уровне Unix.
Чтобы применить любое из действий ALTER TABLE , у вас должны быть права SELECT, INSERT, DELETE, UPDATE, CREATE и DROP на изменяемую таблицу.
Примеры
# Добавить поле 'address2' к таблице 'people' и. задать ему тип данных 'VARCHAR' с максимальной длиной 200 символов.