Translate

Поиск по этому блогу

Показаны сообщения с ярлыком MySQL. Показать все сообщения
Показаны сообщения с ярлыком MySQL. Показать все сообщения

вторник, 8 августа 2017 г.

Создание Базы Данных на OpenServer

При изучении PHP по книгам и руководствам часто возникают проблемы с созданием базы данных (далее - БД) при работе с OpenSrver. Я решил рассмотреть этот вопрос по шагам. И так, приступаем!
  1. Открываем КС - командную строку и переходим в директорию БД OpenServer
    cd C:\OpenServer\modules\database\MariaDB-5.5\bin
    Соединяемся с БД - mysql -u root
    Получаем подтверждение об установленном соединении или повторяем все с начала.

  2. Для просмотра уже существующих БД набираем SHOW DATABASES;

  3. Для работы и перехода к существующей БД - набираемuse name_database;name_database - имя уже существующей БД.ИЛИ создаем новую БД с помощью команды CREATE DATABASE name_database;
    набираемuse name_database; для работы с вновь созданной базой данных

  4. Создаем таблицу в нашей БД, следующей командой:
    CREATE TABLE `aliens_abduction` (
    `first_name` VARCHAR(30) ,
    `last_name` VARCHAR(30) ,
    `whеп_it_hаррепеd` varchar(30) ,
    `hоw_lопg` VARCHAR(30) ,
    `how_many` VARCHAR(30) ,
    `alien_description` VARCHAR(lOO) ,
    `what_they_did` VARCHAR(lOO) ,
    `fang_spotted` VARCHAR(lO) ,
    `other` VARCHAR(lOO) ,
    `email` VАRСНАR(50)
    ) ;
    При наборе использовал Гравис - одинарная кавычка (буква Ё в англ раскладке)

  5. Для того, чтобы добавить данные в новую таблицу:
    INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, how_many, alien_description, what_they_did, fang_spotted, other, email)
    VALUES ('Салли', 'Джонс', '3 дня назад', '1 день' ,'четыре', 'зеленые с шестью щупальцами', 'мы просто разговаривали и играли с со6акой' , ' да', ' возможно, я видела вашу собаку, свяжитесь со мной','sally@mail.com');

  6. Для того, чтобы посмотреть все данные в таблице набираем:
    SELECT * FROM aliens_abduction



Теперь нам осталось сделать так, чтобы данные в таблицу добавлялись автоматически рнр-сценарием


  1. На OpenServer в папке domains у нас есть папка с нашим сайтом mysite. Внутри нее есть два файла report.html и report.php.

    report.html


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Aliens Abducted Me - Report an Abduction</title>
      <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
      <h2>Aliens Abducted Me - Report an Abduction</h2>
    
      <p>Share your story of alien abduction:</p>
      <form method="post" action="report.php">
        <label for="firstname">First name:</label>
        <input type="text" name="firstname" /><br />
        <label for="lastname">Last name:</label>
        <input type="text" name="lastname" /><br />
        <label for="email">What is your email address?</label>
        <input type="text" name="email" /><br />
        <label for="whenithappened">When did it happen?</label>
        <input type="text" name="whenithappened" /><br />
        <label for="howlong">How long were you gone?</label>
        <input type="text" name="howlong" /><br />
        <label for="howmany">How many did you see?</label>
        <input type="text" name="howmany" /><br />
        <label for="aliendescription">Describe them:</label>
        <input type="text" name="aliendescription" size="32" /><br />
        <label for="whattheydid">What did they do to you?</label>
        <input type="text" name="whattheydid" size="32" /><br />
        <label for="fangspotted">Have you seen my dog Fang?</label>
        Yes <input name="fangspotted" type="radio" value="yes" />
        No <input name="fangspotted" type="radio" value="no" /><br />
        <img src="fang.jpg" width="100" height="175"
          alt="My abducted dog Fang." /><br />
        <label for="other">Anything else you want to add?</label>
        <textarea name="other"></textarea><br />
        <input type="submit" value="Report Abduction" name="submit" />
      </form>
    </body>
    </html>
    
    


    report.php


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Aliens Abducted Me - Report an Abduction</title>
    </head>
    <body>
      <h2>Aliens Abducted Me - Report an Abduction</h2>
    
    <?php
      $first_name = $_POST['firstname'];
      $last_name = $_POST['lastname'];
      $when_it_happened = $_POST['whenithappened'];
      $how_long = $_POST['howlong'];
      $how_many = $_POST['howmany'];
      $alien_description = $_POST['aliendescription'];
      $what_they_did = $_POST['whattheydid'];
      $fang_spotted = $_POST['fangspotted'];
      $email = $_POST['email'];
      $other = $_POST['other'];
    
      $dbc = mysqli_connect('localhost', 'root', '', 'aliendatabase')
        or die('Error connecting to MySQL server.');
    
      $query = "INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, " .
        "how_many, alien_description, what_they_did, fang_spotted, other, email) " .
        "VALUES ('$first_name', '$last_name', '$when_it_happened', '$how_long', '$how_many', " .
        "'$alien_description', '$what_they_did', '$fang_spotted', '$other', '$email')";
    
      $result = mysqli_query($dbc, $query)
        or die('Error querying database.');
    
      mysqli_close($dbc);
    
      echo 'Thanks for submitting the form.<br />';
      echo 'You were abducted ' . $when_it_happened;
      echo ' and were gone for ' . $how_long . '<br />';
      echo 'Number of aliens: ' . $how_many . '<br />';
      echo 'Describe them: ' . $alien_description . '<br />';
      echo 'The aliens did this: ' . $what_they_did . '<br />';
      echo 'Was Fang there? ' . $fang_spotted . '<br />';
      echo 'Other comments: ' . $other . '<br />';
      echo 'Your email address is ' . $email;
    ?>
    
    </body>
    </html>
    
    

  2. Для соединения с уже созданной базой данных мы создали переменную с запросом:
    $dbc = mysqli_connect('localhost', 'root', '', 'aliendatabase') or die('Error connecting to MySQL server.');
    Первый параметр -localhost остается без изменений, затем идет имя пользователя (в моем случае - root), пароля нет - '' и имя БД - aliendatabase

  3. В следующей перменной мы поместили все действия с данными (куда попадет тот или иной параметр введенный пользователем)
    $query = "INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, " . "how_many, alien_description, what_they_did, fang_spotted, other, email) " . "VALUES ('$first_name', '$last_name', '$when_it_happened', '$how_long', '$how_many', " . "'$alien_description', '$what_they_did', '$fang_spotted', '$other', '$email')";
  4. Запрос к БД - $result = mysqli_query($dbc, $query) or die('Error querying database.');

  5. РНР-функция die () прерывает ход выполнения сценария и выводит сообщение о коде, который выполнить не удалось. Хотя это и не раскрывает всех причин неудачи в подробностях, функция die () все же сообщает нам: что-то случилось и необходимо принимать меры по решению проблемы. Если что-то не так с одним из четырех аргументов, необходимых для соединения функции mysqli_connect ( ) , или сервер баз данных не может быть найден, функция die () останавливает ход выполнения сценария и выводит сообщение об ошибке, которое передается ей в качестве аргумента в скобках.

  6. Функции mysqli_query () необходимо передать в качестве аргумента SQL-запрос в виде РНР-строки (значения переменной $query), для того чтобы произвести добавление данных о похищении космическими пришельцами.

  7. После всего закрываем БД - mysqli_close($dbc);

Более подробно о работе с базой данных смотрите мой пост —Введение в MySQL
                                                                                                                                                             

воскресенье, 28 мая 2017 г.

Введение в MySQL

Работать с MySQL можно тремя основными способами: используя командную строку, применяя веб-интерфейс наподобие phpMyAdmin и задействуя такой язык программирования, как PHP.


Более подробно о работе с базой данных смотрите мой пост —Создание Базы Данных на OpenServer

Начало работы с интерфейсом командной строки


Далее все только для пользователей Windows

Чтобы войти в интерфейс командной строки MySQL, следует выбрать команду Пуск-> Выполнить и в окне запуска ввести команду CMD, после чего нажать клавишу  Enter. В результате будет вызвано командное окно Windows. Находясь в этом окне, нужно ввести следующую команду (внося в нее соответствующие коррективы):

"C:\Program Files\Zend\MySQL55\bin\mysql" -u root
"C:\Program Files (x86)\Zend\MySQL55\bin\mysql" -u root

У меня для доступа к DB OpenServer было, например так:


Эта команда предписывает MySQL зарегистрировать вас как пользователя root без пароля. Теперь вы должны оказаться в среде MySQL и сможете приступить к вводу команд. Чтобы убедиться в том, что все работает должным образом, введи- те следующую команду, результат выполнения которой должен быть похож на показанный на картинку выше:
SHOW databases;
Я подключался к уже существующей базе, но у вас не должно быть трудностей, если вы пользуетесь OpenServer или Zend Server Free Edition WAMP

Отмена команды


Если, набрав часть команды, вы решили, что ее вообще не следует выполнять, то ни в коем случае не пользуйтесь сочетанием  Ctr+C ! Оно закроет программу. Вместо нее можно ввести символы \c и нажать клавишу  Enter. Порядок использования этой пары символов показан в примере

 Отмена ввода строки
бессмысленная для mysql строка \c

Ниже привел неполный список часто встречающихся команд:
Команды MySQL




Создание базы данных


Для создания новой базы данных по имени publications:
CREATE DATABASE publications;

При успешном выполнении команды будет выведено сообщение, пока не имеющее для нас особого смысла, — Query OK, 1 row affected (0.38 sec) (Запрос выполнен, обработана 1 строка за 0,38 с), но вскоре все станет на свои места. После создания базы данных с ней нужно будет работать, поэтому даем следующую команду:

USE publications;

Теперь должно быть выведено сообщение об изменении текущей базы данных (Database changed), и после этого база будет готова к продолжению работы со сле дующими примерами.

Организация доступа пользователей


Cоздадим пользователя, который получит доступ только к новой базе данных publications и ко всем ее объектам, и введем для этого следующую команду (заменив в ней имя пользователя jim и пароль mypasswd выбранными вами именем и паролем):

GRANT ALL ON publications.* TO 'jim'@'localhost'
 IDENTIFIED BY 'mypasswd';


Эта команда предоставляет пользователю jim@localhost полный доступ к базе данных publications при использовании пароля mypasswd. Работоспособность этой установки можно проверить, если ввести команду quit для выхода из системы, а затем перезапустить MySQL, воспользовавшись прежним способом запуска, но вместо -u root -p набрав -u jim -p или применив в этой строке созданное вами имя пользователя.

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


В данный момент вы должны находиться в системе MySQL, обладать всеми (ALL) правами. Осталось включить базу данных в работу, набрав следующую команду (и заменив publications именем своей базы данных, если оно у нее другое):


USE publications;


Теперь набираем построчно команды:
CREATE TABLE classics (
 author VARCHAR(128),
 title VARCHAR(128),
 type VARCHAR(16),
 year CHAR(4)) ENGINE MyISAM;


Чтобы проверить факт создания новой таблицы, наберите команду: DESCRIBE classics;

Данные будут отображаться в виде таблицы.

Я не буду останавливаться на типах данных. О них много написано и вы всегда можете посмотреть их в справочниках или книгах. Замечу, что использование типов данных будет влиять на производительность и возможности поиска. Поэтому, лучше все спланировать заранее.
Остановлюсь только на очень важном - AUTO_INCREMENT

Тип данных AUTO_INCREMENT


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

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

Можно добавлять новый столбец по имени id к таблице classics и придавать ему свойства автоприращения.
Добавление столбца id с автоприращением

ALTER TABLE classics ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT KEY;

В нашем примере добавляется столбец по имени id, имеющий следующие характеристики.
 INT UNSIGNED — делает столбец способным принять целое число, достаточно большое для того, чтобы в таблице могло храниться более 4 млрд записей.
    
  • NOT NULL — обеспечивает наличие значения в каждой записи столбца. Многие программисты используют его в поле NULL, чтобы показать отсутствие в нем какого-либо значения. Но тогда могут появляться дубликаты, противоречащие самому смыслу существования этого столбца. Поэтому появление в нем значения NULL запрещено.
  • 
  • AUTO_INCREMENT — заставляет MySQL установить для этого столбца уникальное значение в каждой строке, как было описано ранее. Фактически мы не управляем значением, которое будет появляться в каждой строке этого столбца, но это и не нужно: все, о чем мы беспокоимся, — гарантия уникальности этого значения.
  • 
  • KEY — столбец с автоприращением полезно использовать в качестве ключа, поскольку вы будете стремиться искать строки на основе значений этого столбца.
Теперь каждая запись будет иметь уникальное число в столбце id, для первой записи это будет начальное число 1, а счет других записей будет вестись по нарастающей. Как только будет вставлена новая строка, в ее столбец id будет автоматически записано следующее по порядку число.

Этот столбец можно не добавлять после создания таблицы, а сразу включить в нее, слегка изменив формат команды CREATE

CREATE TABLE classics (
 author VARCHAR(128),
 title VARCHAR(128),
 type VARCHAR(16),
 year CHAR(4),
 id INT UNSIGNED NOT NULL AUTO_INCREMENT KEY) ENGINE MyISAM;


Если хочется проверить, был ли добавлен столбец, нужно посмотреть имеющиеся в таблице столбцы и типы данных, воспользовавшись следующей командой:
DESCRIBE classics;

Для удаление столбца id:

ALTER TABLE classics DROP id;

Добавление данных к таблице


Многократно используя одну и ту же форму команды INSERT.
Заполнение таблицы classics
INSERT INTO classics(author, title, type, year)
 VALUES('Mark Twain','The Adventures of Tom Sawyer','Fiction','1876');
INSERT INTO classics(author, title, type, year)
 VALUES('Jane Austen','Pride and Prejudice','Fiction','1811');
INSERT INTO classics(author, title, type, year)
 VALUES('Charles Darwin','The Origin of Species','Non-Fiction','1856');
INSERT INTO classics(author, title, type, year)
 VALUES('Charles Dickens','The Old Curiosity Shop','Fiction','1841');
INSERT INTO classics(author, title, type, year)
 VALUES('William Shakespeare','Romeo and Juliet','Play','1594');


После каждой второй строки вы должны увидеть сообщение об успешной обработке запроса — Query OK. Как только будут введены все строки, наберите следующую команду, которая отобразит содержимое таблицы:

SELECT * FROM classics;
Результат должен быть похож на этот:


Переименование таблиц


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

ALTER TABLE classics RENAME pre1900;

Для того, чтобы вернуть таблице ее прежнее имя, нужно будет ввести следующую команду:

ALTER TABLE pre1900 RENAME classics;

Изменение типа данных столбца


Для изменения типа данных столбца также используется команда ALTER, но в этом случае вместе с ней применяется ключевое слово MODIFY. Поэтому для изменения типа данных столбца year с CHAR(4) на SMALLINT (для которого потребуется только 2 байта памяти, что способствует экономии дискового пространства) нужно ввести следующую команду:

ALTER TABLE classics MODIFY year SMALLINT;

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

Добавление нового столбца


Предположим, что таблица создана и заполнена большим объемом данных и тут выяснилось, что нужен еще один столбец. Не стоит расстраиваться. Посмотрите, как можно добавить к таблице новый столбец pages, который будет использоваться для хранения количества страниц, имеющихся в книге:
ALTER TABLE classics ADD pages SMALLINT UNSIGNED;
Эта команда добавляет новый столбец по имени pages, в котором используется тип данных UNSIGNED SMALLINT, подходящий для хранения значений вплоть до 65 535. Этого наверняка более чем достаточно для любой когда-либо изданной книги!
И если запросить у MySQL описание обновленной таблицы, воспользовавшись показанной далее командой DESCRIBE, то можно будет увидеть внесенные в нее изменения:
DESCRIBE classics;




Переименование столбца


Посмотрев еще раз на рис. 8.5, можно заметить, что наличие в таблице столбца type может привести к путанице, поскольку такое же имя используется MySQL для идентификации типа данных. Но это не проблема — изменим имя этого столбца на category:

ALTER TABLE classics CHANGE type category VARCHAR(16);

Обратите внимание на добавление VARCHAR(16) в конце этой команды. Это связано с тем, что ключевое слово CHANGE требует указания типа данных даже в том случае, если вы не собираетесь его изменять, и VARCHAR(16) — тот самый тип данных, который был указан при создании столбца type.

Удаление столбца


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

ALTER TABLE classics DROP pages;


Удаление таблицы


Удалить таблицу очень просто. Достаточно ввести такой код:
DROP TABLE имя таблицы;

Для тренировки, вы можете создать новую таблицу, посмотреть ее и удалить следующей последовательностью строк кода в КС:

CREATE TABLE disposable(trash INT);
DESCRIBE disposable;
DROP TABLE disposable;
SHOW tables;


Индексы

По мере роста таблицы, поиск в базе данных будет все более затрудняться. Для этого есть смысл создать "картотеку".

Создание индекса


Добавление индексов к таблице classics
ALTER TABLE classics ADD INDEX(author(20));
ALTER TABLE classics ADD INDEX(title(20));
ALTER TABLE classics ADD INDEX(category(4));
ALTER TABLE classics ADD INDEX(year);
DESCRIBE classics;


Использование команды CREATE INDEX


Индекс можно добавить не только командой ALTER TABLE, но и командой CREATE INDEX.
Эти две команды являются равнозначными, за исключением того, что CREATE INDEX не может использоваться для создания индекса типа первичного ключа — PRIMARY KEY
Эти две команды эквивалентны
ALTER TABLE classics ADD INDEX(author(20));
CREATE INDEX author ON classics (author(20));

Добавление индексов при создании таблиц


Чтобы добавить индекс, не нужно выжидать какое-то время после создания таблицы. Это может отнять много времени, поскольку добавление индекса к большой таблице — длительный процесс. Поэтому рассмотрим команду, создающую таблицу classics с уже имеющимися индексами.

Создание таблицы classics с индексами
CREATE TABLE classics (
 author VARCHAR(128),
 title VARCHAR(128),
 category VARCHAR(16),
 year SMALLINT,
 INDEX(author(20)),
 INDEX(title(20)),
 INDEX(category(4)),
 INDEX(year)) ENGINE MyISAM;


Первичные ключи


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

Заполнение столбца isbn данными и использование первичного ключа
ALTER TABLE classics ADD isbn CHAR(13);
UPDATE classics SET isbn='9781598184891' WHERE year='1876';
UPDATE classics SET isbn='9780582506206' WHERE year='1811';
UPDATE classics SET isbn='9780517123201' WHERE year='1856';
UPDATE classics SET isbn='9780099533474' WHERE year='1841';
UPDATE classics SET isbn='9780192814968' WHERE year='1594';
ALTER TABLE classics ADD PRIMARY KEY(isbn);
DESCRIBE classics;




Чтобы создать первичный ключ при создании таблицы classics, можно воспользоваться командой И в этом случае, если вы хотите испробовать эту команду в работе, нужно заменить имя classics в строке 1 каким-нибудь другим, а затем удалить проверочную таблицу.
Создание таблицы classics с первичным ключом
CREATE TABLE classics (
 author VARCHAR(128),
 title VARCHAR(128),
 category VARCHAR(16),
 year SMALLINT,
 isbn CHAR(13),
 INDEX(author(20)),
 INDEX(title(20)),
 INDEX(category(4)),
 INDEX(year),
 PRIMARY KEY (isbn)) ENGINE MyISAM;


Создание индекса FULLTEXT


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

Рассмотрим некоторые особенности индексов FULLTEXT, о которых нужно знать.
    
  • Индексы FULLTEXT могут применяться только с таблицами типа MyISAM, использующими исходное ядро (механизм хранения) MySQL (MySQL поддерживает как минимум десять различных ядер). Если нужно привести таблицу к типу MyISAM, можно применить команду MySQL:
    ALTER TABLE tablename ENGINE = MyISAM;
  • 
  • Индексы FULLTEXT могут создаваться только для столбцов с типами данных CHAR, VARCHAR и TEXT.
  • 
  • Определение индекса FULLTEXT может быть дано в инструкции CREATE TABLE при создании таблицы или добавлено позже с использованием инструкции ALTER TABLE (или CREATE INDEX).
  • 
  • Намного быстрее будет загрузить большие наборы данных в таблицу, не имеющую индекса FULLTEXT, а затем создать индекс, чем загружать их в таблицу, у которой уже имеется индекс FULLTEXT.
Чтобы создать индекс FULLTEXT, примените его к одной или нескольким записям, в котором индекс FULLTEXT добавляется к двум столбцам — author и title, принадлежащим таблице classics (этот индекс является дополнением к тем, что уже были созданы, и не влияет на их работу).

Добавление индекса FULLTEXT к таблице classics
ALTER TABLE classics ADD FULLTEXT(author,title);
Теперь в этой паре столбцов можно вести поиск с использованием индекса FULLTEXT. Такая возможность могла бы проявиться в полную силу, если бы вы могли теперь ввести весь текст этих книг в базу данных (учитывая, что они не защищены авторскими правами), тогда они были бы полностью доступны для поиска.

Создание запросов к базе данных MySQL


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

SELECT


Oсновной синтаксис имеет следующий вид:
SELECT что-нибудь FROM имя_таблицы;

Этим что-нибудь, как вы уже видели, может быть символ звездочки (*), означающий «каждый столбец», вместо него можно указать какие-нибудь конкретные столбцы. В примере 8.16 показано, как выбрать только автора и название (author и title) и только название и ISBN.
Две разные инструкции SELECT
SELECT author,title FROM classics;
SELECT title,isbn FROM classics;


SELECT COUNT


Другой заменой параметра что-нибудь является функция COUNT, которая может быть использована множеством способов. В примере 8.17 она отображает количество строк в таблице за счет передачи ей в качестве параметра символа звездочки (*), означающего «все строки». В соответствии с вашими ожиданиями будет возвращено число 5, поскольку в таблицу внесены сведения о пяти книгах.

Подсчет количества строк
SELECT COUNT(*) FROM classics;

SELECT DISTINCT


Этот спецификатор (и его синоним DISTINCTROW) позволяет исключать множество записей, имеющих одинаковые данные.Например авторов.

Давайте создадим запись с таким же автором, а потом отсортируем

Дублирование данных
INSERT INTO classics(author, title, category, year, isbn)
 VALUES('Charles Dickens','Little Dorrit','Fiction','1857','9780141439969');


Команда SELECT со спецификатором DISTINCT и без него
SELECT author FROM classics;
SELECT DISTINCT author FROM classics;


DELETE


Когда нужно удалить строку из таблицы, применяется команда DELETE. Ее синтаксис похож на синтаксис команды SELECT, он позволяет сузить диапазон удаляемой информации до конкретной строки или строк путем использования таких спецификаторов, как WHERE и LIMIT.
Теперь, если вы вводили команду, и изучали работу спецификатора DISTINCT, нужно удалить Little Dorrit путем ввода команды,

Удаление новой записи
DELETE FROM classics WHERE title='Little Dorrit';


WHERE


Ключевое слово WHERE позволяет сузить диапазон действия запроса, возвращая толь- ко те данные, в отношении которых конкретное выражение возвращает истинное значение.

Использование ключевого слова WHERE
SELECT author,title FROM classics WHERE author="Mark Twain";
SELECT author,title FROM classics WHERE isbn="9781598184891 ";


При проведении поисковых операций можно также осуществлять проверку на соответствие шаблону, для чего применяется спецификатор LIKE, позволяющий вести поиск в разных частях строк. Этот спецификатор должен использоваться с символом % до или после некоторого текста. Если его поместить до текста, это будет означать «что-нибудь до», а если после текста — «что-нибудь после».

Использование спецификатора LIKE
SELECT author,title FROM classics WHERE author LIKE "Charles%";
SELECT author,title FROM classics WHERE title LIKE "%Species";
SELECT author,title FROM classics WHERE title LIKE "%and%";


Символ % будет также соответствовать пустому месту в той позиции, которую он занимает. Иными словами, он может соответствовать пустой строке.

LIMIT


Ограничение диапазона выводимых строк
Спецификатор LIMIT позволяет выбрать количество выводимых в запросе строк и место, с которого таблица начнет их возвращать. Когда передается один параметр, он указывает MySQL начать действие спецификатора с верхней части результатов и вернуть только то количество строк, которое задано этим параметром. Если передать спецификатору два параметра, то первый укажет смещение относительно начала результатов, которое MySQL должна учесть при их отображении, а второй укажет, сколько строк нужно вывести. Можно представить, что первый параметр сообщает: «Нужно пропустить это количество результатов, ведя счет сверху».

Ограничение количества возвращаемых результатов
SELECT author,title FROM classics LIMIT 3;
SELECT author,title FROM classics LIMIT 1,2;
SELECT author,title FROM classics LIMIT 3,1;


MATCH...AGAINST


Конструкция MATCH...AGAINST может быть применена к столбцу, для которого был создан индекс FULLTEXT (см. выше пункт «Создание индекса FULLTEXT»). Используя эту конструкцию, можно вести поиск, применяя в качестве критерия элементы обычного языка, как при работе с поисковыми механизмами Интернета. В отличие от конструкций WHERE...= или WHERE...LIKE, конструкция MATCH...AGAINST позволяет вводить в поисковый запрос несколько слов и проверять на их наличие все слова в столбцах, имеющих индекс FULLTEXT. Индексы FULLTEXT нечувствительны к регистру букв, поэтому неважно, какой именно регистр используется в ваших запросах.

Использование конструкции MATCH...AGAINST с индексами FULLTEXT
SELECT author,title FROM classics
 WHERE MATCH(author,title) AGAINST('and');
SELECT author,title FROM classics
 WHERE MATCH(author,title) AGAINST('old shop');
SELECT author,title FROM classics
 WHERE MATCH(author,title) AGAINST('tom sawyer');


MATCH...AGAINST...IN BOOLEAN MODE


При желании придать своим запросам с конструкцией MATCH...AGAINST более широкие возможности нужно воспользоваться булевым режимом. Это изменение выражается в том, что стандартный запрос по индексу FULLTEXT ведет поиск любой комбинации искомых слов, не требуя наличия всех этих слов в тексте. Наличие отдельного слова в столбце приводит к тому, что поисковая операция возвращает строку. Булев режим позволяет также ставить впереди искомых слов знак + или, чтобы показать, что они должны быть включены или исключены. Если обычный булев режим требует «искать присутствие любого из этих слов», то знак «плюс» означает, что «это слово обязательно должно присутствовать, иначе строку возвращать не нужно». Знак «минус» означает, что «этого слова быть не должно, а если оно присутствует, то строку возвращать не нужно».

Использование MATCH...AGAINST...IN BOOLEAN MODE
SELECT author,title FROM classics
 WHERE MATCH(author,title)
 AGAINST('+charles -species' IN BOOLEAN MODE);
SELECT author,title FROM classics
 WHERE MATCH(author,title)
 AGAINST('"origin of"' IN BOOLEAN MODE);


Как, наверное, и ожидалось, первый запрос вернет только запись о книге The Old Curiosity Shop Чарльза Диккенса. Запись о книге Чарльза Дарвина игнорируется, поскольку из результата должна быть исключена любая строка, содержащая слово species.

UPDATE...SET


Эта конструкция позволяет обновлять содержимое поля. Если нужно изменить содержимое одного или нескольких полей, сначала следует сузить область действия запроса до того поля или полей, которые будут подвергаться изменениям, практически тем же способом, который применялся в команде SELECT. Использование UPDATE...SET
UPDATE classics SET author='Mark Twain (Samuel Langhorne Clemens)'
 WHERE author='Mark Twain';
UPDATE classics SET category='Classic Fiction'
 WHERE category='Fiction';


В первом запросе, действие которого затрагивает только одну строку, к литературному псевдониму Mark Twain добавляется настоящее имя писателя — Samuel Langhorne Clemens, заключенное в скобки. А вот второй запрос воздействует на три столбца, поскольку он заменяет все появления слова Fiction в столбце category термином Classic Fiction.

ORDER BY


Спецификатор ORDER BY позволяет отсортировать возвращаемые результаты по одному или нескольким столбцам в возрастающем или в убывающем порядке.

Использование ORDER BY
SELECT author,title FROM classics ORDER BY author;
SELECT author,title FROM classics ORDER BY title DESC;


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

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

SELECT author,title,year FROM classics ORDER BY author,year DESC;


Можно также указать порядок сор- тировки этого столбца по возрастанию и в явном виде, в результате будут получены аналогичные результаты:

SELECT author,title,year FROM classics ORDER BY author ASC,year DESC;


GROUP BY


Точно так же, как и при использовании ORDER BY, можно сгруппировать результаты, возвращаемые запросом, с помощью спецификатора GROUP BY, который больше всего подходит для извлечения информации о группе данных. Например, если нужно узнать, сколько изданий каждой категории присутствует в таблице classics, можно ввести запрос

SELECT category,COUNT(author) FROM classics GROUP BY category;


Объединение таблиц


Управление несколькими таблицами, содержащими различные виды информации в одной базе данных, считается вполне обычным делом. Рассмотрим, к при- меру, таблицу клиентов — customers, для которой нужно обеспечить возможность использования перекрестных ссылок с приобретенными ими книгами из таблицы classics. Чтобы создать эту новую таблицу и поместить в нее информацию о трех клиентах и их покупках, введите команды :

Создание и заполнение таблицы customers
CREATE TABLE customers (
 name VARCHAR(128),
 isbn VARCHAR(13),
 PRIMARY KEY (isbn)) ENGINE MyISAM;
Глава 8. Введение в MySQL
225
INSERT INTO customers(name,isbn)
 VALUES('Joe Bloggs','9780099533474');
INSERT INTO customers(name,isbn)
 VALUES('Mary Smith','9780582506206');
INSERT INTO customers(name,isbn)
 VALUES('Jack Wilson','9780517123201');
SELECT * FROM customers;




Разумеется, в настоящей таблице, содержащей сведения о покупателях, будут присутствовать также адреса, номера телефонов, адреса электронной почты и т. д., но на данном этапе изучения они для нас не представляют интереса. При создании новой таблицы следует обратить внимание на то, что у нее есть кое-что общее с таблицей classics: столбец под названием isbn. Поскольку его предназначение в обеих таблицах совпадает (ISBN всегда является ссылкой на одну и ту же книгу), этот столбец можно использовать для связывания двух таблиц вместе в едином запросе.
Объединение двух таблиц в одном запросе SELECT
SELECT name,author,title from customers,classics
 WHERE customers.isbn=classics.isbn;




Видите, как этот запрос искусно связал вместе обе таблицы, чтобы продемонстрировать книги из таблицы classics, приобретенные покупателями из таблицы customers?

NATURAL JOIN


Используя NATURAL JOIN, можно сократить количество вводимого текста и сделать запросы немного более понятными. В этом виде объединения участвуют две таблицы, в которых автоматически объединяются столбцы с одинаковыми именами. Для получения тех же результатов, можно ввести следующий запрос:
SELECT name,author,title FROM customers NATURAL JOIN classics;

JOIN...ON


Если нужно указать столбец, по которому следует объединить две таблицы, используется конструкция JOIN...ON, благодаря которой можно получить те же результаты:
SELECT name,author,title FROM customers
 JOIN classics ON customers.isbn=classics.isbn;


Использование ключевого слова AS


Можно сократить количество вводимого текста и улучшить читаемость запроса за счет создания псевдонимов с помощью ключевого слова AS. После имени таблицы нужно поставить AS, а затем используемый псевдоним. Следующий код идентичен по своей работе коду, приведенному выше:
SELECT name,author,title from
 customers AS cust, classics AS class WHERE cust.isbn=class.isbn;


Использование логических операторов


Для дальнейшего сужения пространства выбора в запросах MySQL, использующих ключевое слово WHERE, можно также задействовать логические операторы AND, OR и NOT. В примере ниже, показаны варианты применения каждого из них, но их можно использовать в любых сочетаниях.

Использование логических операторов
SELECT author,title FROM classics WHERE
 author LIKE "Charles%" AND author LIKE "%Darwin";
SELECT author,title FROM classics WHERE
 author LIKE "%Mark Twain%" OR author LIKE "%Samuel Langhorne Clemens%";
SELECT author,title FROM classics WHERE
 author LIKE "Charles%" AND author NOT LIKE "%Darwin";


Первый запрос выбран потому, что Чарльз Дарвин может фигурировать в некоторых строках под своим полным именем — Чарльз Роберт Дарвин. А запрос возвращает сведения о книгах, для которых значение столбца author начинается с Charles и заканчивается Darwin. Второй запрос ищет книги, принадлежащие перу Марка Твена, используя для этого либо литературный псевдоним — Mark Twain, либо настоящее имя писателя — Samuel Langhorne Clemens. Третий запрос возвращает книги с авторами, чье имя Charles, а фамилия не Darwin.

Функции MySQL


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

                                                                                                                                                             

Шпаргалки для программистов

Несколько сборников полезных шпаргалок:
                                                                                                                                                             


Хотите освоить самые современные методы написания React приложений? Надоели простые проекты? Нужны курсы, книги, руководства, индивидуальные занятия по React и не только? Хотите стать разработчиком полного цикла, освоить стек MERN, или вы только начинаете свой путь в программировании, и не знаете с чего начать, то пишите через форму связи, подписывайтесь на мой канал в Телеге, вступайте в группу на Facebook.Пишите мне - kolesnikovy70 почта gmail.com