Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РУБД - Теория по SQL .doc
Скачиваний:
4
Добавлен:
27.08.2019
Размер:
691.71 Кб
Скачать

Пример:

CREATE TABLE a (id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,...);

INSERT INTO a (id,...) VALUES (NULL...),

То автоматически генерируется уникальный id (то же, если поле id вообще не указывать в команде вставки).

CREATE TABLE animals (

id MEDIUMINT NOT NULL AUTO_INCREMENT,

name CHAR(30) NOT NULL,

PRIMARY KEY (id) );

INSERT INTO animals (name) VALUES ("dog"),("cat"),("penguin"), ("lax"),("whale");

Можно получить AUTO_INCREMENT ключ с помощью функции SQL LAST_INSERT_ID() или с помощью функции mysql_insert_id() интерфейса C.

MySQL поддерживает следующие строковые типы (М обозначает максимальный отображаемый размер или PRECISION).

CHAR(M) – строка фиксированной длины всегда дополняемая справа пробелами. М может находиться в диапазоне от 1 до 255 символов.

VARCHAR(M) – строка переменной длины. Замыкающие пробелы удаляются базой данных при записи значения.М может находиться в диапазоне от 1 до 255 символов.

ENUM(' value1' , 'value2',...)перечисление. Строковый объект, у которого может быть только одно значение, выбранное из заданного списка (или NULL). В перечислении может быть до 65 535 различных значений.

SET('value1' , ' value2' , ..) – множество. Строковый объект, у которого может быть несколько значений (или ни одного), каждое из которых должно выбираться из указанного списка. SET может иметь максимум 64 элемента.

BLOB представляет собой двоичный объект большого размера, который может содержать переменное количество данных. Существуют 4 модификации этого типа - TINYBLOB, BLOB, MEDIUMBLOB и LONGBLOB, отличающиеся только максимальной длиной хранимых величин.

TEXT также имеет 4 модификации - TINYTEXT, TEXT, MEDIUMTEXT и LONGTEXT, соответствующие упомянутым четырем типам BLOB и имеющие те же максимальную длину и требования к объему памяти. Единственное различие между типами BLOB и TEXT состоит в том, что сортировка и сравнение данных выполняются с учетом регистра для величин BLOB и без учета регистра для величин TEXT. Другими словами, TEXT - это независимый от регистра BLOB.

При сравнениях и сортировке регистр символов в колонках CHAR и VARCHAR не учитывается, если только не задать атрибут BINARY, например:

CREATE TABLE foo (A VARCHAR(10)BINARY);

Обычно, следует выполнять select для set-столбца, используя оператор like или функцию find_in_set():

SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

Но и такая форма также работает:

SELECT * FROM tbl_name WHERE set_col = 'val1,val2';

SELECT * FROM tbl_name WHERE set_col & 1;

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

Если нужно получить все возможные значения для столбца SET, следует вызвать SHOW COLUMNS FROM table_name LIKE set_column_name и проанализировать SET-определение во втором столбце.

Типы данных даты и времени

Существуют следующие типы данных даты и времени: 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'