|
Программирование >> Программный интерфейс приложений
давать оператор drop table для того, чтобы эта таблица прекратила свое существование после заверщения сеанса работы. CREATE TABLE hold tbl (columnl column2.......) TYPE=HEAP SELECT ... FROM tablel WHERE ... INSERT INTO hold tbl SELECT FROM tablel WHERE ... INSERT INTO hold tbl SELECT FROM table2 WHERE ... INSERT INTO hold tbl SELECT FROM table2 WHERE ... SELECT FROM hold tbl ORDER BY DROP TABLE hold tbl Добавление столбца с непрерывной последовательностью значений Для того чтобы столбец автоматически заполнялся последовательными номерами, необходимо, используя оператор alter table, добавить столбец типа auto increment. Вот последовательность операторов, демонстрирующих последовательность операций создания таблицы, заполнения ее данными, а затем добавления столбца аото increment: mysql> CREATE TABLE t (с CHAR(IO)); mysql> INSERT INTO t VALUES( a ), ( b ), mysql> SELECT * FROM t; ( c ) ; a b с mysql> ALTER TABLE t ADD i INT AUTO INCjREMENr NOT NULL PRIMARX КЕУ; mysql> SELECT * FROM t; Упорядочение или переупорядочение существующих столбцов Всякий цифровой столбец можно упорядочить (или переупорядочить, если он был упорядочен и некоторые строки были удалены); ALTER TABLE t MODIFY i INT NULL 4 UPDATE t SET 1 = NULL ALTER TABLE t MODIFY i INT UNSIGNED AUTO INCREMENT NOT NULL PRIMARY KEY Однако самым простым решением является удаление столбца и повторное добавление его с параметром auto increment. Оператор alter table позволяет производить множественные операции. Таким образом, вся цепочка действий может быть выполнена с помощью одного оператора: ALTER TABLE t DROP i ADD i INT UNSIGNED AUTO INCREMENT NOT NULL PRIMARY KEY Сортировка в произвольном порядке Предположим, у нас есть таблица, хранящая данные о членах спортивной организации, например футбольного клуба. Их необходимо отсортировать в следующем порядке: тренер, помощники тренера, форварды, полузащитники, защитники и вратари. Создадим столбец, который будет хранить эти элементы в списке типа enum, и зададим перечень в нужном нам порядке. Операции сортировки автоматически будут сортировать записи в заданном порядке. Таблица со счетчиком в разделе Обработка последовательностей в главе 2, Работа с данными в MySQL был показан прием генерирования последовательности чисел с помощью функции last INSERT (ехрг). Этот пример демонстрировал создание и использование счетчика с помощью таблицы, имеющей в своем составе одну строку. Этот метод работает хорошо, пока не потребуется создать такие счетчики для нескольких таблиц. Что делать в этом случае? Отводить под каждый счетчик отдельную таблицу? Это приведет к ненужному увеличению количества служебных таблиц. Предположим, что вы хотите создать для своего Web-узла счетчики вроде к этой странице было сделано ппп обращений . Вероятно, нет смысла создавать отдельную таблицу под каждый такой счетчик. Один из способов избежать создания большого количества таблиц - создать одну таблицу с двумя столбцами. Один столбец предназначен для хранения текущего значения счетчика, а второй - для хранения имени счетчика. При этом по-прежнему будет использоваться функция last insert id {), но с помощью имени счетчика можно определить, о каком счетчике идет речь. Вот структура такой таблицы: CREATE TABLE counter { count INT UNSIGNED, name varchar(255) NOT NULL PRIMARY KEY Столбец name является столбцом строкового типа. Это позволит присвоить столбцу любое имя. Кроме того, он может быть проиндексирован как primary key, что, в свою очередь, позволит избежать дублирования имен счетчиков. Необходимо только, чтобы приложение, работающее с таблицей счетчиков, работало с учетом соглашения о наименовании таблиц. Для счетчиков Web-узла уникальность имен обеспечивается, если использовать в качестве имени путь к странице по дереву документов. Например, чтобы установить новый счетчик для домашней страницы узла, вставим значение: INSERT INTO counter (NAME) values ( index. litml ) Этот оператор присвоит счетчику с именем index.html значение 0. Для получения следующего значения счетчика сделайте приращение в соответствующей строке таблицы и выберите его с помощью функции last insert id () (это ОДИН способ приращения счетчика). UPDATE counter , SET count = LAST INSERT ID(count+l) WHERE name = index.litml SELECT LAST INSERT ID{) Есть и другой способ приращения счетчика, исключающи>. использование функции last insert id (): UPDATE counter SET count = count+1 WHERE name = index.litml SELECT count FROM counter WHERE name = index.litml Ho этот вариант не сработает, если сразу же после запроса update, но до запроса select другой клиент даст приращение этому же счетчику. Эту проблему можно решить, заблокировав (lock tables), а затем разблокировав таблицу (unlock tables). Очевидно, что первый метод надежнее. Функция last insert id () более привязана к клиенту и при ее использовании нет необходимости излишне усложнять процедуру операциями блокировки и разблокировки таблиц. Проверка таблицы на существование Существенно облегчит работу с базой данных возможность проверки наличия указанной таблицы. Для этого необходимо выполнить один из следующих операторов: SELECT COUNT (*) FROM tbl name SELECT * FROM tbl name WHERE 1=0 Если таблица tbl name существует, оба оператора успешно будут вьтол-нены, в противном случае - произойдет ошибка. Запросы такого рода лучше всего использовать для установки факта наличия таблиц. Они вьтолняются очень быстро. Следовательно, для их выполнения много времени не потребуется. Эта стратегия лучше всего подходит для анализа наличия таблиц в приложениях. По результату работы оператора можно судить о наличии таблицы и предпринимать соответствующие действия. Это не имеет особого смысла для пакетньгк сценариев, запускаемых из mysql, потому что в случае ошибки вариантов мало - прервать вьшолнение сценария или проигнорировать ошибку (но в этом случае вообще нет смьюла запускать этот запрос).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |