Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

web - tec / PHP 5 для начинающи

.pdf
Скачиваний:
73
Добавлен:
12.06.2015
Размер:
26.79 Mб
Скачать

 

 

Введение в базы данных и SQL 383

 

Вторая таблица ++++++ протокол матчей:

 

 

 

 

 

 

 

Player_Id

Date_Played

 

 

 

 

42

03/03/04

 

6

03/03/04

 

2

03/03/04

 

14

03/03/04

 

2

25/02/04

 

25

25/02/04

 

6

25/02/04

 

7

25/02/04

 

 

 

 

 

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

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

Player_Id

Name

Phone_number

Nickname

 

 

 

 

42

David

555–1234

Dodge

6

Nic

555–3456

Obi-d

2

David

555—6543

Witblitz

14

Mark

555–1213

Greeny

25

Pads

555–9101

Pads

7

Nic

555–5678

Nicrot

 

 

 

 

Теперь в таблице нет дублирующейся информации, таблица представляет только связанную информацию (информацию об игроках). Что можно сказать по поводу уникального идентификатора? Каждая запись должна иметь (по крайней мере, одно) уникальное поле, иначе говоря, поле, в котором нет повторяющихся значений. Ввиду исключительной природы данного поля каждое значение в нем уникально идентифи+ цирует каждую запись таблицы. Поле, которое используется для идентификации за+ писей, называется первичным ключом (primary key). В каждой таблице допускается толь+ ко один первичный ключ.

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

384 Глава 9

Можно было бы добавить уникальный ключ, который присваивал бы каждой запи+ си уникальный номер, но для начала стоит внимательно изучить информацию в таб+ лице игроков. В каждом виде спорта номер игрока должен быть уникальным, таким образом, известно, что все значения в поле Player_Id уникальны. Кроме этого зна+ чения в поле Nickname также уникальны, поскольку в определенный момент времени у каждого игрока есть только одно прозвище. Какое из двух этих полей выбрать? По+ скольку прозвища могут изменяться в зависимости от ‘‘эффективности’’ игрока, поле Player_Id является наиболее подходящим вариантом для первичного ключа.

Что касается таблицы протокола матчей, то в ней поле Player_Id уже не является уникальным, потому что для каждого игрока в таблице имеется несколько записей с раз+ ными датами игры. Очевидно, что и поле даты тоже не может быть уникальным. В такой ситуации можно самостоятельно создать уникальное поле (как это сделать, будет показано далее). Теперь обе таблицы соответствуют первой нормальной форме. Добавление ID+ поля имеет еще одно применение, особенно если требуется объединить информацию двух полей таблицы протокола матчей: его можно использовать, чтобы создать уникаль+ ный ключ, который можно было бы связать с какими+либо другими данными (например, с количеством добытых для команды очков по каждому игроку в каждом матче).

Вторая нормальная форма имеет две цели, которые применимы только к базам данных соответствующих 1NF.

Вторая нормальная форма (2NF)

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

Связывать новые таблицы с существующими по внешнему ключу (foreign key) (ключ, идентифицирующий записи в различных таблицах).

Обе таблицы содержат общее поле (Player_Id), значения в котором совпадают в двух таблицах, поэтому можно связать эти таблицы вместе. Фактически для этого внешний ключ не требуется, однако использование внешних ключей определенно имеет свои преимущества (более глубокое их обсуждение представлено на странице www.mysql.com/doc/en/ANSI_diff_Foreign_Keys.html). Это означает, что записи

водной таблице имеют четко определенные связи с записями в других таблицах. В на+ стоящий момент база данных имеет всю информацию, необходимую для выдачи резуль+ татов по сложным запросам, охватывающим обе таблицы. Эту информацию невозмож+ но было бы получить, изолированно просматривая таблицы. Базы данных с подобными таблицами можно по праву называть реляционными. Описанные здесь специфические отношения также называются отношениями ‘‘один ко многим’’. Для каждой записи

втаблице игроков может существовать множество записей в таблице протокола матчей. Способность создавать выразительные отношения ‘‘один ко многим’’ хорошо подтвер+ ждает то, что база данных соответствует требованиям второй нормальной формы.

Третья нормальная форма (3NF)

Цель третьей нормальной формы ++++++ устранить поля, которые не зависят от пер+ вичного ключа.

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

Введение в базы данных и SQL 385

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

Другие нормальные формы

Существует еще немало нормальных форм. Четвертая нормальная форма требует изолировать независимые множественные отношения. Это правило главным образом применимо к проблемам отношений ‘‘многие ко многим’’, где несколько записей в одной таблице могут быть перекрестно связаны с записями в другой таблице, которые в свою очередь могут быть обратно связаны с несколькими записями первой таблицы. Такая за+ дача может показаться весьма сложной, но это как раз тот случай, когда придерживаться стандарта необязательно. Здесь эта концепция упоминается потому, что подобная си+ туация вполне вероятна. Поэтому полезно знать, что такие проблемы существуют.

Обращение к базам данных с помощью SQL

Итак, MySQL ++++++ реляционная база данных. По сути, теперь можно начинать при+ менять только что описанные принципы к самой системе баз данных. Однако сначала необходимо более подробно рассмотреть язык, который используется для взаимодей+ ствия с реляционными базами данных. Этот язык называется SQL.

SQL (или Structured Query Language ++++++ язык структурированных запросов) ++++++

стандартный набор команд, который используется для обмена данными с системой управления реляционными базами данных на любой платформе. Любая задача, такая как создание баз данных или таблиц, а также сохранение, получение, удаление и об+ новление данных в базах, решается посредством SQL+операторов. Реализация SQL+ функций отличается в СУРБД разных поставщиков, но поскольку базовые идеи иден+ тичны, применение на одной платформе навыков, полученных на другой платформе, не намного сложнее, чем перенос компьютерной программы с одной платформы на дру+ гую с использованием одного языка (в частности PHP). В этом разделе рассматриваются некоторые базовые особенности SQL: типы данных, индексы, ключи и запросы.

Реализация некоторых SQL*функций в MySQL отличается от стандарта ANSI SQL. Перечень этих отличий можно получить на странице www.mysql.com/doc/en/Differences_from_ANSI.html.

Типы данных в SQL

При создании таблицы базы данных необходимо определить тип и размер каждого поля. Поля аналогичны PHP+переменным за исключением того, что в каждом поле мо+ гут храниться только данные определенного типа и размера. Следовательно, в отличие от PHP+переменных записать символьные данные в целочисленное поле невозможно. В MySQL поддерживается три распространенных группы типов данных: численные, да+ та/время и символьные. Все эти типы данных рассматриваются в следующих таблицах.

386 Глава 9

Численные

Описание

Диапазон/формат

типы данных

 

 

 

 

 

INT

Целые числа обычной

(от –231 до 231 –1) или (от 0 до 232 –1),

 

величины

если UNSIGNED

TINYINT

Очень малые целые числа

(от –27 до 27 –1) или (0 до 28 –1), если

 

 

UNSIGNED

SMALLINT

Малые целые числа

(от –215 до 215 –1) или (от 0 до 28 –1),

 

 

если UNSIGNED

MEDIUMINT

Средние целые числа

(от –223 до 223 –1) или (от 0 до 224 –1),

 

 

если UNSIGNED

BIGINT

Большие целые числа

(от –263 до 263 –1) или (от 0 до 264 –1),

 

 

если UNSIGNED

FLOAT

Числа с плавающей запятой

Минимальное ненулевое ±1.176 ×10 – 38;

 

с обычной точностью

максимальное ненулевое ±3.403 ×10 + 38

DOUBLE/REAL

Числа с плавающей запятой

Минимальное ненулевое ±2.225 ×10 – 308;

 

с двойной точностью

максимальное ненулевое ±1.798 ×10 + 308

DECIMAL

Числа с плавающей запятой,

Максимальный диапазон такой же, как у

 

сохраняемые как строки

DOUBLE

Дата/время

Описание

Диапазон/формат

 

 

 

DATE

Дата

Формат YYYY–MM–DD. Диапазон от 1000–01–01 до 9999–12–31

DATETIME

Дата и время

Формат YYYY–MM–DD hh:mm:ss. Диапазон от 1000–01–01

 

 

00:00:00 до 9999–12–31 23:59:59

TIMESTAMP

Временная

Формат YYYYMMDDhhmmss. Диапазон от 19700101000000

 

метка

до 2037 года

TIME

Время

Формат hh:mm:ss. Диапазон от –838:59:59 до 838:59:59

YEAR

Год

Формат YYYY. Диапазон от 1900 до 2155

 

 

 

Символьные

Описание

Диапазон/формат

типы данных

 

 

 

 

 

CHAR

Строки фиксированной длины

0–255 символов

VARCHAR

Строки переменной длины

0–255 символов

BLOB

Большой двоичный объект

Двоичные данные 0–65535 байтов в длину

 

(BLOB)

 

TINYBLOB

Небольшое BLOB-значение

Двоичные данные 0–255 байтов в длину

MEDIUMBLOB

Среднее BLOB-значение

Двоичные данные 0–16777215 байтов в длину

LONGBLOB

Большое BLOB-значение

Двоичные данные 0–4294967295 байтов в длину

TEXT

Текстовое поле обычного

0–65535 байтов

 

размера

 

TINYTEXT

Малое текстовое поле

0–255 байтов

 

 

 

Введение в базы данных и SQL 387

Символьные

Описание

Диапазон/формат

типы данных

 

 

 

 

 

MEDIUMTEXT

Текстовое поле среднего размера

0–16777215 байтов

LONGTEXT

Большое текстовое поле

0–4294967295 байтов

ENUM

Перечисление

Присваивается одно значение из списка

SET

Установленные значения

Присваивается нуль или несколько

 

 

значений из списка

Различие между типами полей CHAR и VARCHAR заключается в том, что в первом случае в поле хранится значение фиксированной длины независимо от фактической длины зна+ чения, а во втором случае в поле содержится в точности столько байтов, сколько необ+ ходимо для хранения заданного значения. Предположим, например, что в поля, опре+ деленные как char_field CHAR(10) и varchar_field VARCHAR(10), записана строка dodge. Значения, сохраненные в этих полях, будут немного отличаться друг от друга:

char_field: 'dodge

'//

для заполнения поля справа от заданной

 

//

строки добавляется пять пробелов

varchar_field: 'dodge'

//

пробелов нет

Из этого следует, что объявление поля с типом VARCHAR позволяет сэкономить не+ которое дисковое пространство. Однако не следует использовать VARCHAR для любых строк, потому что для этого типа поля характерен ряд недостатков. Например, MySQL+сервер обрабатывает поля типа CHAR гораздо быстрее, потому что их длина предопределена. Если требуется сохранять в базе данных строки, которые незначи+ тельно отличаются друг от друга по длине, то рекомендуется использовать тип CHAR. Более того, когда все строки имеют одинаковую длину, тип VARCHAR занимает больше дискового пространства, так как кроме самой строки в дополнительном байте этого поля хранится длина этой строки.

В заключение стоит отметить, что если в таблице имеется хотя бы одно поле VARCHAR, то все символьные поля преобразовываются к типу VARCHAR, даже если они определены иначе.

Индексы и ключи

Неопытные разработчики баз данных часто жалуются на медлительность исполь+ зуемых СУБД. Проблема часто объясняется отсутствием индекса. Индекс представляет собой отдельный отсортированный список значений определенного поля (или по+ лей) в таблице. Прежде чем изучать причину, по которой индексирование таблиц ра+ дикально влияет на производительность базы данных, рассмотрим таблицу, не имеющую индексов. Такая таблица, по сути, представляет собой простой текстовый файл, потому что СУБД осуществляет поиск данных в этой таблице последовательно. Записи в реляционной базе данных не вставляются в определенном порядке ++++++ сервер вставляет их произвольно. Чтобы гарантировать, что будут найдены все соответст+ вующие определенному критерию записи, СУБД полностью сканирует таблицу, а это очень медленная и неэффективная операция, особенно если в таблице имеется толь+ ко несколько совпадений с критерием отбора.

Теперь рассмотрим индексированную таблицу. Вместо продвижения по всей табли+ це в поисках записей, соответствующих требованиям пользователя, СУБД может про+

388 Глава 9

сканировать индекс. Поскольку индекс ++++++ ни что иное как упорядоченный список, такое сканирование выполняется очень быстро. Индекс направляет сервер к релевантным запи+ сям в таблице базы данных, и необходимость в полном сканировании таблицы отпадает.

Почему не сортируются сами таблицы? Сортировка таблиц имела бы практиче+ ский смысл, если бы было заранее известно, что поиск данных в таблице будет всегда осуществляться только по одному полю. Однако такое бывает редко. Так как сортиро+ вать таблицу по нескольким полям невозможно, лучше всего использовать индекс, ко+ торый обособлен от таблицы.

Рассмотрим случай, когда приходится выполнять поиск одновременно в несколь+ ких таблицах. Это тот случай, когда можно получить реальный выигрыш от использо+ вания индекса. Поиск возможных совпадений в объединенных таблицах без индек+ сов ++++++ очень плохая идея. СУБД должна будет проверить все возможные комбинации строк в одной таблице со строками в другой. Обработка двух таблиц по 500 записей в каждой потребовала бы 500×500=250 000 комбинаций. Индексирование значительно ускоряет поиск. СУБД проверяет индекс первой таблицы в поисках позиции совпаде+ ний с критериями первой части запроса, а затем, используя данный индекс для вто+ рой таблицы, ищет в ней совпадения со второй частью запроса. Иными словами, ре+ левантные записи выбираются непосредственно.

Первичный ключ (primary key) ++++++ специальный индекс, который, как было показано в начале главы, используется для идентификации записей в таблице и для связи этой таб+ лицы с другими таблицами, обеспечивая таким образом реляционную модель базы дан+ ных. Каждая связанная таблица должна иметь один (и только один) первичный ключ.

Индексы и первичные ключи можно создавать на основе комбинаций полей. Что+ бы сформировать таким способом ключ, комбинация значений всех полей ключа должна быть уникальной.

Поскольку индекс обеспечивает значительное повышение производительности, можно ли создавать как можно больше индексов для достижения максимальной про+ изводительности? Не всегда. Использование индексов является надежным способом повышения скорости поиска и получения данных из базы, однако оно сокращает производительность при сохранении или обновлении записей, а также увеличивает размер таблиц. Почему? При вставке записи в индексированную таблицу СУБД долж+ на записать позицию этой записи в соответствующей индексной таблице, а это требу+ ет определенных затрат времени и дискового пространства.

Кроме того, если в таблице имеется несколько индексов, то требуется также мно+ жество операций записи в индексной таблице. Поэтому рекомендуется создавать столько индексов, сколько действительно необходимо. Рекомендуется индексировать только те столбцы, по которым будет часто выполняться поиск или сортировка дан+ ных. Если потребуется, то дополнительные индексы для таблицы можно создавать по мере увеличения производительности.

Запросы

Для создания запросов используются SQL*операторы или команды. Посредством за+ проса приложение обращается к СУБД, которая затем возвращает приложению запи+ си, удовлетворяющие заданным в запросе критериям. Запросы возвращают массив записей, удовлетворяющих заданным условиям и содержащих информацию из вы+ бранных полей. PHP и другие языки программирования, которые поддерживают под+ ключение к базам данных, могут обрабатывать возвращаемый массив, как любой дру+ гой массив переменных. (Эта тема подробнее рассматривается далее.) Возвращаемый

Введение в базы данных и SQL 389

массив записей, который называется результирующим множеством (result set) ++++++ ответ СУБД на данный запрос. Например, если ввести запрос на выборку записей, содер+ жащих в поле имени строку John, то база данных вернет все соответствующие этому запросу записи. Если таких записей нет, то будет возвращено значение NULL.

Некоторые SQL+операторы буквально являются командами, т.е. они не запраши+ вают данные, а указывают СУБД выполнить какие+либо действия, например: команда вроде ‘‘удалить записи, содержащие в поле имени значение John’’ не возвращает ре+ зультирующего множества.

NULL

Рассмотрим следующую ситуацию: класс пишет диктант, а учитель должен оценить работы учеников и внести результаты в таблицу базы данных. Вносить значение по умолчанию в столбец результатов до того, как работа оценена, было бы нечестно, потому что в данном случае значение по умолчанию просто неуместно. Что в таком случае можно было бы вставить в столбец результата, чтобы обозначить, что оценка еще не поставлена?

Предположим, что требуется создать таблицу базы данных, содержащую инфор+ мацию об исчезающих видах птиц. Одно из полей должно содержать значение макси+ мальной зарегистрированной скорости полета для каждой птицы. Вводя данные о пингвинах, разработчик вспоминает, что пингвины не умеют летать. Какое в этом случае значение следует внести в столбец скорости, чтобы обозначить, что данная ха+ рактеристика к пингвинам неприменима?

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

ВMySQL+таблицах NULL представляет пропущенное значение. NULL не принадле+ жит к какому+либо определенному типу данных, но может заменить любое значение. Поскольку NULL не является ни типом данных, ни значением, но записывается в поле, концепция NULL обычно трудна для понимания. Часто программисты неправильно понимают смысл использования NULL. Например, распространено ошибочное мне+ ние о том, что NULL ++++++ это замена нуля. Это неверно, потому что нуль (0) ++++++ значение,

вотличие от NULL. Строки, состоящие из одного или нескольких пробелов, и строки нулевой длины также часто путают с NULL, однако строки ++++++ тип данных, а NULL ++++++

нет. NULL ++++++ ничто, ни тип данных, ни значение.

Что происходит, когда результирующее множество одного из запросов содержит NULL, и это множество затем используется в программе для последующих вычисле+ ний? Для математических вычислений рекомендуется придерживаться практического правила ‘‘распространять’’ NULL. Любые арифметические операции с NULL возвра+ щают NULL. Это имеет смысл, потому что как иначе можно представить результат, ко+ гда все необходимые для вычислений данные отсутствуют? Это правило также приме+ нимо к ситуации, когда NULL делится на нуль, в результате чего возвращается NULL.

Команды запросов

MySQL+запросы, используемые для манипуляции данными в таблицах, могут со+ стоять из следующих основных команд:

SELECT: получает данные из базы;

DELETE: удаляет данные из базы;

390 Глава 9

INSERT: вставляет данные в базу;

REPLACE: заменяет данные в базе; если же такая запись в таблице существует, то в нее будут внесены новые данные;

UPDATE: обновляет данные в таблице.

Остальные команды предназначены скорее для создания или модификации струк+ туры базы данных, нежели для манипуляции данными:

CREATE: создает базу данных, таблицу или индекс;

ALTER: модифицирует структуру таблицы;

DROP: уничтожает базу данных или таблицу.

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

mysql> SELECT поле1, поле2, ... , полеn FROM имя_таблицы WHERE условие;

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

mysql> SELECT last_name, first_name -> FROM user

-> WHERE first_name = 'John'

Рассмотрим подробнее предложения FROM, WHERE и ORDER BY данного запроса. Запрос возвращает все записи из таблицы user, в которых значением поля first_name является строка John. Если такая таблица и записи, удовлетворяющие данному запросу, существуют, то результатом запроса будет следующее:

Simpleton John

Smith John

Thomas John

Рассмотрим теперь практические примеры работы с MySQL.

Практическое применение MySQL

Для начала изучим работу с MySQL+сервером посредством клиентской программы mysql и несколько простых запросов к базе данных. Этот раздел познакомит читателя с настройками баз данных и созданием нескольких новых пользователей (не имеющих прав пользователя root), а практические примеры продемонстрируют работу запросов.

Запуск клиентской программы mysql

Запустите клиент mysql, введя в командной строке следующую команду:

> mysql -uUSER -pPASSWORD -hHOST

Аргументы USER, PASSWORD и HOST необходимо заменить соответствующими зна+ чениями, отражающими персональные настройки. Например, если в используемой системе имя пользователя и пароль равны phpuser и phppass соответственно, а сер+ вер баз данных имеет адрес db.whatever.com, то команда будет следующей:

> mysql -uphpuser -pphppass -hdb.whatever.com

Введение в базы данных и SQL 391

Все аргументы являются необязательными. Для пропущенных аргументов исполь+ зуются следующие значения по умолчанию:

Аргумент

Значение

 

 

-u

Имя пользователя в учетной записи shell

-p

Нет пароля

-h

localhost

 

 

Получив такую команду, mysql+клиент подключается к серверу баз данных, рабо+ тающему на заданном узле, используя заданную комбинацию идентификатора пользо+ вателя и пароля. Кроме того, можно указать используемую базу данных, введя ее имя в конце команды:

> mysql -uUSER -pPASSWORD test

В ответ на такую команду сервер должен выдать следующее сообщение:

Welcome to the MySQL monitor. Commands end with ; or \ g.

Your MySQL connection id is 4 to server version: 4.0.18-nt

Type 'help;' or '\ h' for help. Type '\ c' to clear the buffer.

mysql>

MySQL-монитор. Команды должны завершаться символом ; или \ . Идентификатор данного соединения с MySQL 4; версия сервера: 4.0.18-nt

Введите 'help;' или '\ h' для получения справки. Введите '\ c' для очистки буфера. mysql>

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

Выбор используемой базы данных

Чтобы получить перечень доступных баз данных, используется команда SHOW DATABASES:

mysql> SHOW DATABASES;

+---------------

+

| Database

|

+---------------+

| mysql

|

| test

|

+---------------+

2 rows in set (0.00 sec)

Это почти та же самая информация, которую ранее выдавала программа mysqlshow: до сих пор в системе были доступны две базы данных ++++++ mysql и test. Кроме того, в данном случае в выводе имеется информация о количестве записей (2) и о времени, которое потребовалось серверу на выполнение запроса (0,00 секунд с точностью до двух десятичных знаков).

Фактически, зная правильный синтаксис, клиентскую программу mysql можно за+ ставить выполнять почти все те же действия, которые могут выполнять другие более специализированные программы. Рассмотрим эти возможности подробнее.

392 Глава 9

Чтобы выбрать определенную базу, можно использовать команду вида USE

имябазыданных:

mysql> USE mysql; Database changed

Теперь MySQL+сервер готов к работе с базой данных mysql. Предупреждение: таб+ лицу user в этой базе данных следует использовать с особой осторожностью ++++++ она содержит важную информацию, удалять которую нежелательно.

С целью читабельности кода рекомендуется писать ключевые слова SQL в верхнем регистре, а определенные пользователем имена, такие как имена таблиц и полей, ****** в нижнем. Не стоит забывать, что в Linux/Unix*платформах аргументы чувствительны

к регистру символов: Mysql, MYSQL и mysql ****** имена абсолютно разных баз данных.

Просмотр таблиц в базе данных

Для получения списка существующих в текущей базе данных таблиц используется команда SHOW TABLES:

mysql> SHOW TABLES;

+------------------

+

| Tables in mysql

|

+------------------

+

| columns_priv

|

| db

|

| func

|

| host

|

| tables_priv

|

| user

|

+------------------

+

6 rows in set (0.00 sec)

В данном случае также выводится больший объем информации, чем при использо+ вании mysqlshow. Теперь можно подробнее изучить таблицы. Например, чтобы про+ смотреть структуру таблицы user, можно использовать команду DESCRIBE (или DESC):

mysql> DESC user;

 

 

 

 

 

 

+------------------------

+---------------------

+------

+-----

+---------

+-------

+

| Field

| Type

| Null |

Key | Default

| Extra |

+------------------------

+---------------------

+------

+-----

+---------

+-------

+

| Host

| varchar(60) binary

|

|

PRI |

|

|

| User

| varchar(16) binary

|

|

PRI |

|

|

| password

| varchar(16)

|

|

|

|

|

| Select_priv

| enum('N','Y')

|

|

| N

|

|

| Insert_priv

| enum('N','Y')

|

|

| N

|

|

| Update_priv

| enum('N','Y')

|

|

| N

|

|

| Delete_priv

| enum('N','Y')

|

|

| N

|

|

| Create_priv

| enum('N','Y')

|

|

| N

|

|

| Drop_priv

| enum('N','Y')

|

|

| N

|

|

| Reload_priv

| enum('N','Y')

|

|

| N

|

|

| Shutdown_priv

| enum('N','Y')

|

|

| N

|

|

| Process_priv

| enum('N','Y')

|

|

| N

|

|

...

 

 

 

 

 

 

...

 

 

 

 

 

 

| File_priv

| enum('N','Y')

|

|

| N

|

|

| Grant_priv

| enum('N','Y')

|

|

| N

|

|

| References_priv

| enum('N','Y')

|

|

| N

|

|

| max_connections

| int(11) unsigned

|

|

| 0

|

|

+------------------------

+---------------------

+------

+-----

+---------

+-------

+

31 rows in set (0.00 sec)

 

 

 

 

 

 

Соседние файлы в папке web - tec