Программирование >>  Программный интерфейс приложений 

1 ... 35 36 37 [ 38 ] 39 40 41 ... 264


CREATE TABLE ai (i INT AUTO INCREMENT NOT NULL PRIMARY KEY) CREATE TABLE ai (i INT AUTO INCREMENT NOT NULL PRIMARY KEY(i)) CREATE TABLE ai (i INT AUTO INCREMENT NOT NULL UNIQUE(i))

Поведение параметра auto increment будет обсуждаться детально в разделе Обработка последовательностей , дальше в этой главе.

UNSIGNED. Этот параметр запрещает присвоение отрицательных значений. Присвоение этого типа столбцу не изменяет диапазон типа данных, он только увеличивает его. Рассмотрим следующую спецификацию:

CREATE TABLE my table (

itmy TINYINT,

itiny u TINYINT UNSIGNED

Здесь itiny и itiny u являются столбцами типа tinyint с диапазоном в 256 принимаемых значений, но если область значений столбца itiny лежит между -128 и 127, то область значений столбца itiny u лежит между О и 256.

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

Кроме этих параметров, можно задать уже известные параметры not null и null. По умолчанию столбцы объявляются с атрибутом null. Кроме того, можно указать значения, принимаемые столбцом по умолчанию. Для этого служит параметр default. Без указания значения по умолчанию, для цифровых данных по умолчанию присваивается значение noll, для тех столбцов, для которых это допустимо, а для остальных - 0.

Вот пример, в котором создается таблица с тремя столбцами типа int со значениями по умолчанию -I, I и null:

CREATE TABLE t (

11 INT DEFAULT -1,

12 INT DEFAULT 1,

13 INT DEFAULT NULL,

Обработка последовательностей

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



в СУБД MySQL механизм такой нумерации осуществляется с помощью параметра AUTOINCREMENT. Он позволяет генерировать последовательные номера автоматически.

К сожалению, роль ключа AUT0 INCREMENT понимается плохо и это усугубляется изменениями, внесенными в функциональность параметра AUT0 INCREMENT В версии 3.23. В этом разделе описьгвается поведение параметра AUT0 INCREMENT. Надеюсь, это позволит избежать неожиданных оишбок. Кроме того, будет показано, как функциональность параметра AUTO INCREMENT МОЖНО эмулировать без параметра AUTO INCREMENT.

Параметр AUTOJNCREMENT для версии СУБД MySQL ниже 3.23

Для СУБД MySQL ниже версии 3.23 столбцы с параметром AUT0 INCREMENT ведут себя следующим образом.

Добавление пустого значения в столбец AUT0 INCREMENT приведет к добавлению в данном столбце следующего по счету номера в новой строке. Эта последовательность чисел начинается с L где первая запись имеет значение, равное L следующая - 2, затем 3 и т.д. В общем, каждое новое значение будет на единицу больще, чем максимальное значение, уже хранящееся в этом столбце.

Процедура добавления нулевого значения в столбец AUT0 INCREMENT аналогична добавлению пустого значения. Добавление строки без определенного значения в столбце AUTO INCREMENT также аналогично добавлению пустого значения.

При добавлении новой записи с явно указанным значением в столбце с атрибутом AUTO INCREMENT произойдет одно из двух. Если запись с таким значением уже в таблице существует, возникает ошибочная ситуация, так как значения в столбце AUT0 INCREMENT должны быть уникальны. Если строка с таким значением отсутствует, новое значение станет новым максимумом последовательности. Таким образом дается приращение счетчику уникальных записей.

Такое ускорение счетчика приведет к возникновению пропусков в последовательности. Из этой ситуации также можно извлечь преимущество. Предположим, что была создана таблица со столбцом AUTO INCREMENT, НО нумерация должна начинаться с 1000. Для этого создадим первую запись со значением 1000, заданным явно, или первую пустую запись со значением в этом столбце 999. Во втором случае первая реальная запись получит значение 1000. После этого пустую запись можно удалить.

При вводе ошибочного значения в столбец AUTO INCREMENT не ждите ничего хорошего. Результат будет непредсказуем.

После удаления записи, содержащей максимальное значение в столбце AUTO INCREMENT, ЭТО значение будет использовано повторно для генерирования нового значения. При удалении всех записей из таблицы нумерация опять будет начата с 1.



Оператор replace работает как обычно.

Правила работы оператора update аналогичны правилам добавления новых записей. При модификации столбца AUTO lNCREMENT пустым значением или значением О, его значение получает приращение плюс единица по отнощению к максимальному значению. При попытке изменения значения такого столбца на уже существующее значение, возникает ощибка (если при этом не присваивается значение, которое уже имеет этот столбец в этой записи). Присвоение значения, больше максимального значения, к ошибочной ситуации не приводит.

Наибольшее максимальное автоматически сгенерированное значение можно просмотреть с помощью функции last insert id( ). Она позволит обратиться к значению AUT0 INCREMENT, не зная, каково оно в реальности. Значение, возвращаемое функцией last insert id( ), привязано к значению auto increment, полученному во время последнего сеанса, и не связано с другими сеансами, работавшими со столбцами auto increment. Функция last insert id( ) возвращает О, если во время текущей сессии не было сгенерировано ни одного значения aUTO INCREMENT.

Очень удобно генерировать последовательность чисел автоматически. Однако такой метод имеет два недостатка. Во-первых, затруднительно создание монолитной (строго возрастающей) последовательности значений, в ситуации, когда постоянно удаляются и добавляются новые записи. Во-вторых, искусственные методы создания первого номера последовательности, превышающего 1, имеют определенные недостатки.

Параметр AUTOJNCREMENT для версии СУБД MySQL начиная с 3.23

В версии 3.23 в характеристики столбцов, объявленных с параметром AUTO iNCREMENT, были Внесены следующие изменения.

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

Существует возможность явного задания начального значения последовательности в момент создания таблицы. Вот пример создания столбца auto increment, начальное значение последовательности которой равно 1000000:

CREATE TABLE my table

(seq INT UNSIGNED AUTO INCREMENT NOT NULL PRIMARY KEY) AUT0 INCREMENT = 1000000

Это не создает неопределенности, даже принимая во внимание тот факт, что таблица может содержать множество столбцов, так как в ней может быть только один столбец AUTO INCREMENT.



1 ... 35 36 37 [ 38 ] 39 40 41 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика