Лаборатоные работы по MYSQL
методическая разработка на тему

Кузин Сергей Александрович
MySQL (МФА: [maɪ ˌɛskjuːˈɛl])[4] — свободная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, получившая права на торговую марку вместе с поглощённой Sun Microsystems, которая ранее приобрела шведскую компанию MySQL AB. Продукт распространяется как под GNU General Public License, так и под собственной коммерческой лицензией. Помимо этого, разработчики создают функциональность по заказу лицензионных пользователей. Именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.
 
MySQL является решением для малых и средних приложений. Входит в состав серверов WAMP, AppServ, LAMP и в портативные сборки серверов Денвер, XAMPP, VertrigoServ. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.
 
Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц.
 
26 февраля 2008 года Sun Microsystems приобрела MySQL AB за 1 млрд долларов[5], 27 января 2010 года Oracle приобрела Sun Microsystems за 7,4 млрд долларов[6] и включила MySQL в свою линейку СУБД.
 
Сообществом разработчиков MySQL созданы различные ответвления кода, такие как Drizzle (англ.), OurDelta, Percona Server и MariaDB. Все эти ответвления уже существовали на момент поглощения компании Sun корпорацией Oracle.

Скачать:

ВложениеРазмер
Файл laboratonye_raboty_po_mysql.docx42.33 КБ

Предварительный просмотр:

Кузин Сергей Александрович

составитель

Связь с базами данных MySQL

СУБД MySQL - одна из множества баз данных, поддерживаемых в PHP. Система MySQL распространяется бесплатно и обладает достаточной мощностью для решения реальных задач.

Краткое введение в MySQL

SQL - это аббревиатура от слов Structured Query Language, что означает структурированный язык запросов. Этот язык является стандартным средством для доступа к различным базам данных.

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

Для работы с базами данных удобно пользоваться средством, входящее в комплект Web-разработчика:Denwer phpMyAdmin. Здесь можно создать новую базу данных, создать новую таблицу в выбранной базе данных, заполнить таблицу данными, а также добавлять, удалять и редактировать данные.

В MySQL определены три базовых типа данных: числовой, дата и время и строчный. Каждая из этих категорий подразделяется на множество типов. Основные из них:

Тип

Описание

INT

Целое число

TINYINT

Маленькое целое число (-127 до 128 или от 0 до 255)

FLOAT

Вещественное число с плавающей точкой

DATE

Дата. Отображается в виде ГГГГ-ММ-ДД

TIME

Время. Отображается в виде ЧЧ:ММ:СС

DATETIME

Дата и время. Отображается в виде ГГГГ-ММ-ДДЧЧ:ММ:СС

YEAR[(2|4)]

Год. Можно определить двух- или четырехциферный формат

CHAR(M)

Строка фиксированной длины М (M<=255)

VARCHAR(M)

Строка произвольной длины до М (M<=255)

TEXT

Длинные текстовые фрагменты (<=65535)

BLOB

Большие двоичные объекты (изображения, звуки)


Каждый столбец после своего типа данных содержит и другие спецификаторы:

Тип

Описание

NOT NULL

Все строки таблицы должны иметь значение в этом атрибуте. Если не указано, поле может быть пустым (NULL)

AUTO_INCREMENT

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

PRIMARY KEY

Столбец является первичным ключом для таблицы. Данные в этом столбце должны быть уникальными. MySQL автоматически индексирует этот столбец

UNSIGNED

После целочисленного типа означает, что его значение может быть либо положительным, либо нулевым

COMMENT

Название столбца таблицы


Создание новой базы данных MySQL осуществляется при помощи SQL-команды CREATE DATABASE.

CREATE DATABASE IF NOT EXISTS `base`

        DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin

Создание новой таблицы осуществляется при помощи SQL-команды CREATE TABLE. Например, таблицаbooks для книжного магазина будет содержать пять полей: ISBN, автор, название, цена и количество экземпляров:

CREATE TABLE books (ISBN CHAR(13) NOT NULL,

                    PRIMARY KEY (ISBN),

                    author VARCHAR(30),

                    title VARCHAR(60),

                    price FLOAT(4,2),

                    quantity TINYINT UNSIGNED);

Чтобы избежать сообщения об ошибке, если таблица уже есть необходимо изменить первую строчку, добавив фразу "IF NOT EXISTS":

CREATE TABLE IF NOT EXISTS books ...


Для создания автообновляемого поля с текущей датой типа TIMESTAMP или DATETIME используйте следующую конструкцию:

CREATE TABLE t1 (

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

);


Добавление данных в эту таблицу осуществляется при помощи SQL-команды INSERT. Например:

INSERT INTO books ( ISBN, author, title, price, quantity )

           VALUES ('5-8459-0184-7', 'Зандстра Мэт',

                   'Освой самостоятельно PHP4 за 24 часа', '129', '5');

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

Символ * означает, что необходимы все поля. Например:

SELECT * FROM books;

Для получения доступа только к некоторому полю следует указать его имя в инструкции SELECT. Например:

SELECT author, title, price FROM books;

Чтобы получить доступ к подмножеству строк в таблице, следует указать критерий выбора, который устанавливает конструкция WHERE. Например, чтобы выбрать имеющиеся в наличии недорогие книги о PHP, надо составить запрос:

SELECT * FROM books WHERE

        price < 200 AND title LIKE '%PHP%' AND quantity != 0;

% Соответствует любому количеству символов, даже нулевых
_ Соответствует ровно одному символу

Для того, чтобы строки, извлеченные по запросу, перечислялись в определенном порядке, используется конструкция ORDER BY. Например:

SELECT * FROM books ORDER BY price;

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

SELECT * FROM books ORDER BY price DESC;

Сортировать можно и по нескольким столбцам. Вместо названий столбцов можно использовать их порядковые номера:

SELECT * FROM books ORDER BY 4, 2, 3;

Для изменения ранее записанных в таблицу значений нужно воспользоваться командой UPDATE. Например, цену всех книг повысили на 10%:

UPDATE books SET price = price * 1.1;

Конструкция WHERE ограничит работу UPDATE определенным строками. Например:

UPDATE books SET price = price * 1.05 WHERE price <= 250;

Для удаления строк из базы данных используется оператор DELETE. Ненужные строки указываются при помощи конструкции WHERE. Например, какие-то книги проданы:

DELETE FROM books WHERE quantity = 0;

Если нужно удалить все записи

TRUNCATE TABLE table_name

Для полного удаления таблицы используется:

DROP TABLE table_name

Связь PHP с базой данных MySQL

Поработав с phpMyAdmin над созданием базы данных, можно приступить к подключению этой базы данных к внешнему Web-интерфейсу.

Чтобы получить доступ к базе данных из Web, используя PHP, надо сделать следующие основные шаги:

  • Подключение к серверу MySQL.
  • Выбор базы данных.
  • Выполнение запроса к базе данных:
  • добавление;
  • удаление;
  • изменение;
  • поиск;
  • сортировка.
  • Получение результата запроса.
  • Отсоединение от базы данных.

Для подключения к серверу базы данных в PHP есть функция mysql_connect( ). Ее аргументы: имя компьютера, имя пользователя и пароль. Эти аргументы можно опустить. По умолчанию имя компьютера =localhost, тогда имя пользователя и пароль не требуется. Если PHP используется в сочетании с сервером Apache, то можно воспользоваться функцией mysql_pconnect(). В этом случае соединение с сервером не исчезает после завершения работы программы или вызова функции mysql_close(). Функцииmysql_connect() и mysql_pconnect() возвращают идентификатор подключения, если все прошло успешно. Например:

$link = mysql_pconnect ();

if ( !$link ) die ("Невозможно подключение к MySQL");

После того, как соединение с сервером MySQL установлено, нужно выбрать базу данных. Для этого используется функция mysql_select_db(). Ее аргумент: имя базы данных. Функция возвращает true, если указанная база данных существует и доступ к ней возможен. Например:

$db = "sample";

mysql_select_db ( $db ) or die ("Невозможно открыть $db");

Для добавления, удаления, изменения и выбора данных нужно сконструировать и выполнить запрос SQL. Для этого в языке PHP существует функция mysql_query(). Ее аргумент: строка с запросом. Функция возвращает идентификатор запроса.

Пример 1

Добавление записи в таблицу

$db = "sample";

$link = mysql_pconnect ();

if ( !$link )

   die ("Невозможно подключение к MySQL");

mysql_select_db ( $db ) or die ("Невозможно открыть $db");

$query = "INSERT INTO books

          VALUES ('966-7393-80-1', 'Аллен Вайк',

          'PHP. Справочник', '213', '4')";

mysql_query ( $query );

mysql_close ( $link );

?>

При каждом выполнении примера 1 в таблицу будет добавляться новая запись, содержащая одни и те же данные. Разумеется имеет смысл добавлять в базу данные, введенные пользователем.

В примере 2.1 приведена HTML-форма для добавления новых книг в базу данных.

Пример 2.1

    HTML-форма добавления новых книг

   

       

       

       

       

       

       

   

