Главная » Просмотр файлов » alan_beaulieu-learning_sql-ru

alan_beaulieu-learning_sql-ru (865932), страница 42

Файл №865932 alan_beaulieu-learning_sql-ru (Учебник по SQL) 42 страницаalan_beaulieu-learning_sql-ru (865932) страница 422022-01-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 42)

А сервер MySQL спроектирован так, чтодля обеспечения низкоуровневой функциональности БД, включая блокировку ресурсов и управление транзакциями, могут использоваться несколько механизмов хранения. MySQL версии4.1 поддерживает следующие механизмы хранения:MyISAMНетранзакционный механизм, использующий блокировкитаблицы.MEMORYНетранзакционный механизм, применяемый для таблиц в оперативной памяти.BDBТранзакционный механизм, использующий блокировку науровне страницы.InnoDBТранзакционный механизм, использующий блокировку науровне строки.MergeСпециальный механизм, предназначенный для создания нескольких идентичных таблиц MyISAM, создающих при этомвпечатление одной таблицы (также называется сегментированием таблиц).NDBСпециальный механизм, предназначенный для распределения одной БД по нескольким компьютерам (также называется кластеризацией).ArchiveСпециальный механизм, предназначенный для хранениябольших объемов неиндексированных данных, преимущественно для архивных целей.238Глава 12.

ТранзакцииНе надо думать, что MySQL вынуждает выбирать для БД единственный механизм хранения. Этот сервер достаточно гибоки обеспечивает возможность применять для каждой таблицысобственный механизм хранения. Однако для всех таблиц, которые могут принимать участие в транзакциях, следовало бы использовать механизм хранения InnoDB, применяющий блокировку на уровне строки и контроль версий, обеспечивая тем самым наиболее высокий уровень согласованности из всех механизмов хранения.Механизм хранения можно задавать явно при создании таблицыили изменять его для уже существующей таблицы.

Если механизм хранения таблицы не известен, можно воспользоваться командой show table, например:mysql> SHOW TABLE STATUS LIKE 'transaction' \G********************* 1. row *********************Name: transactionEngine: InnoDB...Create_options:Comment: InnoDB free: 3072 kB; ...Взглянув на второй элемент, можно понять, что таблица transaction уже использует механизм InnoDB. Если бы это было не так,можно было бы назначить механизм InnoDB для этой таблицыпосредством следующей команды:ALTER TABLE transaction ENGINE = INNODB;Вот пример использования точек сохранения:START TRANSACTION;UPDATE productSET date_retired = CURRENT_TIMESTAMP( )WHERE product_cd = 'XYZ';SAVEPOINT before_close_accounts;UPDATE accountSET status = 'CLOSED', close_date = CURRENT_TIMESTAMP( ),last_activity_date = CURRENT_TIMESTAMP( )WHERE product_cd = 'XYZ';ROLLBACK TO SAVEPOINT before_close_accounts;COMMIT;Результирующий эффект этой транзакции состоит в том, что фиктивный тип счета XYZ выходит из обращения, но ни один из счетов не закрывается.Что такое транзакция?239При использовании точек сохранения необходимо помнить следующее:• Несмотря на название, при создании точки сохранения ничего несохраняется.

Если требуется сделать транзакцию постоянной, необходимо выполнить команду commit.• Если использовать команду rollback без указания точки сохранения, все точки сохранения транзакции будут проигнорированыи отменена будет вся транзакция.Работая с SQL Server, используйте его собственные команды: save transaction (сохранить транзакцию) – для создания точки сохранения и rollback transaction (откатить транзакцию) – для отката к точке сохранения.За каждой такой командой должно следовать имя точки сохранения.Индексы и ограниченияПоскольку данная книга посвящена методикам программирования,предыдущие двенадцать глав рассматривали элементы языка SQL, позволяющие создавать мощные выражения select, insert, update и delete.Однако базы данных обладают и другими средствами, косвенно влияющими на создаваемый код.

В этой главе рассмотрены два таких средства: индексы и ограничения.ИндексыПри вставке строки в таблицу сервер БД не пытается поместить данные в какоето определенное место таблицы. Например, добавляястроку в таблицу department, сервер размещает ее не по порядку номеров столбца dept_id и не в алфавитном порядке по столбцу name. Вместоэтого сервер просто помещает данные в следующую доступную ячейкупамяти в файле (сервер хранит список свободной памяти для каждойтаблицы). Поэтому, чтобы ответить на запрос к таблице department,серверу приходится проверять каждую ее строку. Например, выполняется следующий запрос:mysql> SELECT dept_id, name> FROM department> WHERE name LIKE 'A%';+++| dept_id | name|+++|3 | Administration |+++1 row in set (0.03 sec)Чтобы найти все отделы, названия которых начинаются на 'A', сервердолжен просмотреть каждую строку таблицы department и проверить241Индексысодержимое столбца name.

Если имя отдела начинается с 'A', строка добавляется в результирующий набор.Для таблицы, состоящей только из трех строк, этот метод хорош.А представьте, сколько времени потребуется, чтобы ответить на этотзапрос, если в таблице 3 000 000 строк? При некотором числе строк(больше трех и меньше 3 000 000) сервер достигает того предела, когдауже не успевает ответить на запрос в течение приемлемого промежутка времени без дополнительной помощи.

Эта помощь приходит в форме одного или нескольких индексов таблицы department.Даже если вы ни разу не слышали об индексе БД, вы, безусловно, знаете, что такое индекс (в этой книге он тоже есть). Индекс – это простомеханизм поиска определенного элемента ресурса. Например, в концекаждого технического издания есть предметный указатель, позволяющий найти определенное слово или фразу. В указателе эти слова и фразы перечислены в алфавитном порядке, что позволяет читателю быстро перейти к определенной букве, выбрать нужную запись и затем найти страницу или страницы, где можно отыскать это слово или фразу.Как человек использует предметный указатель, чтобы найти словав печатном издании, так и сервер БД с помощью индексов выявляетместоположение строк в таблице.

Индексы – это специальные таблицы, содержимое которых, в отличие от обычных таблиц данных, хранится в определенном порядке. Однако индекс включает не все данныесущности, а только столбец (или столбцы), используемый для определения местоположения строк в таблице данных, а также информацию,описывающую физическое размещение строк. Поэтому предназначение индексов – помочь в извлечении подмножества строк и столбцовтаблицы без необходимости проверять все строки.Создание индексаВернемся к таблице department. Допустим, принято решение добавитьиндекс для столбца name, чтобы ускорить выполнение запросов по полному или частичному имени отдела, а также операций update или delete, использующих это имя.

Вот как можно добавить такой индексв базу данных MySQL:mysql> ALTER TABLE department> ADD INDEX dept_name_idx (name);Query OK, 3 rows affected (0.08 sec)Records: 3 Duplicates: 0 Warnings: 0Это выражение создает индекс (точнее, индекс на основе Вдерева, ноболее подробно об этом позже) для столбца department.name. Более того,индексу присвоено имя dept_name_idx. При наличии индекса оптимизатор запросов (обсуждаемый в главе 3) воспользуется им, если сочтетэто выгодным (например, если в таблице department только три строки,оптимизатор прекрасно справится и без использования индекса и про242Глава 13.

Индексы и ограничениясмотрит всю таблицу). Если для таблицы есть несколько индексов, оптимизатору придется выбрать индекс, лучше всего подходящий дляконкретного SQLвыражения.MySQL рассматривает индексы как необязательные компоненты таблицы, вот почему для добавления или удаления индексаиспользуется команда alter table (видоизменить таблицу). Другие серверы БД, включая SQL Server и Oracle Database, считаютиндексы независимыми объектами схемы.

Поэтому для SQLServer и Oracle индекс формировался бы с помощью командыcreate index (создать индекс):CREATE INDEX dept_name_idxON department (name);Все серверы БД позволяют просматривать доступные индексы. Увидеть все индексы определенной таблицы пользователи MySQL могутс помощью команды show (показать):mysql> SHOW INDEX FROM department \G*************************** 1.

row ***************************Table: departmentNon_unique: 0Key_name: PRIMARYSeq_in_index: 1Column_name: dept_idCollation: ACardinality: 3Sub_part: NULLPacked: NULLNull:Index_type: BTREEComment:*************************** 2. row ***************************Table: departmentNon_unique: 0Key_name: dept_name_uidxSeq_in_index: 1Column_name: nameCollation: ACardinality: 3Sub_part: NULLPacked: NULLNull:Index_type: BTREEComment:2 rows in set (0.02 sec)Из результата видно, что для таблицы department есть два индекса: PRIMARY – для столбца dept_id и dept_name_idx – для столбца name.

Поскольку мы создавали только один индекс (dept_name_idx), может возник243Индексынуть вопрос, откуда взялся второй. При создании таблицы departmentвыражение create table включало ограничение, назначающее столбецdept_id первичным ключом таблицы. Вот выражение для созданиятаблицы:CREATE TABLE department(dept_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,CONSTRAINT pk_department PRIMARY KEY (dept_id));Когда таблица была создана, сервер MySQL автоматически сформировал индекс для столбца первичного ключа, которым в данном случаеявляется dept_id, и назвал индекс PRIMARY.

Характеристики

Тип файла
PDF-файл
Размер
1,22 Mb
Материал
Предмет
Высшее учебное заведение

Список файлов ответов (шпаргалок)

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6352
Авторов
на СтудИзбе
311
Средний доход
с одного платного файла
Обучение Подробнее