|
данных с транзакциями можно создать таблицу, скажем, с именем sequence ,
содержащую число, представляющее очередной id. Когда необходимо добавить новую
строку в таблицу, вы читаете число из этой таблицы и вставляете число на
единицу большее. Чтобы эта схема работала, нужно быть уверенным, что никто
другой не сможет произвести чтение из таблицы, пока вы не ввели новое число. В
противном случае два клиента могут прочесть одно и то же значение и попытаться
использовать его в качестве значения первичного ключа в одной и той же таблице.
Ни MySQL, ни mSQL не поддерживают транзакции, поэтому описанный механизм нельзя
использовать для генерации уникальных чисел. Использовать для этих целей
команду MySQL LOCK TABLE обременительно. Тем не менее обе СУБД предоставляют
свои варианты понятия последовательности, позволяющие генерировать уникальные
идентификаторы, не беспокоясь о транзакциях.
Последовательности в MySQL
При создании таблицы в MySQL можно одну из колонок специфицировать как
AUTO_INCREMENT . В этом случае, при добавлении новой строки, имеющей значение
NULL или 0 в данной колонке, автоматически будет происходить замена на значение
на единицу больше, чем наибольшее текущее значение в колонке. Колонка с
модификатором AUTO_INCREMENT должна быть индексирована. Ниже приведен пример
использования поля типа AUTOJNCREMENT :
CREATE TABLE cities (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
pop MEDIUMINT,
founded DATE)
Когда вы первый раз добавляете строку, поле id получает значение 1, если в
команде INSERT для него используется значение NULL или 0. Например, следующая
команда использует возможность AUTO_INCREMENT:
INSERT INTO cities (id, name, pop)
VALUES (NULL, 'Houston', 3000000)
Если вы выполните эту команду, когда в таблице нет строк, поле id получит
значение 1, а не NULL. В случае, когда в таблице уже есть строки, полю будет
присвоено значение на 1 большее, чем наибольшее значение id в данный момент.
Другим способом реализации последовательностей является использование значения,
возвращаемого функцией LAST_INSERT_ID :
UPDATE table SET id=LAST_INSERT_ID (id+1);
Последовательности в mSQL
Каждая таблица в mSQL может иметь одну связанную с ней последовательность.
Синтаксис создания последовательности следующий:
CREATE SEQUENCE ON table_name [VALUE start STEP incr]
Начальное значение задается числом start, а шаг увеличения при каждом
последующем обращении - числом incr. По умолчанию, последовательность
начинается с 1 и каждый раз возрастает на 1. Например:
CREATE SEQUENCE ON mytable VALUE 100 STEP 5
Создается последовательность в таблице mytable, начальным значением которой
будет 100, а при каждом обращении оно будет увеличиваться на 5. Вторым
значением, следовательно, будет 105.
Для доступа к последовательности нужно выбрать из таблицы специальную колонку с
именем _seq:
SELECT _seq FROM table_name
В результате вы получите очередное значение последовательности и
инкрементируете его.
Управление данными
Первое, что вы делаете, создав таблицу, это начинаете добавлять в нее данные.
Если данные уже есть, может возникнуть необходимость изменить или удалить их.
Добавление данных
Добавление данных в таблицу является одной из наиболее простых операций SQL.
Несколько примеров этого вы уже видели. Как MySQL, так и mSQL поддерживают
стандартный синтаксис INSERT:
INSERT INTO table_name (columnl, column2, ..., columnN)
VALUES (value!, value2, .... valueN)
Данные для числовых полей вводятся как они есть. Для всех других полей вводимые
данные заключаются в одиночные кавычки. Например, для ввода данных в таблицу
адресов можно выполнить следующую команду:
INSERT INTO addresses (name, address, city, state, phone, age)
VALUES( 'Irving Forbush', ' 123 Mockingbird Lane', 'Corbin', 'KY', '(800)
555-1234', 26)
Кроме того, управляющий символ - по умолчанию '\' — позволяет вводить в
литералы одиночные кавычки и сам символ '\':
# Ввести данные в каталог Stacie's Directory, который находится
# в c:\Personal\Stacie
INSERT INTO files (description, location)
VALUES ('Stacie\'s Directory', 'C: \\Personal\\Stacie')
MySQL позволяет опустить названия колонок, если значения задаются для всех
колонок и в том порядке, в котором они были указаны при создании таблицы
командой CREATE. Однако если вы хотите использовать значения по умолчанию,
нужно задать имена тех колонок, в которые вы вводите значения, отличные от
установленных по умолчанию. Если для колонки не установлено значение по
умолчанию и она определена как NOT NULL , необходимо включить эту колонку в
команду INSERT со значением, отличным от NULL. В mSQL значение по умолчанию
всегда NULL. MySQL позволяет указать значение по умолчанию при создании таблицы
в команде CREATE.
|
|