ISBN
Автор
Название
Цена
Количество

Результаты заполнения этой формы передаются в insert_book.php.

Пример 2.2

    Программа добавления новых книг (файл insert_book.php)

if (!isset($_POST['isbn']) || !isset($_POST['author']) ||

    !isset($_POST['title']) || !isset($_POST['price']) ||

    !isset($_POST['quantity'])){

        die ("Не все данные введены.

                Пожалуйста, вернитесь назад и закончите ввод");

}

$isbn   = trim ( $_POST['isbn'] );

$author = trim ( $_POST['author'] );

$title  = trim ( $_POST['title'] ) ;

$isbn   = addslashes ( $isbn );

$author = addslashes ( $author );

$title  = addslashes ( $title ) ;

$db = "sample";

$link = mysql_connect();

if ( !$link ) die ("Невозможно подключение к MySQL");

mysql_select_db ( $db ) or die ("Невозможно открыть $db");

$query = "INSERT INTO books VALUES ('"

    .$isbn."', '".$author."', '".$title."', '"

    .floatval($_POST['price'])."', '".intval($_POST['quantity'])."')";

$result = mysql_query ( $query );

if ($result) echo "Книга добавлена в базу данных.";

mysql_close ( $link );

?>

В примере 2.2 введенные строковые данные обработаны функцией addslashes(). Эта функция добавляет обратные слеши перед одинарными кавычками ('), двойными кавычками ("), обратным слешем (\) и null-байтом. Дело в том, что по требованиям систаксиса запросов баз данных такие символы дожны заключаться в кавычки.

Для определения количества записей в результате запроса используется функция mysql_num_rows().

Все записи результата запроса можно просмотреть в цикле. Перед этим с помощью функцииmysql_fetch_[] для каждой записи получают ассоциативный массив.

В примере 3.1 приведена HTML-форма для поиска определенных книг в базе данных.

Пример 3.1

    HTML-форма поиска книг

    Ищем по:

   

    Что ищем:

   

Результаты заполнения этой формы передаются в search_book.php.

Пример 3.2

    Программа поиска книг (файл search_book.php)

$searchterm = trim ( $_POST['searchterm'] );

if (!$searchterm)

    die ("Не все данные введены.

    Пожалуйста, вернитесь назад и закончите ввод");

$searchterm = addslashes ($searchterm);

$link = mysql_pconnect ();

if ( !$link ) die ("Невозможно подключение к MySQL");

$db = "sample";

mysql_select_db ( $db ) or die ("Невозможно открыть $db");

$query = "SELECT * FROM books WHERE "

    .$_POST['searchtype']." like '%".$searchterm."%'";

$result = mysql_query ( $query );

$n = mysql_num_rows ( $result );

for ( $i=0; $i<$n; $i++ )

{

    $row = mysql_fetch_array($result);

    echo "

".($i+1). $row['title']. "
";

    echo "Автор: ".$row['author']."
";

    echo "ISBN: ".$row['ISBN']."
";

    echo "Цена: ".$row['price']."
";

    echo "Количество: ".$row['quantity']."

";

}

if ( $n == 0 ) echo "Ничего не можем предложить. Извините";

mysql_close ( $link );

?>

Альтернативный вариант

    Программа поиска книг (файл search_book.php)

$searchterm=trim ( $_POST['searchterm'] );

if (!$searchterm)

    die ("Не все данные введены.
Пожалуйста, вернитесь назад и закончите ввод");

$searchterm = addslashes ($searchterm);

mysql_connect() or  die ("Невозможно подключение к MySQL");

mysql_select_db ( "sample" ) or die ("Невозможно открыть  БД");

$result = mysql_query ( "SELECT * FROM books WHERE ".$_POST['searchtype']." like '%".$searchterm."%'" );

$i=1;

while($row = mysql_fetch_array($result))

{

   echo "

".($i++) . $row['title']."
";

   echo "Автор: ".$row['author']."
";

   echo "ISBN: ".$row['ISBN']."
";

   echo "Цена: ".$row['price']."
";

   echo "Количество: ".$row['quantity']."

";

}

if ( $i == 1 ) echo "Ничего не можем предложить. Извините";

mysql_close( );

?>

Итак, как работает архитектура Web-баз данных:

  1. Web-браузер пользователя выдает HTTP-запрос определенной Web-страницы. Например, пользователь, используя HTML-форму, ищет все книги о PHP. Страница обработки формы называется search_book.php.
  2. Web-сервер принимает запрос на search_book.php, извлекает этот файл и передает на обработку механизму PHP.
  3. PHP выполняет соединение с MySQL-сервером и отправляет запрос.
  4. Сервер принимает запрос к базе данных, обрабатывает его и отправляет результат (список книг) обратно механизму PHP.
  5. Механизм PHP завершает выполнение сценария, форматирует результат запроса в HTML. После этого результат в виде HTML возвращается Web-серверу.
  6. Web-сервер пересылает HTML в браузер, и пользователь имеет возможность просмотреть запрошенный список книг.

Использование механизма транзакций

Использование механизма транзакция на примере как передать деньги от одного человека другому

if(

    mysql_query ("BEGIN") &&

    mysql_query ("UPDATE money SET amt = amt - 6 WHERE name = 'Eve'") &&

    mysql_query ("UPDATE money SET amt = amt + 6 WHERE name = 'Ida'") &&

    mysql_query ("COMMIT")

){

    echo "Успешно";

}else{

    mysql_query ("ROLLBACK");

    echo "Не успешно";

}

SELECT … FOR UPDATE

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

Чтобы избежать вышеупомянутой ситуации необходимо выполнить не просто SELECT запрос, а его расширенную версию, о которой многие и не подозревают: SELECT … FOR UPDATE.

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

Однако не всё так просто. Вам нужно выполнить ещё несколько условий. Во-первых, ваша таблица должна быть создана на основе архитектуры InnoDB. В противном случае блокировка просто не будет срабатывать. Во-вторых, перед выполнением выборки необходимо отключить авто-коммит запроса. Т.е. другими словами автоматическое выполнение запроса. После того как вы укажите UPDATE запрос, необходимо будет ещё раз обратиться к базе и закоммитить изменения с помощью команды COMMIT:

mysql_query("SET autocommit = 0");

$result = mysql_query("SELECT * FROM table WHERE locked = 0 LIMIT 1 FOR UPDATE");

$row = mysql_fetch_assoc($result);

mysql_query("UPDATE table SET locked = 1 WHERE id = 1;");

mysql_query("COMMIT;");

Представьте что у нас есть 2 записи в таблице. Мы запускаем два параллельных скрипта с данным содержанием. В результате, первый процесс, который сможет достучаться до базы сделает выборку записи и сразу же заменит значение в поле locked на 1. В результате второй скрипт проигнорирует первую запись. В данном случае, даже если скрипты достучались бы до БД одновременно, второй скрипт всё равно не смог бы выбрать первую запись, т.к. при выборке первым процессом она будет заблокирована.


По теме: методические разработки, презентации и конспекты

Курсовая работа студентки Паучак А.В. - руководитель Лоншакова О.Н. на тему - Особенности социальной работы за рубежом, ее отличие от российской социальной работы

Курсовая работа  студентки  Паучак А.В. - руководитель Лоншакова О.Н. на тему - Особенности социальной работы за рубежом, ее отличие от российской социальной работы...

Презентация к курсовой работе студентки специальности 040401 Социальная работа Паучак А.В. , руководитель- Лоншакова О.Н. на тему- особенности социальной работы за рубежом, ее отличие от российской социальной работы

Презентация к курсовой работе студентки специальности 040401 " Социальная работа" Паучак А.В. , руководитель- Лоншакова О.Н. на тему-  особенности социальной работы за рубежом, ее отличие о...

Методические разработки открытых уроков: 1. Первые шаги юного музыканта в классе спец. фортепиано. 2. Работа над техникой в мл.кл. 3. Работа над худож.образом в муз.произв. кантиленного характера. 4.Осн. принципы работы над полифонией в ст.кл.

1. Первые шаги юного музыканта в классе специального фортепиано. 2. Работа над техникой в младших классах специального фортепиано.3. Работа над художественным образом в музыкальном произведении к...

Методическое пособие по выполнению лабораторной работы № 6 "Изучение работы программы по организации разделов жесткого диска - FDISK. Изучение работы программы логического форматирования жесткого диска - FORMAT" для МДК.02.02

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

Методическое пособие по выполнению лабораторной работы № 6 "Изучение работы программы по организации разделов жесткого диска - FDISK. Изучение работы программы логического форматирования жесткого диска - FORMAT" для МДК.02.02

Методическое пособие создано для реализации основной профессиональной образовательной программы в соответствии с ФГОС по специальности СПО 230113 Компьютерные системы и комплексы (базовой подгото...

Методические указания по выполнению практических работ и организации самостоятельной работы по профессиональному модулю «Выполнение работ по рабочей профессии «Кассир» для студентов СПО специальности38.02.01Экономика и бухгалтерский учет (по отраслям)

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