Создание таблицы базы данных

Установив MySQL, вы получили мощный сервер баз данных, но пока этот сервер имеет лишь одну таблицу test_table в базе данных testDB, которую мы создали в Главе 1. В этой главе вы узнаете о том, как:

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

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

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

    Т а б л и ц а 8.1. Пример описания полей таблицы

    Имя поля
    Описание
    id Уникальный идентификационный номер записи (ID)
    format Тип носителя: CD, магнитофонная кассета, грампластинка и т. п.
    title Название альбома
    artist_fn Имя исполнителя
    artist_ln Фамилия исполнителя
    rec_label Название фирмы звукозаписи
    my_notes Ваши заметки о записи
    date_asq Дата приобретения

    В следующих упражнениях мы создадим последовательность форм, чтобы получить информацию о вашей таблице и послат ее в вашу базу данных My SQL. Первым шагом будет определение имени таблицы и числа полей, которые вы хотите в нее включить. Вторым шагом будет отобраение дополнительных полей формы, чтобы вы могли определит свойства колонок (полей) вашей таблицы. Третим шагом будет отправка запроса на создание таблицы к MySQL, проверка создания таблицы и вывод сообщения об успешном завершении всех операций.

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

    Типы данных

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

    Очень важно определять подходящую длину полей. Например, если вы имеете 50-символьное поле типа VARCHAR (см. ниже), чтобы записывать в него название музыкальной записи, и попытаетесь поместить в это поле строку из ста символов, то строка будет обрезана до 50 символов.

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

    В следующей ниже таблице показан краткий перечень возможных типов данных, их описание и способ определения длины. Полный список типов данных вы можете найти на сайте, расположенном в Интернете по адресу: www.thickbook.com.

    Т а б л и ц а 8.2. Типы данных полей таблицы

    Тип данных
    Описание
    Нужно определять длину?
    INT
    Целое число в диапазоне от 0 до 4294967295 1 Не требуется; по умолчанию 11 символов
    FLOAT
    Число с плавающей точкой Не требуется; по умолчанию 10/2 (10 символов - целая часть; 2 символа - дробная часть)
    DATE
    Дата в формате ГГГГ-ММ-ДД, между 1000-01-01 и 9999- 12-31 Нет
    CHAR
    Строка фиксированной длины от 1 до 255 символов Не требуется; по умолчанию 1
    VARCHAR
    Строка переменной длины от 1 до 255 символов Да
    TEXT
    Поле с максимальной длиной до 65535 символов Нет

    Важность уникальных полей

    Использование уникальных идентификационных номероа (ID) поможет вам отслеживать ваши данные, а также поможет вам в дальнейшем, когда вы попытаетесь установить связи между несколькими таблицами. В таблице my_music тоже будет поле ID. Использование этого поля в качестве уникального, взамен title, позволит вам имет в вашей таблице две записи, которые имеют одинаковое имя. Например, если вы имеете альбом Strange Fire группы Indigo Gils, то вы можете дважды включить его в вашу таблицу: первый раз - как версию, выпущенную в 1987 году, и второйраз как версию, выпущенную в 1989 году.

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

    Создание последовательности из двух форм

    Последовательность из двух форм для создания таблицы базы данных может показаться выходящей за пределы необходимого. Ведь мы уже познакомились с основным оператором SQL, создающим таблицы, в Главе 1 "Установка и настройка MySQL", когда создавали таблицу test_table командой

    create table test_table (test_id int, test_note text);

    Когда вы используете сценарий РНР для создания таблицы, все ваши действия состоят в отправке точно такого же запроса к MySQL. Однако вы можете сделать процесс создания таблицы более гибким: создать основанный на форме интерфейс и назвать его "административный интерфейс".

    Процесс создания административного интерфейса мы начнем с HTML-формы, затем создадим РНР-сценарий, который будет брать информацию из этой формы и динамически создавать другую форму. Наконец, мы создадим сценарий, который отправит сформированный SQL-запрос для создания таблицы.

    Этап 1: Число полей

    Эта HTML-форма будет содержать два поля ввода: одно для имени таблицы, а другое - для количества полей, которое ваша таблица будет содержать.

  • Создайте с помощью текстового редактора новый файл.
  • Начните HTML-блок:
  • Начните форму с методом post и действием do_showfielddef.php:
  • Создайте поле ввода с надписью для имени таблицы:
  • Создайте поле ввода с надписью для количества полей таблицы:
  • Создайте кнопку с надписью для передачи формы;
  • Закройте форму и завершите HTML-блок:
  • Сохраните созданный файл с именем show_createtable.html в папке для документов вашего Web-сервера.
  • Запустите свой Web-браузер, в поле ввода Адрес: введите

    http://localhost/show_createtable.html

    и нажмите клавишу Enter. Браузер загрузит страницу Создание таблицы базы данных: Этап 1 (Рис. 8.1).
  • Рис. 8.1. Страница Создание таблицы базы данных: Этап 1

    Hа Рис. 8.1 вы видите созданную форму с полями для ввода имени таблицы и количества содержащихся в ней полей, а также кнопку для перехода к следующей части создания таблицы.

    Далее мы продолжим процесс создания таблицы базы данных и создадим сценарий, который динамически создаст другую форму, основанную на значениях переменных $table_name и $num_fields.

    Этап 2: Определение Ваших полей

    На первом этапе мы создали переменные для хранения имени таблицы ($table_name) и количества полей, которое вы хотите поместить в таблицу ($num_fields). На этом этапе мы создадим сценарий РНР, отображающий дополнительную форму с элементами, необходимыми для последующего определения полей таблицы: имени, типа и длины.

  • Создайте с помощью текстового редактора новый файл.
  • Начните РНР-блок:
  • Проверьте, что значения переменных $table_name и $num_fields были введены в форме:
  • Если хотя бы одно из значений не задано, то будет отображена первая форма и произойдет выход из сценария.

    Начнем формирование переменной с именем $form_block, в которой будет содержаться форма с методом post и действием do_createtable.php. Помните о том, что нужно использовать символ маскирования (\) перед кавычками.

  • Введите текст:
  • Поскольку сценарий создает следующую форму "на лету" (динамически) в одной большой строке, то вы можете вывести всю форму просто как строку после того, как уже будет закончен процесс синтаксического анализа. Таким образом, вы не застрянете на недостроенной странице, которая не будет отображаться, если возникнет ошибка.

  • Добавьте скрытое поле для хранения значения переменной $table_name:
  • Значение этой переменной вы будете использовать в конце последовательности для сообщения пользователю о том, что таблица была создана правильно.

    Отобразим форму в виде HTML-таблицы, чтобы поля были лучше выровнены. Начнем co строки заголовков столбцов и пока закроем строку $form_block.

  • Для этого введите:
  • Начните оператор цикла for для создания полей формы:
  • Также как цикл while, цикл for выполняется, пока условие истинно. В нашем случае цикл for начнется с переменной $i, имеющей значение 0 и будет продолжаться, пока $i меньше значения переменной $num_fields. После каждого цикла значение $i увеличивается на единицу.

    Внутри цикла for происходит добавление к переменной $form_block. В каждом цикле добавляется одна строка HTML-таблицы для ввода параметров очередного поля таблицы SQL.

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

    Использование квадратных скобок ([]) после field_name в поле ввода указывает на массив. Для каждого поля, определенного вами в этой форме, вы будете добавлять значение в массив $field_name. В массиве хранится много переменных в пронумерованных позициях, начиная с 0. Номер позиции увеличивается автоматически, как только массив возрастает. Например, если вы создали базу данных с шестью полями, то массив переменных $field_name будет содержать шесть переменных имен полей: $field_nama[0], $field_name[1], $field_name [2], $field_name[3], $field_name[4] и $field_name[5]

  • В следующей ячейке HTML-таблицы создайте открывающийся список, содержащии типы полей
  • Создайте последнюю ячейку таблицы, которая будет содержать текстовое поле для указания длины поля, закройте строку таблицы и закройте строку $form_block:
  • Завершите цикл for:
  • Добавьте к $fofm_block последние строки HTML-кода, задающие кнопку Создать Таблицу и закрывающие вашу таблицу и форму:
  • Закройте блок РНР:
  • Введите блок HTML:
  • Создайте заголовок формы, введя смесь кода HTML и РНР:
  • Заголовок нужен для того, чтобы пользователь знал, что он просматривает.

  • Отобразите содержимое переменной $form_block:
  • Завершите HTML-блок тегами:
  • Сохраните созданный файл с именем do_showfielddef.php в папке для документе вашего Web-сервера.
  • В следующем упражнении вы пройдете первый и второй этап, чтобы проверить, как вы подготовились к созданию таблицы.

    Начало процесса создания таблицы

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

  • Запустите свой Web-браузер, в поле ввода Адрес введите

    http://localhost/show_createtable.html

    и нажмите клавишу Enter. Браузер загрузит страницу Создание таблицы базы данных: Этап 1 (Рис. 8.1) с формой, определяющей имя таблицы и количество содержащихся в ней полей.
  • Введите в поле ввода Имя таблицы название my_music.
  • В поле ввода Количество полей введите 8
  • .
  • Нажмите кнопку Перейти к Этапу 2. В рабочее окно браузера будет загружена страница Создание таблицы базы данных: Этап 2 (Рис. 18.2).
  • Рис. 8.2. Страница Создание таблицы базы данных: Этап 2

    На Рис. 8.2 вы видите форму, динамически сформированную сценарием, который вы создали в предыдущем знакомстве. Эта форма содержит восемь строк, которые определяют восемь полей в каждой записи таблицы базы данных. Заполним эти поля, но не будем пока нажимать кнопку Создать Таблицу, так как для нее еще не создан сценарии.

  • В поле ввода Имя поля, расположенное в первой строке, введите текст id, из открывающегося списка Тип поля выберите значение int, и в поле ввода Длина поля введите число 5.
  • В поле ввода Имя поля, расположенное во второй строке, введите текст format, из открывающегося списка Тип поля выберите значение char, и в поле ввода Длина поля введите число 2.
  • В поле ввода Имя поля, расположенное в третьей строке, введите текст title, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите число 150.
  • В поле ввода Имя поля, расположенное в четвертой строке, введите текст artist_fn, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите число 100.
  • В поле ввода Имя поля, расположенное в пятой строке, введите текст artist_in, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите числo 100.
  • В поле ввода Имя поля, расположенное в шестой строке, введите текст rec_label, из открывающегося списка Тип поля выберите значение varchar, и в поле ввода Длина поля введите число 50.
  • В поле ввода Имя поля, расположенное в седьмой строке, введите текст my_notes, из открывающегося списка Тип поля выберите значение text.
  • В поле ввода Имя поля, расположенное в восьмой строке, введите текст date_acq, из открывающегося списка Тип поля выберите значение date.
  • Заполненная таблица должна выглядеть так,
    как показано на Рис. 8.3

    .

    Рис. 8.3. Заполненная форма второго этапа создания таблицы

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

    Paзработка сценария для создания таблицы

    Сценарий, который вы создадите в этом упражнении, построит оператор SQL и отправит его к MySQL, чтобы создать таблицу my_music.

  • Создайте с помощью текстового редактора новый файл.
  • Начните РНР блок:
  • Создайте переменную для хранения имени базы данных, в которой мы будем создавать таблицу:
  • Добавьте переменную для хранения результата функции mysql_connect ( ):
  • Символ @ используется для подавления предупреждений, а функция die( ) - для прерывания сценария и вывода сообщения в случае невозможности подключиться к базе данных.

  • Добавьте переменную для хранения результата функции mysql_select_db ( ):
  • Символ @ используется для подавления предупреждений, а функция die ( ) - для прерывания сценария и вывода сообщения в случае, если выбор базы данных закончится неудачей.

    Функция mysgl_select_db ( ) требует указания двух аргументов: имени базы данных и идентификатора текущего подключения.

  • Начните формирование запроса, в переменной $sql:
  • Начните цикл for, с помощью которого будет добавляться остальная часть запроса SQL:
  • Цикл будет повторяться столько раз, сколько полей содержится в качестве элементов массиве $field_name.

    Функция count ( ) подсчитывает количество элементов в массиве.

  • Добавьте к оператору SQL имя и тип каждого нового поля:
  • Поскольку некоторые поля могут иметь определенную длину, а некоторые - нет, введем оператор if...else. Если длина поля присутствует, то мы будем добавлять ее в оператор SQL.

  • Начните оператор if ...else:
  • Если длина поля не определена, то добавим к оператору SQL запятую (,), служащую разделителем между описаниями полей и закроем оператор if. . .else.:

  • Закройте оператор цикла:
  • Теперь оператор SQL содержит все параметры полей. Однако в результате работы оператора цикла for, в конце строки SQL-оператора, получилась лишняя запятая. Необходимо удалить ее, после чего оператор SQL может быть завершен. Для этого мы используем функцию substr ( ), которая вернет строку за исключением последнего символа.

  • Введите текст:
  • Функция substr ( ) использует три аргумента. Первый определяет строку, второй указывает на номер символа, с которого нужно начать копировать строку, а третий - номер символа, на котором нужно закончить копирование. В нашем случае указано начать с первого символа (нумерация начинается с 0) и закончить предпоследним.

  • Завершите формирование оператора SQL:
  • Добавьте переменную для хранения результата функции mysql_query ( ):
  • Символ @ используется для подавления предупреждений, а функция die ( ) - для прерывания сценария и вывода сообщения в случае, если будет невозможно выполнить запрос.

    Функция mysql_query ( ) требует указания оператора SQL и идентифи катора текущего подключения.

  • Чтобы проверить значение переменной $result, введите оператор if ...else:
  • Если значение переменной $result истина, значит запрос завершился успешно и создастся переменная с сообщением о создании таблицы.

  • Закройте блок РНР
  • Введите блок HTML:
  • Выведите на страницу Создание таблицы базы данных: Этап 3 заголовок для информирования пользователя о том, что происходит:
  • Выведите заключительное сообщение:
  • Завершите блок HTML:
  • Сохраните созданный файл с именем db_createtable.php в папке для документов вашего Web-сервера.
  • В следующем упражнении вы проверите работоспособность созданного вами сценария.

    Создание таблицы

    Если вы пока еще не закрыли рабочее окно своего Web-браузера с заполненной формой (Рис. 8.3), то для проверки работы созданного сценария вам нужно только нажать кнопку Создать таблицу.

  • Переключитесь в браузер и нажмите кнопку Создать Таблицу. В рабочее окно браузера будет загружена страница Создание таблицы базы данных: Этап 3 (Рис.8.4).
  • Чтобы убедиться в том, что таблица была действительно создана, выполните следующие действия:

    В поле ввода браузера Адрес введите

    http://localh.ost/db_listtable.php

    и нажмите клавишу Enter.

    Обратившись по этому адресу, вы запустите сценарий db_listtable.php, который создали в предыдущей главе для отображения таблиц баз данных. В рабочее окно браузера будет загружена страница Таблицы MySQL (Рис. 8.5).

    Рис. 8.5. Страница Таблицы MySQL

    Из Рис. 8.5 следует, что была создана таблица my_music в базе данных test_DB.

    В следующей главе вы создадите форму для сценария, добавляющего записи в таблицу my_music.



    Hosted by uCoz