Учебники

MySQLi — Краткое руководство

MySQLi — Введение

База данных — это отдельное приложение, которое хранит коллекцию данных. Каждая база данных имеет один или несколько отдельных API для создания, доступа, управления, поиска и репликации данных, которые она хранит.

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

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

Реляционная система управления базами данных (RDBMS) — это программное обеспечение, которое —

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

  • Гарантирует ссылочную целостность между рядами различных таблиц.

  • Обновляет индексы автоматически.

  • Интерпретирует SQL-запрос и объединяет информацию из различных таблиц.

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

Гарантирует ссылочную целостность между рядами различных таблиц.

Обновляет индексы автоматически.

Интерпретирует SQL-запрос и объединяет информацию из различных таблиц.

СУРБД Терминология

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

  • База данных. База данных — это набор таблиц со связанными данными.

  • Таблица — Таблица представляет собой матрицу с данными. Таблица в базе данных выглядит как простая электронная таблица.

  • Столбец — один столбец (элемент данных) содержит данные одного и того же вида, например, почтовый индекс столбца.

  • Строка. Строка (= кортеж, запись или запись) представляет собой группу связанных данных, например, данных одной подписки.

  • Избыточность — Двойное хранение данных с избыточностью для ускорения работы системы.

  • Первичный ключ — первичный ключ уникален. Значение ключа не может встречаться дважды в одной таблице. С помощью ключа вы можете найти не более одного ряда.

  • Внешний ключ — внешний ключ — это связующий вывод между двумя таблицами.

  • Составной ключ — составной ключ (составной ключ) — это ключ, состоящий из нескольких столбцов, поскольку один столбец недостаточно уникален.

  • Индекс — Индекс в базе данных напоминает индекс в конце книги.

  • Ссылочная целостность — Ссылочная целостность гарантирует, что значение внешнего ключа всегда указывает на существующую строку.

База данных. База данных — это набор таблиц со связанными данными.

Таблица — Таблица представляет собой матрицу с данными. Таблица в базе данных выглядит как простая электронная таблица.

Столбец — один столбец (элемент данных) содержит данные одного и того же вида, например, почтовый индекс столбца.

Строка. Строка (= кортеж, запись или запись) представляет собой группу связанных данных, например, данных одной подписки.

Избыточность — Двойное хранение данных с избыточностью для ускорения работы системы.

Первичный ключ — первичный ключ уникален. Значение ключа не может встречаться дважды в одной таблице. С помощью ключа вы можете найти не более одного ряда.

Внешний ключ — внешний ключ — это связующий вывод между двумя таблицами.

Составной ключ — составной ключ (составной ключ) — это ключ, состоящий из нескольких столбцов, поскольку один столбец недостаточно уникален.

Индекс — Индекс в базе данных напоминает индекс в конце книги.

Ссылочная целостность — Ссылочная целостность гарантирует, что значение внешнего ключа всегда указывает на существующую строку.

База данных MySQLi

MySQLi — это быстрая и простая в использовании СУБД, используемая для многих малых и крупных предприятий. Расширение MySQLi разрабатывается, продается и поддерживается MySQL. MySQL становится настолько популярным по многим веским причинам —

  • MySQLi выпускается по лицензии с открытым исходным кодом. Таким образом, вам нечего платить, чтобы использовать его.

  • MySQLi — очень мощная программа сама по себе. Он обрабатывает большой набор функций самых дорогих и мощных пакетов баз данных.

  • MySQLi использует стандартную форму известного языка данных SQL.

  • MySQLi работает во многих операционных системах и на многих языках, включая PHP, PERL, C, C ++, JAVA и т. Д.

  • MySQLi работает очень быстро и хорошо работает даже с большими наборами данных.

  • MySQLi очень дружественен к PHP, самый ценный язык для веб-разработки.

  • MySQLi поддерживает большие базы данных, до 50 миллионов или более строк в таблице. Предельный размер файла по умолчанию для таблицы составляет 4 ГБ, но вы можете увеличить его (если ваша операционная система может его обработать) до теоретического предела 8 миллионов терабайт (ТБ).

  • MySQLi настраивается. Лицензия GPL с открытым исходным кодом позволяет программистам модифицировать программное обеспечение MySQL в соответствии со своими специфическими средами.

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

MySQLi — очень мощная программа сама по себе. Он обрабатывает большой набор функций самых дорогих и мощных пакетов баз данных.

MySQLi использует стандартную форму известного языка данных SQL.

MySQLi работает во многих операционных системах и на многих языках, включая PHP, PERL, C, C ++, JAVA и т. Д.

MySQLi работает очень быстро и хорошо работает даже с большими наборами данных.

MySQLi очень дружественен к PHP, самый ценный язык для веб-разработки.

MySQLi поддерживает большие базы данных, до 50 миллионов или более строк в таблице. Предельный размер файла по умолчанию для таблицы составляет 4 ГБ, но вы можете увеличить его (если ваша операционная система может его обработать) до теоретического предела 8 миллионов терабайт (ТБ).

MySQLi настраивается. Лицензия GPL с открытым исходным кодом позволяет программистам модифицировать программное обеспечение MySQL в соответствии со своими специфическими средами.

Прежде чем вы начнете

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

В этом руководстве основное внимание уделяется использованию MySQLi в среде PHP. Многие примеры, приведенные в этом руководстве, будут полезны для программистов PHP.

Мы рекомендуем вам ознакомиться с нашим учебником PHP для вашей справки.

MySQLi — Установка

Загрузка MySQL

Расширение MySQLi предназначено для работы с MySQL версии 4.1.13 или более новой, поэтому необходимо загрузить MySQL. Все загрузки для MySQL находятся на MySQL Downloads . Выберите последний номер версии MySQL Community Server, который вы хотите, и, насколько это возможно, платформу, которую вы хотите.

Установка MySQL в Linux / UNIX

Рекомендуемый способ установки MySQL в системе Linux — через RPM. MySQL AB делает доступными для загрузки на своем веб-сайте следующие RPM —

  • MySQL — сервер баз данных MySQL, который управляет базами данных и таблицами, контролирует доступ пользователей и обрабатывает запросы SQL.

  • MySQL-клиент — клиентские программы MySQL, которые позволяют подключаться и взаимодействовать с сервером.

  • MySQL-devel — библиотеки и заголовочные файлы, которые пригодятся при компиляции других программ, использующих MySQL.

  • MySQL-shared — общие библиотеки для клиента MySQL.

  • MySQL-bench — средства тестирования производительности и производительности для сервера баз данных MySQL.

MySQL — сервер баз данных MySQL, который управляет базами данных и таблицами, контролирует доступ пользователей и обрабатывает запросы SQL.

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

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

MySQL-shared — общие библиотеки для клиента MySQL.

MySQL-bench — средства тестирования производительности и производительности для сервера баз данных MySQL.

Перечисленные здесь RPM-версии MySQL все построены на системе SuSE Linux, но обычно они работают без проблем с другими вариантами Linux.

Теперь выполните следующие шаги, чтобы приступить к установке —

  • Войдите в систему, используя пользователя root .

  • Перейдите в каталог, содержащий RPMs —

  • Установите сервер базы данных MySQL, выполнив следующую команду. Не забудьте заменить имя файла курсивом на имя файла вашего RPM.

Войдите в систему, используя пользователя root .

Перейдите в каталог, содержащий RPMs —

Установите сервер базы данных MySQL, выполнив следующую команду. Не забудьте заменить имя файла курсивом на имя файла вашего RPM.

[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm

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

    Вы можете найти все связанные с MySQL двоичные файлы в / usr / bin и / usr / sbin. Все таблицы и базы данных будут созданы в каталоге / var / lib / mysql.

  • Это необязательный, но рекомендуемый шаг для установки оставшихся RPM таким же образом —

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

Вы можете найти все связанные с MySQL двоичные файлы в / usr / bin и / usr / sbin. Все таблицы и базы данных будут созданы в каталоге / var / lib / mysql.

Это необязательный, но рекомендуемый шаг для установки оставшихся RPM таким же образом —

[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm

Установка MySQL в Windows

Установка по умолчанию в любой версии Windows теперь намного проще, чем раньше, поскольку MySQL теперь поставляется в комплекте с установщиком. Просто скачайте установочный пакет, разархивируйте его куда угодно и запустите setup.exe.

Установщик по умолчанию setup.exe проведет вас через простой процесс и по умолчанию установит все в C: \ mysql.

Протестируйте сервер, запустив его из командной строки в первый раз. Перейдите в расположение сервера mysqld, который, вероятно, C: \ mysql \ bin, и введите —

mysqld.exe --console

ПРИМЕЧАНИЕ. — Если вы работаете в NT, вам придется использовать mysqld-nt.exe вместо mysqld.exe

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

MySQL не добавит себя в меню «Пуск», и нет никакого приятного графического интерфейса для остановки сервера. Поэтому, если вы склонны запускать сервер двойным щелчком по исполняемому файлу mysqld, не забывайте останавливать процесс вручную, используя mysqladmin, Task List, Task Manager или другие средства, специфичные для Windows.

Проверка установки MySQL

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

Используйте утилиту mysqladmin для получения статуса сервера

Используйте бинарный файл mysqladmin для проверки версии сервера. Этот двоичный файл будет доступен в / usr / bin в Linux и в C: \ mysql \ bin в Windows.

[root@host]# mysqladmin --version

Это даст следующий результат в Linux. Это может варьироваться в зависимости от вашей установки —

mysqladmin  Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386

Если вы не получили такое сообщение, возможно, в вашей установке возникла проблема, и вам понадобится помощь, чтобы исправить ее.

Выполните простые команды SQL, используя MySQL Client

Вы можете подключиться к вашему серверу MySQL с помощью клиента MySQL с помощью команды mysql . На данный момент вам не нужно вводить пароль, так как по умолчанию он будет пустым.

Так что просто используйте следующую команду

[root@host]# mysql

Это должно быть вознаграждено приглашением mysql>. Теперь вы подключены к серверу MySQL и можете выполнить все команды SQL в приглашении mysql> следующим образом:

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.13 sec)

Шаги после установки

MySQL поставляется с пустым паролем для пользователя root MySQL. Как только вы успешно установили базу данных и клиент, вам нужно установить пароль root следующим образом:

[root@host]# mysqladmin -u root password "new_password";

Теперь, чтобы установить соединение с вашим сервером MySQL, вам нужно использовать следующую команду:

[root@host]# mysql -u root -p
Enter password:*******

Пользователи UNIX также захотят поместить ваш каталог MySQL в вашу переменную PATH, поэтому вам не придется вводить полный путь каждый раз, когда вы хотите использовать клиент командной строки. Для bash это было бы что-то вроде —

export PATH = $PATH:/usr/bin:/usr/sbin

Запуск MySQL во время загрузки

Если вы хотите запустить сервер MySQL во время загрузки, убедитесь, что у вас есть следующая запись в файле /etc/rc.local.

/etc/init.d/mysqld start

Также у вас должен быть бинарный файл mysqld в каталоге /etc/init.d/.

MySQLi — Администрирование

Запуск и завершение работы MySQLi Server

MySQLi расширен MySQL, поэтому сначала проверьте, работает ваш сервер MySQL или нет. Вы можете использовать следующую команду, чтобы проверить это —

ps -ef | grep mysqld

Если ваш MySql запущен, вы увидите процесс mysqld, перечисленный в вашем результате. Если сервер не запущен, вы можете запустить его с помощью следующей команды:

root@host# cd /usr/bin
./safe_mysqld &

Теперь, если вы хотите выключить уже работающий сервер MySQL, вы можете сделать это с помощью следующей команды:

root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******

Настройка учетной записи MySQLi

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

Ниже приведен пример добавления гостя нового пользователя с привилегиями SELECT, INSERT и UPDATE с паролем guest123 ; SQL-запрос —

root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed

mysql> INSERT INTO user (
   host, user, password, select_priv, insert_priv, update_priv) 
   VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');

Query OK, 1 row affected (0.20 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host      | user    | password         |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)

При добавлении нового пользователя не забудьте зашифровать новый пароль с помощью функции PASSWORD (), предоставляемой MySQL. Как видно из приведенного выше примера, пароль mypass зашифрован на 6f8c114b58f2ce9e.

Обратите внимание на утверждение FLUSH PRIVILEGES. Это говорит серверу перезагрузить таблицы предоставления. Если вы не используете его, то вы не сможете подключиться к mysql, используя новую учетную запись пользователя, по крайней мере, до перезагрузки сервера.

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

  • Select_priv
  • Insert_priv
  • Update_priv
  • Delete_priv
  • Create_priv
  • Drop_priv
  • Reload_priv
  • Shutdown_priv
  • Process_priv
  • File_priv
  • Grant_priv
  • References_priv
  • Index_priv
  • Alter_priv

Другой способ добавить учетную запись пользователя — использовать команду GRANT SQL; В следующем примере будет добавлен пользователь zara с паролем zara123 для конкретной базы данных с именем TUTORIALS .

root@host# mysql -u root -p password;
Enter password:*******
mysql> use mysql;
Database changed

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
   -> ON TUTORIALS.*
   -> TO 'zara'@'localhost'
   -> IDENTIFIED BY 'zara123';

Это также создаст запись в таблице базы данных mysql с именем user .

ПРИМЕЧАНИЕ. — MySQL не завершает команду, пока вы не дадите точку с запятой (;) в конце команды SQL.

Конфигурация файла /etc/my.cnf

В большинстве случаев вам не следует трогать этот файл. По умолчанию он будет иметь следующие записи —

[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock

[mysql.server]
user = mysql
basedir = /var/lib

[safe_mysqld]
err-log = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid

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

Административная команда MySQLi

Вот список важных команд MySQLi, которые вы будете время от времени использовать для работы с базой данных MySQL —

  • USE Databasename — это будет использоваться для выбора конкретной базы данных в рабочей области MySQLi.

  • ПОКАЗАТЬ БАЗЫ ДАННЫХ — список баз данных, доступных для СУБД MySQLi.

  • SHOW TABLES — Показывает таблицы в базе данных после выбора базы данных командой use.

  • SHOW COLUMNS FROM tablename — показывает атрибуты, типы атрибутов, ключевую информацию, разрешен ли NULL, значения по умолчанию и другую информацию для таблицы.

  • SHOW INDEX FROM tablename — представляет подробную информацию обо всех индексах таблицы, включая ПЕРВИЧНЫЙ КЛЮЧ.

  • SHOW TABLE STATUS LIKE tablename \ G — Сообщает подробную информацию о производительности и статистике СУБД MySQLi.

USE Databasename — это будет использоваться для выбора конкретной базы данных в рабочей области MySQLi.

ПОКАЗАТЬ БАЗЫ ДАННЫХ — список баз данных, доступных для СУБД MySQLi.

SHOW TABLES — Показывает таблицы в базе данных после выбора базы данных командой use.

SHOW COLUMNS FROM tablename — показывает атрибуты, типы атрибутов, ключевую информацию, разрешен ли NULL, значения по умолчанию и другую информацию для таблицы.

SHOW INDEX FROM tablename — представляет подробную информацию обо всех индексах таблицы, включая ПЕРВИЧНЫЙ КЛЮЧ.

SHOW TABLE STATUS LIKE tablename \ G — Сообщает подробную информацию о производительности и статистике СУБД MySQLi.

MySQLi — Синтаксис PHP

MySQLi очень хорошо работает в сочетании с различными языками программирования, такими как PERL, C, C ++, JAVA и PHP. Из этих языков PHP является самым популярным из-за своих возможностей разработки веб-приложений.

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

Функции PHP для использования с MySQLi имеют следующий общий формат —

mysqli_function(value,value,...);

Вторая часть имени функции специфична для функции, обычно это слово, которое описывает, что делает функция. Ниже приведены две функции, которые мы будем использовать в нашем уроке:

mysqli_connect($connect);
mysqli_query($connect,"SQL statement");

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

<html>
   <head>
      <title>PHP with MySQLi</title>
   </head>
   
   <body>
      <?php
         $retval = mysqli_function(value, [value,...]);
         if( !$retval ){
            die ( "Error: a related error message" );
         }
         // Otherwise MySQLi  or PHP Statements
      ?>
   </body>
</html>

Начиная со следующей главы, мы увидим все важные функции MySQLi вместе с PHP.

MySQLi — Соединение

MySQLi Connection используя бинарный файл mysql

Вы можете установить базу данных MySQLi, используя двоичный файл mysql в командной строке.

пример

Вот простой пример подключения к серверу MySQL для установки базы данных mysqli из командной строки:

[root@host]# mysql -u root -p
Enter password:******

Это даст вам mysql> командную строку, где вы сможете выполнить любую команду SQL. Ниже приведен результат вышеупомянутой команды —

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9

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

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

Вы можете отключиться от базы данных MySQL в любое время, используя команду exit в приглашении mysql>.

mysql> exit
Bye

MySQLi Connection с использованием PHP Script

PHP предоставляет функцию mysqli_connect () для открытия соединения с базой данных. Эта функция принимает пять параметров и возвращает идентификатор ссылки MySQLi в случае успеха или FALSE в случае ошибки.

Синтаксис

connection mysqli_connect(server,user,passwd,new_link,client_flag);

Sr.No. Параметр и описание
1

сервер

Необязательно — имя хоста, на котором работает сервер базы данных. Если не указано иное, по умолчанию используется значение localhost: 3306 .

2

пользователь

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

3

ПАРОЛЬ

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

4

new_link

Необязательно — Если для mysqli_connect () сделан второй вызов с теми же аргументами, новое соединение не будет установлено; вместо этого будет возвращен идентификатор уже открытого соединения.

5

client_flags

Необязательно — комбинация следующих констант —

  • MYSQLI_CLIENT_SSL — использовать шифрование SSL
  • MYSQLI_CLIENT_COMPRESS — использовать протокол сжатия
  • MYSQLI_CLIENT_IGNORE_SPACE — Разрешить пробел после имен функций
  • MYSQLI_CLIENT_INTERACTIVE — разрешить интерактивное время ожидания в секундах бездействия перед закрытием соединения

сервер

Необязательно — имя хоста, на котором работает сервер базы данных. Если не указано иное, по умолчанию используется значение localhost: 3306 .

пользователь

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

ПАРОЛЬ

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

new_link

Необязательно — Если для mysqli_connect () сделан второй вызов с теми же аргументами, новое соединение не будет установлено; вместо этого будет возвращен идентификатор уже открытого соединения.

client_flags

Необязательно — комбинация следующих констант —

Вы можете отключиться от базы данных MySQLi в любое время, используя другую функцию PHP mysqli_close () . Эта функция принимает единственный параметр, который является соединением, возвращаемым функцией mysqli_connect () .

Синтаксис

bool mysqli_close ( resource $link_identifier );

Если ресурс не указан, то последняя открытая база данных закрывается. Эта функция возвращает true, если она успешно закрывает соединение, в противном случае возвращает false.

пример

Попробуйте следующий пример для подключения к серверу MySQL:

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'guest';
         $dbpass = 'guest123';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
   
         if(! $conn ){
            die('Could not connect: ' . mysqli_error());
         }
         echo 'Connected successfully';
         mysqli_close($conn);
      ?>
   </body>
</html>

Если приведенный выше пример связан с MySQLi, то вывод в вашем браузере должен быть таким:

Connected successfully

MySQLi — Создать базу данных

Создать базу данных с помощью mysqladmin

Вам понадобятся специальные привилегии для создания или удаления базы данных MySQLi. Таким образом, предполагая, что у вас есть доступ к пользователю root, вы можете создать любую базу данных, используя mysql mysqladmin binary.

пример

Вот простой пример для создания базы данных под названием учебники

[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******

Это создаст базу данных MySQLi.

Создать базу данных с помощью PHP Script

PHP использует функцию mysqli_query для создания или удаления базы данных MySQLi. Эта функция принимает два параметра и возвращает TRUE в случае успеха или FALSE в случае ошибки.

пример

Попробуйте следующий пример для создания базы данных —

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '<password here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
   
         if(! $conn ){
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         $sql = "CREATE DATABASE TUTORIALS";
         
         if (mysqli_query($conn, $sql)) {
            echo "Database created successfully";
         } else {
            echo "Error creating database: " . mysqli_error($conn);
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

Если база данных подключена и создана успешно, пример вывода должен быть таким:

Connected successfully
Database created successfully

MySQLi — Drop Database

Удалить базу данных, используя mysqladmin

Вам понадобятся специальные привилегии для создания или удаления базы данных MySQLi. Таким образом, предполагая, что у вас есть доступ к пользователю root, вы можете создать любую базу данных, используя mysql mysqladmin binary.

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

Вот пример удаления базы данных, созданной в предыдущей главе:

[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******

Это даст вам предупреждение и подтвердит, действительно ли вы хотите удалить эту базу данных или нет.

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped

Удалить базу данных с помощью PHP Script

PHP использует функцию запроса для создания или удаления базы данных MySQLi. Эта функция принимает два параметра и возвращает TRUE в случае успеха или FALSE в случае ошибки.

пример

Попробуйте следующий пример, чтобы удалить базу данных:

<html>
   <head>
      <title>Connecting MySQLi Server>/title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '<Password Here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ){
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         $sql = "DROP DATABASE TUTORIALS";
         
         if (mysqli_query($conn, $sql)) {
         echo "Record deleted successfully";
         } else {
            echo "Error deleting record: " . mysqli_error($conn);
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

ПРЕДУПРЕЖДЕНИЕ. При удалении базы данных с использованием сценария PHP она не запрашивает никакого подтверждения. Поэтому будьте осторожны при удалении базы данных MySQLi.

Если база данных подключена и удалена успешно, пример вывода должен быть таким:

Connected successfully
Database deleted successfully

MySQLi — Выбор базы данных

Как только вы получите соединение с сервером MySQLi, необходимо выбрать конкретную базу данных для работы. Это связано с тем, что на MySQLi Server может быть несколько баз данных.

Синтаксис

bool mysqli_select_db( db_name, connection );

Sr.No. Параметр и описание
1

db_name

Обязательно — имя базы данных MySQLi для выбора

2

соединение

Необязательно — если не указано, будет использовано последнее открытое соединение с помощью mysqli_connect.

db_name

Обязательно — имя базы данных MySQLi для выбора

соединение

Необязательно — если не указано, будет использовано последнее открытое соединение с помощью mysqli_connect.

пример

Вот пример, показывающий, как выбрать базу данных.

<html>
   <head>
      <title>Connecting MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '<Password Here>';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
   
         if(! $conn ) {
            echo 'Connected failure<br>';
         }
         echo 'Connected successfully<br>';
         mysqli_select_db( 'TUTORIALS' );
   
         //Write some code here
         mysqli_close($conn);
      ?>
   </body>
</html>

Если база данных подключена и выбрана успешно, пример вывода должен быть таким:

Connected successfully

MySQLi — типы данных

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

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

Числовые типы данных

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

  • INT — целое число нормального размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -2147483648 до 2147483647. Если не подписан, допустимый диапазон составляет от 0 до 4294967295. Можно указать ширину до 11 цифр.

  • TINYINT — очень маленькое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -128 до 127. Если без знака, допустимый диапазон составляет от 0 до 255. Можно указать ширину до 4 цифр.

  • SMALLINT — небольшое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -32768 до 32767. Если не подписан, допустимый диапазон составляет от 0 до 65535. Можно указать ширину до 5 цифр.

  • MEDIUMINT — целое число среднего размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -8388608 до 8388607. Если не подписан, допустимый диапазон составляет от 0 до 16777215. Вы можете указать ширину до 9 цифр.

  • BIGINT — большое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -9223372036854775808 до 9223372036854775807. Если он не подписан, допустимый диапазон составляет от 0 до 18446744073709551615. Можно указать ширину до 20 цифр.

  • FLOAT (M, D) — число с плавающей точкой, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 10,2, где 2 — количество десятичных знаков, а 10 — общее количество цифр (включая десятичные дроби). Десятичная точность может идти до 24 мест для FLOAT.

  • DOUBLE (M, D) — число с плавающей запятой двойной точности, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 16,4, где 4 — количество десятичных знаков. Десятичная точность может пойти в 53 места для ДВОЙНОГО. REAL является синонимом для DOUBLE.

  • DECIMAL (M, D) — неупакованное число с плавающей точкой, которое не может быть без знака. В распакованных десятичных числах каждое десятичное число соответствует одному байту. Требуется определить длину отображения (M) и количество десятичных знаков (D). NUMERIC — это синоним DECIMAL.

INT — целое число нормального размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -2147483648 до 2147483647. Если не подписан, допустимый диапазон составляет от 0 до 4294967295. Можно указать ширину до 11 цифр.

TINYINT — очень маленькое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -128 до 127. Если без знака, допустимый диапазон составляет от 0 до 255. Можно указать ширину до 4 цифр.

SMALLINT — небольшое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -32768 до 32767. Если не подписан, допустимый диапазон составляет от 0 до 65535. Можно указать ширину до 5 цифр.

MEDIUMINT — целое число среднего размера, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -8388608 до 8388607. Если не подписан, допустимый диапазон составляет от 0 до 16777215. Вы можете указать ширину до 9 цифр.

BIGINT — большое целое число, которое может быть подписано или не подписано. Если подписано, допустимый диапазон составляет от -9223372036854775808 до 9223372036854775807. Если он не подписан, допустимый диапазон составляет от 0 до 18446744073709551615. Можно указать ширину до 20 цифр.

FLOAT (M, D) — число с плавающей точкой, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 10,2, где 2 — количество десятичных знаков, а 10 — общее количество цифр (включая десятичные дроби). Десятичная точность может идти до 24 мест для FLOAT.

DOUBLE (M, D) — число с плавающей запятой двойной точности, которое не может быть без знака. Вы можете определить длину дисплея (M) и количество десятичных знаков (D). Это не обязательно и по умолчанию будет 16,4, где 4 — количество десятичных знаков. Десятичная точность может пойти в 53 места для ДВОЙНОГО. REAL является синонимом для DOUBLE.

DECIMAL (M, D) — неупакованное число с плавающей точкой, которое не может быть без знака. В распакованных десятичных числах каждое десятичное число соответствует одному байту. Требуется определить длину отображения (M) и количество десятичных знаков (D). NUMERIC — это синоним DECIMAL.

Типы даты и времени

Типы данных даты и времени MySQL —

  • ДАТА — дата в формате ГГГГ-ММ-ДД, между 1000-01-01 и 9999-12-31. Например, 30 декабря 1973 года будет храниться как 1973-12-30.

  • DATETIME — комбинация даты и времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС, между 1000-01-01 00:00:00 и 9999-12-31 23:59:59. Например, 3:30 дня 30 декабря 1973 года будет храниться как 1973-12-30 15:30:00.

  • TIMESTAMP — отметка времени между полуночью, 1 января 1970 года и примерно 2037 годом. Это похоже на предыдущий формат DATETIME, только без дефисов между числами; 3:30 во второй половине дня 30 декабря 1973 года будет храниться как 19731230153000 (ГГГГММДДЧЧММСС).

  • ВРЕМЯ — сохраняет время в формате ЧЧ: ММ: СС.

  • ГОД (М) — Сохраняет год в 2-значном или 4-значном формате. Если длина указана как 2 (например, ГОД (2)), ГОД может быть от 1970 до 2069 (от 70 до 69). Если длина указана как 4, ГОД может быть от 1901 до 2155. Длина по умолчанию — 4.

ДАТА — дата в формате ГГГГ-ММ-ДД, между 1000-01-01 и 9999-12-31. Например, 30 декабря 1973 года будет храниться как 1973-12-30.

DATETIME — комбинация даты и времени в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС, между 1000-01-01 00:00:00 и 9999-12-31 23:59:59. Например, 3:30 дня 30 декабря 1973 года будет храниться как 1973-12-30 15:30:00.

TIMESTAMP — отметка времени между полуночью, 1 января 1970 года и примерно 2037 годом. Это похоже на предыдущий формат DATETIME, только без дефисов между числами; 3:30 во второй половине дня 30 декабря 1973 года будет храниться как 19731230153000 (ГГГГММДДЧЧММСС).

ВРЕМЯ — сохраняет время в формате ЧЧ: ММ: СС.

ГОД (М) — Сохраняет год в 2-значном или 4-значном формате. Если длина указана как 2 (например, ГОД (2)), ГОД может быть от 1970 до 2069 (от 70 до 69). Если длина указана как 4, ГОД может быть от 1901 до 2155. Длина по умолчанию — 4.

Типы строк

Хотя числовые типы и типы дат интересны, большинство данных, которые вы будете хранить, будут в строковом формате. Этот список описывает распространенные типы данных строки в MySQLi.

  • CHAR (M) — строка фиксированной длины длиной от 1 до 255 символов (например, CHAR (5)), дополненная справа пробелами до указанной длины при сохранении. Определение длины не требуется, но по умолчанию 1.

  • VARCHAR (M) — строка переменной длины от 1 до 255 символов; например VARCHAR (25). Вы должны определить длину при создании поля VARCHAR.

  • BLOB или TEXT — поле длиной не более 65535 символов. BLOB — это «большие двоичные объекты», которые используются для хранения больших объемов двоичных данных, таких как изображения или другие типы файлов. Поля, определенные как ТЕКСТ, также содержат большие объемы данных; Разница между ними заключается в том, что сортировки и сравнения сохраненных данных чувствительны к регистру на BLOB и не чувствительны к регистру в полях TEXT. Вы не указываете длину с BLOB или TEXT.

  • TINYBLOB или TINYTEXTстолбец BLOB или TEXT, максимальная длина которого составляет 255 символов. Вы не указываете длину с TINYBLOB или TINYTEXT.

  • MEDIUMBLOB или MEDIUMTEXTстолбец BLOB или TEXT, максимальная длина которого составляет 16777215 символов. Вы не указываете длину с MEDIUMBLOB или MEDIUMTEXT.

  • LONGBLOB или LONGTEXTстолбец BLOB или TEXT, максимальная длина которого 4294967295 символов. Вы не указываете длину с LONGBLOB или LONGTEXT.

  • ENUM — перечисление, которое является необычным термином для списка. При определении ENUM вы создаете список элементов, из которых необходимо выбрать значение (или оно может быть NULL). Например, если вы хотите, чтобы ваше поле содержало «A», «B» или «C», вы должны определить свой ENUM как ENUM («A», «B», «C») и только эти значения (или NULL). мог когда-нибудь заполнить это поле.

CHAR (M) — строка фиксированной длины длиной от 1 до 255 символов (например, CHAR (5)), дополненная справа пробелами до указанной длины при сохранении. Определение длины не требуется, но по умолчанию 1.

VARCHAR (M) — строка переменной длины от 1 до 255 символов; например VARCHAR (25). Вы должны определить длину при создании поля VARCHAR.

BLOB или TEXT — поле длиной не более 65535 символов. BLOB — это «большие двоичные объекты», которые используются для хранения больших объемов двоичных данных, таких как изображения или другие типы файлов. Поля, определенные как ТЕКСТ, также содержат большие объемы данных; Разница между ними заключается в том, что сортировки и сравнения сохраненных данных чувствительны к регистру на BLOB и не чувствительны к регистру в полях TEXT. Вы не указываете длину с BLOB или TEXT.

TINYBLOB или TINYTEXTстолбец BLOB или TEXT, максимальная длина которого составляет 255 символов. Вы не указываете длину с TINYBLOB или TINYTEXT.

MEDIUMBLOB или MEDIUMTEXTстолбец BLOB или TEXT, максимальная длина которого составляет 16777215 символов. Вы не указываете длину с MEDIUMBLOB или MEDIUMTEXT.

LONGBLOB или LONGTEXTстолбец BLOB или TEXT, максимальная длина которого 4294967295 символов. Вы не указываете длину с LONGBLOB или LONGTEXT.

ENUM — перечисление, которое является необычным термином для списка. При определении ENUM вы создаете список элементов, из которых необходимо выбрать значение (или оно может быть NULL). Например, если вы хотите, чтобы ваше поле содержало «A», «B» или «C», вы должны определить свой ENUM как ENUM («A», «B», «C») и только эти значения (или NULL). мог когда-нибудь заполнить это поле.

MySQLi — создание таблиц

Команда создания таблицы требует:

  • Название стола
  • Названия полей
  • Определения для каждого поля

Синтаксис

Вот общий синтаксис SQL для создания таблицы MySQLi —

CREATE TABLE table_name (column_name column_type);

Теперь мы создадим следующую таблицу в базе данных TUTORIALS .

CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,
   name VARCHAR(20) NOT NULL,
   primary key (id),
);

Здесь несколько предметов нуждаются в объяснении —

  • Атрибут поля NOT NULL используется, потому что мы не хотим, чтобы это поле было NULL. Поэтому, если пользователь попытается создать запись со значением NULL, MySQLi выдаст ошибку.

  • Атрибут поля AUTO_INCREMENT говорит MySQLi, что нужно идти дальше и добавить следующий доступный номер в поле id.

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

Атрибут поля NOT NULL используется, потому что мы не хотим, чтобы это поле было NULL. Поэтому, если пользователь попытается создать запись со значением NULL, MySQLi выдаст ошибку.

Атрибут поля AUTO_INCREMENT говорит MySQLi, что нужно идти дальше и добавить следующий доступный номер в поле id.

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

Создание таблиц из командной строки

Это легко создать MySQLi таблицу из приглашения mysql>. Вы будете использовать команду SQL CREATE TABLE для создания таблицы.

пример

Вот пример, который создает tutorials_tbl

root@host# mysql -u root -p
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> CREATE TABLE tutorials_inf(
   id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id));
Query OK, 0 rows affected (0.16 sec)

mysql>

ПРИМЕЧАНИЕ. — MySQLi не завершает команду, пока вы не дадите точку с запятой (;) в конце команды SQL.

Создание таблиц с использованием PHP Script

Для создания новой таблицы в любой существующей базе данных вам необходимо использовать функцию PHP mysqli_query () . Вы передадите второй аргумент с правильной командой SQL для создания таблицы.

пример

Вот пример для создания таблицы с использованием скрипта PHP —

<html>
   <head>
      <title>Creating MySQLi Tables</title>
   </head>
   
   <body>
      <?php  
         $host = 'localhost:3306';  
         $user = 'root';  
         $pass = '<Password Here>';  
         $dbname = 'TUTORIALS';  
         $conn = mysqli_connect($host, $user, $pass,$dbname);  
         
         if(!$conn){  
            die('Could not connect: '.mysqli_connect_error());  
         }  
         echo 'Connected successfully<br/>';  
  
         $sql = "create table tutorials_inf(
            id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id))";  
         
         if(mysqli_query($conn, $sql)){  
         echo "Table created successfully";  
         } else {  
            echo "Table is not created successfully ";  
         }  
         mysqli_close($conn);  
      ?>  
   </body>
</html>

Пример вывода должен быть таким:

Connected successfully
Table created successfully

MySQLi — Drop Tables

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

Синтаксис

Вот общий синтаксис SQL для удаления таблицы MySQLi —

DROP TABLE table_name ;

Удаление таблиц из командной строки

Для этого нужно просто выполнить команду SQL DROP TABLE в приглашении mysql>.

пример

Вот пример, который удаляет tutorials_inf

root@host# mysql -u root -p
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DROP TABLE tutorials_inf
Query OK, 0 rows affected (0.8 sec)

mysql>

Удаление таблиц с использованием PHP-скрипта

Чтобы удалить существующую таблицу в любой базе данных, вам нужно использовать функцию PHP mysqli_query () . Вы передадите второй аргумент с правильной командой SQL, чтобы удалить таблицу.

пример

<html>
   <head>
      <title>Dropping MySQLi Tables</title>
   </head>
   
   <body>
      <?php  
         $host = 'localhost:3306';  
         $user = 'root';  
         $pass = '';  
         $dbname = 'TUTORIALS';  
         $conn = mysqli_connect($host, $user, $pass,$dbname);  
         
         if(!$conn) {  
            die('Could not connect: '.mysqli_connect_error());  
         }  
         echo 'Connected successfully<br/>';  
         $sql = "DROP TABLE tutorials_inf";
         
         if(mysqli_query($conn, $sql)) {  
            echo "Table is deleted successfully";  
         } else {  
            echo "Table is not deleted successfully\n";
         }  
         mysqli_close($conn);  
      ?>  
   </body>
</html>

Пример вывода должен быть таким:

Connected successfully
Table is deleted successfully

MySQLi — Вставить запрос

Чтобы вставить данные в таблицу MySQLi, вам понадобится команда SQL INSERT INTO . Вы можете вставить данные в таблицу MySQLi, используя приглашение mysql> или любой другой скрипт, например PHP.

Синтаксис

Вот общий синтаксис SQL команды INSERT INTO для вставки данных в таблицу MySQLi:

INSERT INTO table_name 
   ( field1, field2,...fieldN )
   VALUES
   ( value1, value2,...valueN );

Чтобы вставить строковые типы данных, необходимо сохранить все значения в двойных или одинарных кавычках, например: — «значение» .

Вставка данных из командной строки

Это будет использовать команду SQL INSERT INTO для вставки данных в таблицу MySQLi tutorials_inf.

пример

Следующий пример создаст 3 записи в таблице tutorials_tbl

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_inf 
   ->(id, name)
   ->VALUES
   ->(10, "John Poul");
Query OK, 1 row affected (0.01 sec)

ПРИМЕЧАНИЕ. — Обратите внимание, что все знаки со стрелками (->) не являются частью команды SQL; они указывают на новую строку, и они автоматически создаются по приглашению MySQL при нажатии клавиши ввода без точки с запятой в конце каждой строки команды.

Вставка данных с использованием PHP-скрипта

Вы можете использовать ту же команду SQL INSERT INTO в функции PHP mysqli_query () для вставки данных в таблицу MySQLi.

пример

Этот пример получит три параметра от пользователя и вставит их в таблицу MySQLi —

<html>
   <head>
      <title>Add New Record in MySQLi Database</title>
      <link rel = "stylesheet" type = "text/css" href = "style.css">
   </head>
   
   <body>
      <div id = "main">
         <form action = "" method = "post">
            <label>Name :</label>
            <input type = "text" name = "name" id = "name" />
            <br />
            <br />
            <input type = "submit" value ="Submit" name = "submit"/>
            <br />
         </form>
      </div>
      
      <?php
         if(isset($_POST["submit"])){
            $servername = "localhost:3306";
            $username = "root";
            $password = "<Password here>";
            $dbname = "TUTORIALS";

            // Create connection
            $conn = new mysqli($servername, $username, $password, $dbname);

            // Check connection
            if ($conn->connect_error) {
               die("Connection failed: " . $conn->connect_error);
            } 
            $sql = "INSERT INTO tutorials_inf(name)VALUES ('".$_POST["name"]."')";

            if (mysqli_query($conn, $sql)) {
               echo "New record created successfully";
            } else {
               echo "Error: " . $sql . "" . mysqli_error($conn);
            }
            $conn->close();
         }
      ?>
   </body>
</html>

Пример вывода должен быть таким:

New record created successfully

MySQLi — выберите запрос

Команда SQL SELECT используется для извлечения данных из базы данных MySQLi. Вы можете использовать эту команду в приглашении mysql>, а также в любом скрипте, таком как PHP.

Синтаксис

Вот общий синтаксис SQL команды SELECT для извлечения данных из таблицы MySQLi:

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • Вы можете использовать одну или несколько таблиц, разделенных запятой, чтобы включить различные условия, используя предложение WHERE, но предложение WHERE является необязательной частью команды SELECT.

  • Вы можете выбрать одно или несколько полей в одной команде SELECT.

  • Вы можете указать звездочку (*) вместо полей. В этом случае SELECT вернет все поля.

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

  • Вы можете указать смещение, используя OFFSET, откуда SELECT начнет возвращать записи. По умолчанию смещение равно нулю.

  • Вы можете ограничить количество возвратов, используя атрибут LIMIT .

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

Вы можете выбрать одно или несколько полей в одной команде SELECT.

Вы можете указать звездочку (*) вместо полей. В этом случае SELECT вернет все поля.

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

Вы можете указать смещение, используя OFFSET, откуда SELECT начнет возвращать записи. По умолчанию смещение равно нулю.

Вы можете ограничить количество возвратов, используя атрибут LIMIT .

Извлечение данных из командной строки —

Это будет использовать команду SQL SELECT для извлечения данных из таблицы MySQLi tutorials_tbl

пример

Следующий пример вернет все записи из таблицы tutorials_inf

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | kit  |
|  3 | ram  |
+----+------+
3 rows in set (0.00 sec)

mysql>

Выборка данных с использованием PHP-скрипта

Вы можете использовать ту же команду SQL SELECT в функцию PHP mysqli_query () . Эта функция используется для выполнения команды SQL, а затем другая функция PHP mysqli_fetch_assoc () может использоваться для извлечения всех выбранных данных. Эта функция возвращает строку в виде ассоциативного массива, числового массива или обоих. Эта функция возвращает FALSE, если строк больше нет.

Ниже приведен простой пример для извлечения записей из таблицы tutorials_inf .

пример

Попробуйте следующий пример, чтобы отобразить все записи из таблицы tutorials_inf.

<html>
   <head>
      <title>Selecting Table in MySQLi Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'root';
         $dbpass = '';
         $dbname = 'TUTORIALS';
         $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
         if(! $conn ) {
            die('Could not connect: ' . mysqli_error());
         }
         echo 'Connected successfully<br>';
         $sql = 'SELECT name FROM tutorials_inf';
         $result = mysqli_query($conn, $sql);

         if (mysqli_num_rows($result) > 0) {
            while($row = mysqli_fetch_assoc($result)) {
               echo "Name: " . $row["name"]. "<br>";
            }
         } else {
            echo "0 results";
         }
         mysqli_close($conn);
      ?>
   </body>
</html>

Содержимое строк присваивается переменной $ row, а затем выводятся значения в строке.

ПРИМЕЧАНИЕ. — Не забывайте ставить фигурные скобки, когда хотите вставить значение массива непосредственно в строку.

Пример вывода должен быть таким:

Connected successfully
Name: ram
Name: kit
Name: abc

MySQLi — предложение WHERE

Мы видели команду SQL SELECT для извлечения данных из таблицы MySQLi. Мы можем использовать условное предложение WHERE для фильтрации результатов. Используя предложение WHERE, мы можем указать критерии выбора для выбора необходимых записей из таблицы.

Синтаксис

Вот общий синтаксис SQL команды SELECT с предложением WHERE для извлечения данных из таблицы MySQLi —

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • Вы можете использовать одну или несколько таблиц, разделенных запятой, чтобы включить различные условия, используя предложение WHERE, но предложение WHERE является необязательной частью команды SELECT.

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

  • Вы можете указать более одного условия, используя операторы AND или OR .

  • Предложение WHERE может использоваться вместе с командой SQL DELETE или UPDATE также для указания условия.

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

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

Вы можете указать более одного условия, используя операторы AND или OR .

Предложение WHERE может использоваться вместе с командой SQL DELETE или UPDATE также для указания условия.

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

Вот список операторов, которые можно использовать с предложением WHERE .

Предположим, что поле A содержит 10, а поле B содержит 20, тогда —

оператор Описание пример
знак равно Проверяет, равны ли значения двух операндов или нет, если да, тогда условие становится истинным. (A = B) не соответствует действительности.
знак равно Проверяет, равны ли значения двух операндов или нет, если значения не равны, тогда условие становится истинным. (A! = B) верно.
> Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (A> B) не соответствует действительности.
< Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, тогда условие становится истинным. (A <B) верно.
> = Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (A> = B) не соответствует действительности.
<= Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, тогда условие становится истинным. (A <= B) верно.

Предложение WHERE очень полезно, когда вы хотите извлечь выбранные строки из таблицы, особенно когда вы используете MySQLi Join . Объединения обсуждаются в другой главе.

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

Если данное условие не соответствует ни одной записи в таблице, запрос не будет возвращать ни одной строки.

Извлечение данных из командной строки

Это будет использовать команду SQL SELECT с предложением WHERE для извлечения выбранных данных из таблицы MySQLi tutorials_inf.

пример

Следующий пример вернет все записи из таблицы tutorials_inf, для которых имя sai

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql>SELECT * from tutorials_inf where name = 'sai';
+----+------+
| id | name |
+----+------+
|  1 | SAI  |
+----+------+
1 row in set (0.00 sec)

mysql>

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

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf \WHERE BINARY name = 'sai';
Empty set (0.02 sec)

mysql>

Извлечение данных с помощью PHP Script:

Вы можете использовать ту же команду SQL SELECT с WHERE CLAUSE в функцию PHP mysqli_query () .

пример

Следующий пример вернет все записи из таблицы tutorials_inf, для которых имя sai

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = 'SELECT * from tutorials_inf where name="sai"';
   $result = mysqli_query($conn, $sql);

   if (mysqli_num_rows($result) > 0) {
      while($row = mysqli_fetch_assoc($result)) {
         echo "Name: " . $row["name"]. "<br>";
      }
   } else {
      echo "0 results";
   }
   mysqli_close($conn);
?>

Пример вывода должен быть таким:

Connected successfully
Name: SAI

MySQLi — запрос ОБНОВЛЕНИЯ

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

Синтаксис

Вот общий синтаксис SQL команды UPDATE для изменения данных в таблицу MySQLi:

UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
  • Вы можете обновить одно или несколько полей в целом.

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

  • Вы можете обновлять значения в одной таблице за раз.

Вы можете обновить одно или несколько полей в целом.

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

Вы можете обновлять значения в одной таблице за раз.

Предложение WHERE очень полезно, когда вы хотите обновить выбранные строки в таблице.

Обновление данных из командной строки

Для обновления выбранных данных в таблицу MySQLi tutorials_inf будет использована команда SQL UPDATE с предложением WHERE.

пример

В следующем примере будет обновлено поле имени для записи, имеющей tutorial_inf.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> UPDATE tutorials_inf 
   -> SET name = 'johar' 
   -> WHERE name = 'sai';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

Обновление данных с использованием PHP Script

Вы можете использовать команду SQL UPDATE с или без WHERE CLAUSE в функцию PHP mysqli_query () . Эта функция будет выполнять команду SQL аналогично тому, как она выполняется в приглашении mysql>.

пример

Попробуйте следующий пример, чтобы обновить поле имени для записи.

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = ' UPDATE tutorials_inf SET name="althamas" WHERE name="ram"';
   
   if (mysqli_query($conn, $sql)) {
      echo "Record updated successfully";
   } else {
      echo "Error updating record: " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

Пример вывода должен быть таким:

Connected successfully
Record updated successfully

MySQLi — УДАЛИТЬ Запрос

Если вы хотите удалить запись из любой таблицы MySQLi, вы можете использовать команду SQL DELETE FROM . Вы можете использовать эту команду в приглашении mysql>, а также в любом скрипте, таком как PHP.

Синтаксис

Вот общий синтаксис SQL команды DELETE для удаления данных из таблицы MySQLi:

DELETE FROM table_name [WHERE Clause]
  • Если предложение WHERE не указано, то все записи будут удалены из данной таблицы MySQLi.

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

  • Вы можете удалять записи в одной таблице одновременно.

Если предложение WHERE не указано, то все записи будут удалены из данной таблицы MySQLi.

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

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

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

Удаление данных из командной строки

Для удаления выбранных данных в таблицу MySQLi tutorials_inf будет использоваться команда SQL DELETE с предложением WHERE.

пример

Следующий пример удалит запись в tutorial_inf с именем johar.

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> DELETE FROM tutorials_inf where name = 'johar';
Query OK, 1 row affected (0.23 sec)

mysql>

Удаление данных с использованием PHP-скрипта

Вы можете использовать команду SQL DELETE с или без WHERE CLAUSE в функцию PHP mysqli_query () . Эта функция будет выполнять команду SQL аналогично тому, как она выполняется в приглашении mysql>.

пример

Попробуйте следующий пример, чтобы удалить запись из tutorial_inf с именем althamas.

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = ' DELETE FROM tutorials_inf WHERE name = "althamas"';
   
   if (mysqli_query($conn, $sql)) {
      echo "Record deleted successfully";
   } else {
      echo "Error deleting record: " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

Пример вывода должен быть таким:

Connected successfully
Record deleted successfully

MySQLi — как статья

Мы видели команду SQL SELECT для извлечения данных из таблицы MySQLi. Мы также можем использовать условное предложение WHERE для выбора необходимых записей.

Предложение WHERE со знаком равенства (=) прекрасно работает там, где мы хотим получить точное совпадение. Например, если «name = ‘sai'». Но может быть требование, когда мы хотим отфильтровать все результаты, где имя должно содержать «johar». Это можно сделать с помощью предложения SQL LIKE вместе с предложением WHERE.

Если предложение SQL LIKE используется вместе с символами%, то оно будет работать как метасимвол (*) в UNIX при перечислении всех файлов или каталогов в командной строке.

Без символа% предложение LIKE очень похоже на знак равенства вместе с предложением WHERE.

Синтаксис

Вот общий синтаксис SQL команды SELECT вместе с предложением LIKE для извлечения данных из таблицы MySQLi —

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • Вы можете указать любое условие, используя предложение WHERE.

  • Вы можете использовать предложение LIKE вместе с предложением WHERE.

  • Вы можете использовать предложение LIKE вместо знака равенства.

  • Когда LIKE используется вместе со знаком%, он будет работать как поиск метасимволов.

  • Вы можете указать более одного условия, используя операторы AND или OR .

  • Предложение WHERE … LIKE может использоваться вместе с командой SQL DELETE или UPDATE также для указания условия.

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

Вы можете использовать предложение LIKE вместе с предложением WHERE.

Вы можете использовать предложение LIKE вместо знака равенства.

Когда LIKE используется вместе со знаком%, он будет работать как поиск метасимволов.

Вы можете указать более одного условия, используя операторы AND или OR .

Предложение WHERE … LIKE может использоваться вместе с командой SQL DELETE или UPDATE также для указания условия.

Использование предложения LIKE в командной строке

Это будет использовать команду SQL SELECT с предложением WHERE … LIKE для извлечения выбранных данных из таблицы MySQLi tutorials_inf.

пример

Следующий пример вернет все записи из таблицы tutorials_inf, для которых имя автора заканчивается на johar

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf 
   -> WHERE name LIKE '%johar';
+----+-------+
| id | name  |
+----+-------+
|  2 | johar |
+----+-------+
1 row in set (0.00 sec)

mysql>

Использование предложения LIKE внутри PHP Script

Вы можете использовать похожий синтаксис предложения WHERE … LIKE в функции PHP mysqli_query () . Эта функция используется для выполнения команды SQL, а затем другая функция PHP mysqli_fetch_array () может использоваться для извлечения всех выбранных данных, если предложение WHERE … LIKE используется вместе с командой SELECT.

Но если предложение WHERE … LIKE используется с командой DELETE или UPDATE, то дальнейшего вызова функции PHP не требуется.

пример

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

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully<br>';
   $sql = 'SELECT * FROM tutorials_inf WHERE name LIKE "%johar%"';
   $result = mysqli_query($conn, $sql);
   $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
   
   printf ("%s \n",$row["name"]);
   mysqli_free_result($result);
   mysqli_close($conn);
?>

Пример вывода должен быть таким:

Connected successfully
johar

MySQLi — сортировка результатов

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

Синтаксис

Вот общий синтаксис SQL команды SELECT вместе с предложением ORDER BY для сортировки данных из таблицы MySQL —

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • Вы можете отсортировать возвращаемый результат по любому полю при условии, что поле указано в списке.

  • Вы можете отсортировать результаты по нескольким полям.

  • Вы можете использовать ключевое слово ASC или DESC, чтобы получить результат в порядке возрастания или убывания. По умолчанию это возрастающий порядок.

  • Вы можете использовать предложение WHERE … LIKE обычным способом, чтобы поставить условие.

Вы можете отсортировать возвращаемый результат по любому полю при условии, что поле указано в списке.

Вы можете отсортировать результаты по нескольким полям.

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

Вы можете использовать предложение WHERE … LIKE обычным способом, чтобы поставить условие.

Использование предложения ORDER BY в командной строке

Для извлечения данных из таблицы MySQLi tutorials_inf будет использоваться команда SQL SELECT с предложением ORDER BY.

пример

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

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * from tutorials_inf ORDER BY id desc;
+----+-------+
| id | name  |
+----+-------+
|  4 | ram   |
|  3 | raghu |
|  2 | johar |
|  1 | sai   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

Убедитесь, что все идентификаторы перечислены в порядке убывания.

Использование предложения ORDER BY внутри PHP Script

Вы можете использовать похожий синтаксис предложения ORDER BY в функции PHP mysqli_query () . Эта функция используется для выполнения команды SQL, а затем другая функция PHP mysqli_fetch_array () может использоваться для извлечения всех выбранных данных.

пример

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

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully</br>';
   $sql = 'SELECT * from tutorials_inf ORDER BY id desc';
   
   if($result = mysqli_query($conn, $sql)){
      if(mysqli_num_rows($result) > 0){
         echo "<table>";
         echo "<tr>";
         echo "<th>id</th>";
         echo "<th>name</th>";
         echo "</tr>";
         
         while($row = mysqli_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['name'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result);
      } else {
         echo "No records matching your query were found.";
      }
   } else {
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

Пример вывода должен быть таким:

Connected successfully
id	name
4	ram
3	raghu
2	johar
1	sai

MySQLi — Использование соединений

До сих пор мы получали данные только из одной таблицы за раз. Это хорошо для простых операций, но в большинстве случаев использования MySQL в реальном времени вам часто требуется получать данные из нескольких таблиц за один запрос.

Вы можете использовать несколько таблиц в одном запросе SQL. Акт объединения в MySQLi относится к объединению двух или более таблиц в одну таблицу.

Вы можете использовать JOINS в инструкциях SELECT, UPDATE и DELETE для объединения таблиц MySQLi. Мы также увидим пример LEFT JOIN, который отличается от простого MySQLi JOIN.

Использование объединений в командной строке

Предположим, у нас есть две таблицы tutorials_bks и tutorials_inf в учебниках . Полный список приведен ниже —

пример

Попробуйте следующие примеры —

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> SELECT * FROM tcount_bks;
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
+----+---------+
5 rows in set (0.00 sec)

mysql> SELECT * from tutorials_inf;
+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  2 | johar |
|  3 | raghu |
|  4 | ram   |
+----+-------+
4 rows in set (0.00 sec)

mysql>

Теперь мы можем написать SQL-запрос для объединения этих двух таблиц. Этот запрос выберет все имена из таблицы tutorials_inf и выберет соответствующее количество руководств из tutorials_bks .

mysql> SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id;
+----+-------+----+
| id | name  | id |
+----+-------+----+
|  1 | sai   |  1 |
|  2 | johar |  2 |
|  3 | raghu |  3 |
|  4 | ram   |  4 |
+----+-------+----+
4 rows in set (0.00 sec)
mysql>

В таблице tutorials_bks у нас есть 5 записей, но в приведенном выше примере она фильтрует и выдает только 4 записи идентификатора согласно запросу

Использование Joins в PHP Script

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

пример

Попробуйте следующий пример —

<?php
   $dbhost = 'localhost:3306';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'TUTORIALS';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
   
   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   }
   echo 'Connected successfully</br>';
   $sql = 'SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id';
   
   if($result = mysqli_query($conn, $sql)) {
      if(mysqli_num_rows($result) > 0) {
         echo "<table>";
         echo "<tr>";
         echo "<th>id</th>";
         echo "<th>name</th>";
         echo "<th>id</th>";
         echo "</tr>";
         
         while($row = mysqli_fetch_array($result)){
            echo "<tr>";
            echo "<td>" . $row['id'] . "</td>";
            echo "<td>" . $row['name'] . "</td>";
				echo "<td>" . $row['id'] . "</td>";
            echo "</tr>";
         }
         echo "</table>";
         mysqli_free_result($result);
      } else {
         echo "No records matching your query were found.";
      }
   } else {
      echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn);
   }
   mysqli_close($conn);
?>

Пример вывода должен быть таким:

Connected successfully
id	name	id
1	sai	1
2	johar	2
3	raghu	3
4	ram	4

MySQL LEFT JOIN

MySQLi левое соединение отличается от простого соединения. MySQLi LEFT JOIN уделяет особое внимание таблице слева.

Если я выполняю ЛЕВОЕ СОЕДИНЕНИЕ, я получаю все записи, которые совпадают, и В ДОПОЛНИТЕЛЬНО я получаю дополнительную запись для каждой несопоставленной записи в левой таблице соединения — таким образом гарантируя (в моем примере), что каждое имя получает упомянуть —

пример

Попробуйте следующий пример, чтобы понять LEFT JOIN —

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql>SELECT a.id, a.name,b.id FROM tutorials_inf a LEFT JOIN tutorials_bks b ON a.id = b.id;

Вам нужно больше практиковаться, чтобы познакомиться с JOINS. Это немного сложная концепция в MySQL / SQL и станет более понятной при выполнении реальных примеров.

MySQLi — обработка значений NULL

Мы видели команду SQL SELECT вместе с предложением WHERE для извлечения данных из таблицы MySQLi, но когда мы пытаемся дать условие, которое сравнивает значение поля или столбца с NULL , оно не работает должным образом.

Чтобы справиться с такой ситуацией, MySQLi предоставляет три оператора

  • IS NULL — оператор возвращает true, если значение столбца равно NULL.

  • IS NOT NULL — оператор возвращает true, если значение столбца не равно NULL.

  • <=> — оператор сравнивает значения, что (в отличие от оператора =) верно даже для двух значений NULL.

IS NULL — оператор возвращает true, если значение столбца равно NULL.

IS NOT NULL — оператор возвращает true, если значение столбца не равно NULL.

<=> — оператор сравнивает значения, что (в отличие от оператора =) верно даже для двух значений NULL.

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

Чтобы найти столбцы, которые являются или не равны NULL, используйте IS NULL или IS NOT NULL.

Использование значений NULL в командной строке

Предположим, что таблица tutorials_bks в базе данных TUTORIALS содержит две колонки id и name , где NULL-имя указывает, что значение неизвестно —

пример

Попробуйте следующие примеры —

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)

+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
|  9 | NULL    |
| 10 | NULL    |
| 11 | NULL    |
+----+---------+
11 rows in set (0.00 sec)

mysql>

Чтобы найти записи, в которых столбец имени равен или не равен NULL, запросы должны быть записаны так:

mysql> SELECT * FROM tutorials_bks WHERE book = "null";
+----+------+
| id | book |
+----+------+
|  9 | NULL |
| 10 | NULL |
| 11 | NULL |
+----+------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM tutorials_bks WHERE book ! = "null";
+----+---------+
| id | book    |
+----+---------+
|  1 | java    |
|  2 | java    |
|  3 | html    |
|  4 | c++     |
|  5 | Android |
|  6 |         |
|  7 |         |
|  8 |         |
+----+---------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM tutorials_bks WHERE book = "";
+----+------+
| id | book |
+----+------+
|  6 |      |
|  7 |      |
|  8 |      |
+----+------+
3 rows in set (0.01 sec)

Обработка значений NULL в PHP-скрипте

Вы можете использовать условие if … else для подготовки запроса на основе значения NULL.

пример

Следующий пример берет tutorial_count извне и затем сравнивает его со значением, доступным в таблице.

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   if( isset($tutorial_count )) {
      $sql = 'SELECT tutorial_author, tutorial_count FROM  tcount_tbl
         WHERE tutorial_count = $tutorial_count';
   } else {
      $sql = 'SELECT tutorial_author, tutorial_count
         FROM  tcount_tbl WHERE tutorial_count IS $tutorial_count';
   }
   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

MySQLi — регулярные выражения

Вы видели сопоставление с шаблоном MySQLi с LIKE …% . MySQLi поддерживает другой тип операции сопоставления с образцом на основе регулярных выражений и оператора REGEXP . Если вы знакомы с PHP или PERL, то вам будет очень легко понять, потому что это сопоставление очень похоже на те сценарии регулярных выражений.

Ниже приведена таблица паттернов, которую можно использовать вместе с оператором REGEXP .

Шаблон Какой шаблон соответствует
^ Начало строки
$ Конец строки
, Любой отдельный персонаж
[…] Любой символ, указанный в квадратных скобках
[^ …] Любой символ, не указанный в квадратных скобках
p1 | p2 | p3 Чередование; соответствует любому из паттернов p1, p2 или p3
* Ноль или более экземпляров предыдущего элемента
+ Один или несколько экземпляров предыдущего элемента
{П} n экземпляров предыдущего элемента
{Т, п} от m до n экземпляров предыдущего элемента

Примеры

Теперь, основываясь на приведенной выше таблице, вы можете использовать различные типы SQL-запросов для удовлетворения ваших требований. Здесь я перечислил несколько для вашего понимания. Предположим, у нас есть таблица с именем tutorials_inf, и у нее есть поле с именем name —

Запрос, чтобы найти все имена, начинающиеся с ‘sa’

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^sa';

Пример вывода должен быть таким:

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

Запросить поиск всех имен, заканчивающихся на ‘ai’

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'ai$';

Пример вывода должен быть таким:

+----+------+
| id | name |
+----+------+
|  1 | sai  |
+----+------+
1 row in set (0.00 sec)

Запрос, чтобы найти все имена, которые содержат «а»

mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'a';

Пример вывода должен быть таким:

+----+-------+
| id | name  |
+----+-------+
|  1 | sai   |
|  3 | ram   |
|  4 | johar |
+----+-------+
3 rows in set (0.00 sec)

Запрос, чтобы найти все имена, начинающиеся с гласной

mysql>  SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';

MySQLi — Транзакции

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

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

Свойства сделок

Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID —

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

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

  • Изоляция — позволяет транзакциям работать независимо друг от друга и быть прозрачными друг для друга.

  • Долговечность — обеспечивает сохранение результата или эффекта совершенной транзакции в случае сбоя системы.

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

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

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

Долговечность — обеспечивает сохранение результата или эффекта совершенной транзакции в случае сбоя системы.

В MySQL транзакции начинаются с оператора BEGIN WORK и заканчиваются оператором COMMIT или ROLLBACK. Команды SQLi между начальным и конечным операторами составляют основную часть транзакции.

COMMIT и ROLLBACK

Эти два ключевых слова Commit и Rollback в основном используются для транзакций MySQL.

  • Когда успешная транзакция завершена, необходимо выполнить команду COMMIT, чтобы изменения во всех задействованных таблицах вступили в силу.

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

Когда успешная транзакция завершена, необходимо выполнить команду COMMIT, чтобы изменения во всех задействованных таблицах вступили в силу.

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

Вы можете контролировать поведение транзакции, установив переменную сеанса AUTOCOMMIT . Если для AUTOCOMMIT задано значение 1 (по умолчанию), то каждый оператор SQL (внутри транзакции или нет) считается завершенной транзакцией и фиксируется по умолчанию после ее завершения. Когда для AUTOCOMMIT установлено значение 0, с помощью команды SET AUTOCOMMIT = 0 последующая серия операторов действует как транзакция, и никакие действия не фиксируются, пока не будет выполнен явный оператор COMMIT.

Вы можете выполнить эти команды SQL в PHP с помощью функции mysqli_query () .

Общий пример транзакции

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

Вы можете выполнить эти команды SQL в PHP с помощью функции mysqli_query () .

  • Начните транзакцию, введя команду SQL BEGIN WORK.

  • Выполните одну или несколько команд SQL, таких как SELECT, INSERT, UPDATE или DELETE.

  • Проверьте, нет ли ошибок, и все ли соответствует вашему требованию.

  • Если есть какая-либо ошибка, выполните команду ROLLBACK, в противном случае введите команду COMMIT.

Начните транзакцию, введя команду SQL BEGIN WORK.

Выполните одну или несколько команд SQL, таких как SELECT, INSERT, UPDATE или DELETE.

Проверьте, нет ли ошибок, и все ли соответствует вашему требованию.

Если есть какая-либо ошибка, выполните команду ROLLBACK, в противном случае введите команду COMMIT.

Транзакционно-безопасные типы таблиц в MySQLi

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

Поддержка таблиц InnoDB требует определенного параметра компиляции при компиляции MySQLi из исходного кода. Если ваша версия MySQLi не поддерживает InnoDB, попросите вашего интернет-провайдера создать версию MySQLi с поддержкой типов таблиц InnoDB или загрузить и установить бинарный дистрибутив MySQL-Max для Windows или Linux / UNIX и работать с типом таблицы в среда разработки.

Если ваша установка MySQLi поддерживает таблицы InnoDB, просто добавьте определение TYPE = InnoDB в оператор создания таблицы. Например, следующий код создает таблицу InnoDB с именем tutorials_innodb —

root@host# mysql -u root -p;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_innodb
   -> (
   -> tutorial_author varchar(40) NOT NULL,
   -> tutorial_count  INT
   -> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)

Проверьте следующую ссылку, чтобы узнать больше о — InnoDB

Вы можете использовать другие типы таблиц, такие как GEMINI или BDB , но это зависит от вашей установки, если он поддерживает эти два типа.

MySQLi — команда ALTER

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

Начнем с создания таблицы с именем tutorials_alter .

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> create table tutorials_alter
   -> (
   -> i INT,
   -> c CHAR(1)
   -> );
Query OK, 0 rows affected (0.27 sec)

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Удаление, добавление или изменение положения столбца

Предположим, что вы хотите удалить существующий столбец i из таблицы MySQLi, затем вы будете использовать предложение DROP вместе с командой ALTER следующим образом:

mysql> ALTER TABLE tutorials_alter  DROP i;

DROP не будет работать, если в таблице остается только один столбец.

Чтобы добавить столбец, используйте ADD и укажите определение столбца. Следующий оператор восстанавливает столбец i в tutorials_alter —

mysql> ALTER TABLE tutorials_alter ADD i INT;

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

mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)

Чтобы указать, что вы хотите столбец в определенной позиции в таблице, либо используйте FIRST, чтобы сделать его первым столбцом, либо AFTER col_name, чтобы указать, что новый столбец должен быть помещен после col_name. Попробуйте следующие операторы ALTER TABLE, используя SHOW COLUMNS после каждого, чтобы увидеть, какой эффект у каждого из них —

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

Спецификаторы FIRST и AFTER работают только с предложением ADD. Это означает, что если вы хотите изменить положение существующего столбца в таблице, вы должны сначала УДАЛИТЬ его, а затем ДОБАВИТЬ в новую позицию.

Изменение определения столбца или имени

Чтобы изменить определение столбца, используйте предложение MODIFY или CHANGE вместе с командой ALTER. Например, чтобы изменить столбец c с CHAR (1) на CHAR (10), сделайте это —

mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);

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

mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;

Если вы теперь используете CHANGE для преобразования j из BIGINT обратно в INT без изменения имени столбца, оператор будет таким, как ожидалось —

mysql> ALTER TABLE tutorials_alter CHANGE j j INT;

Влияние ALTER TABLE на нулевые атрибуты и атрибуты значений по умолчанию —

Когда вы изменяете или меняете столбец, вы также можете указать, может ли столбец содержать значения NULL и каково его значение по умолчанию. Фактически, если вы этого не сделаете, MySQLi автоматически назначит значения для этих атрибутов.

Вот пример, где столбец NOT NULL будет иметь значение 100 по умолчанию.

mysql> ALTER TABLE tutorials_alter 
   -> MODIFY j BIGINT NOT NULL DEFAULT 100;

Если вы не используете указанную выше команду, MySQLi заполнит значения NULL во всех столбцах.

Изменение значения столбца по умолчанию

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

mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | 1000    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

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

mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c     | char(10)   | YES  |     | NULL    |       |
| j     | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

Изменение типа таблицы

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

Чтобы узнать текущий тип таблицы, используйте оператор SHOW TABLE STATUS.

mysql>  SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
           Name: tutorials_alter
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2017-02-17 11:30:29
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

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

Чтобы переименовать таблицу, используйте опцию RENAME инструкции ALTER TABLE. Попробуйте следующий пример, чтобы переименовать tutorials_alter в tutorials_bks.

mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;

Вы можете использовать команду ALTER для создания и удаления INDEX для файла MySQL. Мы увидим эту функцию в следующей главе.

MySQLi — ИНДЕКСЫ

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

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

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

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

Операторы INSERT и UPDATE занимают больше времени для таблиц, имеющих индексы, где операторы SELECT становятся быстрыми для этих таблиц. Причина в том, что при выполнении вставки или обновления базе данных также необходимо вставлять или обновлять значения индекса.

Простой и уникальный индекс

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

CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);

Вы можете использовать один или несколько столбцов для создания индекса. Например, мы можем создать индекс для tutorials_inf, используя NAME_INDEX.

CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);

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

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

mysql> CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf (name DESC);

Команда ALTER для добавления и удаления INDEX

Существует четыре типа операторов для добавления индексов в таблицу:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) — этот оператор добавляет PRIMARY KEY, что означает, что индексированные значения должны быть уникальными и не могут быть NULL.

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) — этот оператор создает индекс, для которого значения должны быть уникальными (за исключением значений NULL, которые могут появляться несколько раз).

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list) — это добавляет обычный индекс, в котором любое значение может появляться более одного раза.

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) — это создает специальный индекс FULLTEXT, который используется для целей текстового поиска.

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) — этот оператор добавляет PRIMARY KEY, что означает, что индексированные значения должны быть уникальными и не могут быть NULL.

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) — этот оператор создает индекс, для которого значения должны быть уникальными (за исключением значений NULL, которые могут появляться несколько раз).

ALTER TABLE tbl_name ADD INDEX index_name (column_list) — это добавляет обычный индекс, в котором любое значение может появляться более одного раза.

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) — это создает специальный индекс FULLTEXT, который используется для целей текстового поиска.

Вот пример для добавления индекса в существующую таблицу.

mysql> ALTER TABLE tutorials_inf ADD INDEX (id);

Вы можете удалить любой INDEX, используя предложение DROP вместе с командой ALTER. Попробуйте следующий пример, чтобы удалить созданный выше индекс.

mysql> ALTER TABLE tutorials_inf DROP INDEX (c);

Вы можете удалить любой INDEX, используя предложение DROP вместе с командой ALTER. Попробуйте следующий пример, чтобы удалить созданный выше индекс.

Команда ALTER для добавления и удаления первичного ключа

Вы также можете добавить первичный ключ таким же образом. Но убедитесь, что Primary Key работает со столбцами, которые НЕ являются NULL.

Вот пример для добавления первичного ключа в существующую таблицу. Это сделает сначала столбец NOT NULL, а затем добавит его в качестве первичного ключа.

mysql>  ALTER TABLE tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);

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

mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;

Чтобы удалить индекс, который не является ПЕРВИЧНЫМ КЛЮЧОМ, необходимо указать имя индекса.

Отображение информации INDEX

Вы можете использовать команду SHOW INDEX для вывода списка всех индексов, связанных с таблицей. Вывод в вертикальном формате (заданный \ G) часто полезен с этим оператором, чтобы избежать переноса длинных строк —

Попробуйте следующий пример

mysql> SHOW INDEX FROM table_name \G
........

MySQLi — временные таблицы

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

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

пример

Вот пример, показывающий использование временной таблицы. Тот же код можно использовать в сценариях PHP с помощью функции mysqli_query () .

mysql> CREATE TEMPORARY TABLE SalesSummary (
   -> product_name VARCHAR(50) NOT NULL
   -> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
   -> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   -> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
   -> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO SalesSummary
   -> (product_name, total_sales, avg_unit_price, total_units_sold)
   -> VALUES
   -> ('cucumber', 100.25, 90, 2);

mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber     |      100.25 |          90.00 |                2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)

Когда вы запускаете команду SHOW TABLES, ваша временная таблица не будет указана в списке. Теперь, если вы выйдете из сеанса MySQLi, а затем введете команду SELECT, в базе данных не будет доступных данных. Даже ваша временная таблица также не будет существовать.

Удаление временных таблиц

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

Ниже приведен пример удаления временной таблицы:

mysql> DROP TABLE SalesSummary;
mysql>  SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist

MySQLi — таблицы клонов

Может возникнуть ситуация, когда вам нужна точная копия таблицы, и CREATE TABLE … SELECT не соответствует вашим целям, поскольку копия должна содержать те же индексы, значения по умолчанию и т. Д.

Вы можете справиться с этой ситуацией, следуя шагам —

  • Используйте SHOW CREATE TABLE, чтобы получить инструкцию CREATE TABLE, которая определяет структуру исходной таблицы, индексы и все.

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

  • По желанию, если вам также необходимо скопировать содержимое таблицы, введите оператор INSERT INTO … SELECT.

Используйте SHOW CREATE TABLE, чтобы получить инструкцию CREATE TABLE, которая определяет структуру исходной таблицы, индексы и все.

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

По желанию, если вам также необходимо скопировать содержимое таблицы, введите оператор INSERT INTO … SELECT.

пример

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

Шаг 1

Получить полную структуру о таблице.

mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

Шаг 2

Переименуйте эту таблицу и создайте другую таблицу.

mysql> CREATE TABLE tutorials_clone(
   -> id int(11) NOT NULL,
   -> name varchar(20) NOT NULL,
   -> PRIMARY KEY (id),
   > UNIQUE KEY AUTHOR_INDEX (name),
   -> UNIQUE KEY NAME_INDEX (name),
   ->  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

Шаг 3

После выполнения шага 2 вы создадите таблицу клонов в своей базе данных. Если вы хотите скопировать данные из старой таблицы, вы можете сделать это с помощью оператора INSERT INTO … SELECT.

mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

Наконец, у вас будет точная таблица клонов, как вы и хотели.

Получение и использование метаданных MySQLi

Есть три информации, которые вы хотели бы получить от MySQLi.

  • Информация о результате запросов — включает количество записей, затронутых любым оператором SELECT, UPDATE или DELETE.

  • Информация о таблицах и базах данных — включает в себя информацию, относящуюся к структуре таблиц и баз данных.

  • Информация о сервере MySQLi — включает текущее состояние сервера базы данных, номер версии и т. Д.

Информация о результате запросов — включает количество записей, затронутых любым оператором SELECT, UPDATE или DELETE.

Информация о таблицах и базах данных — включает в себя информацию, относящуюся к структуре таблиц и баз данных.

Информация о сервере MySQLi — включает текущее состояние сервера базы данных, номер версии и т. Д.

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

Получение количества строк, затронутых запросом

Пример PERL

В сценариях DBI количество затронутых строк возвращается do () или execute (), в зависимости от того, как вы выполняете запрос —

# Method 1
# execute $query using do( )
my $count = $dbh->do ($query);
# report 0 rows if an error occurred
printf "%d rows were affected\n", (defined ($count) ? $count : 0);

# Method 2
# execute query using prepare( ) plus execute( )
my $sth = $dbh->prepare ($query);
my $count = $sth->execute ( );
printf "%d rows were affected\n", (defined ($count) ? $count : 0);

Пример PHP

В PHP вызовите функцию mysqli_affered_rows (), чтобы узнать, сколько строк изменилось в запросе —

$result_id = mysqli_query ($query, $conn_id);
# report 0 rows if the query failed
$count = ($result_id ? mysqli_affected_rows ($conn_id) : 0);
print ("$count rows were affected\n");

Листинг таблиц и баз данных

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

Помимо метода, который я упомянул ниже, вы можете использовать запросы SHOW TABLES или SHOW DATABASES, чтобы получить список таблиц или баз данных либо в PHP, либо в PERL.

Пример PERL

# Get all the tables available in current database.
my @tables = $dbh->tables ( );
foreach $table (@tables ){
   print "Table Name $table\n";
}

Пример PHP

<?php
   $servername = "localhost:3306";
   $username = "root";
   $password = "";
   $dbname = "TUTORIALS";
   $conn = new mysqli($servername, $username, $password, $dbname);
   
   if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
   } 
   echo"Database connected";
   $sql="SHOW DATABASES";
   
   if (!($result = mysqli_query($conn,$sql))) {
      printf("Error: %s\n", mysqli_error($conn));
   }
   while( $row = mysqli_fetch_row( $result ) ){
      if (($row[0]!="information_schema") && ($row[0]!="mysql")) {
         echo $row[0]."\r\n";
      }
   }
   $conn->close();
?>

Получение метаданных сервера

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

Sr.No. Команда и описание
1

ВЫБЕРИТЕ ВЕРСИЮ ()

Строка версии сервера

2

ВЫБЕРИТЕ БАЗУ ДАННЫХ ()

Текущее имя базы данных (пусто, если нет)

3

ВЫБЕРИТЕ ПОЛЬЗОВАТЕЛЯ ()

Текущее имя пользователя

4

ПОКАЗАТЬ СТАТУС

Индикаторы состояния сервера

5

ПОКАЗАТЬ ПЕРЕМЕННЫЕ

Переменные конфигурации сервера

ВЫБЕРИТЕ ВЕРСИЮ ()

Строка версии сервера

ВЫБЕРИТЕ БАЗУ ДАННЫХ ()

Текущее имя базы данных (пусто, если нет)

ВЫБЕРИТЕ ПОЛЬЗОВАТЕЛЯ ()

Текущее имя пользователя

ПОКАЗАТЬ СТАТУС

Индикаторы состояния сервера

ПОКАЗАТЬ ПЕРЕМЕННЫЕ

Переменные конфигурации сервера

MySQLi — Использование последовательностей

Последовательность — это набор целых чисел 1, 2, 3, …, которые генерируются в порядке по требованию. Последовательности часто используются в базах данных, поскольку многие приложения требуют, чтобы каждая строка в таблице содержала уникальное значение, а последовательности обеспечивают простой способ их создания. Эта глава описывает, как использовать последовательности в MySQLi.

Использование столбца AUTO_INCREMENT

В MySQLi самый простой способ использовать Sequence — определить столбец как AUTO_INCREMENT и оставить все остальное на усмотрение MySQLi.

пример

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

mysql>CREATE TABLE tutorials_auto(
   id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)

mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
|  1 | sai  |
|  2 | ram  |
+----+------+
2 rows in set (0.05 sec)

Получить значения AUTO_INCREMENT

LAST_INSERT_ID () — это функция SQL, поэтому вы можете использовать ее из любого клиента, который понимает, как создавать операторы SQL. В противном случае сценарии PERL и PHP предоставляют эксклюзивные функции для получения автоматически увеличенного значения последней записи.

Пример PERL

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

$dbh->do ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_insertid};

Пример PHP

После выдачи запроса, который генерирует значение AUTO_INCREMENT, извлеките значение, вызвав mysql_insert_id () —

mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id);
$seq = mysqli_insert_id ($conn_id);

Изменение нумерации существующей последовательности

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

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

mysql> ALTER TABLE tutorials_auto DROP id;
mysql> ALTER TABLE tutorials_auto
   -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
   -> ADD PRIMARY KEY (id);

Начало последовательности по определенному значению

По умолчанию MySQLi запускает последовательность с 1, но вы можете указать и любой другой номер во время создания таблицы. Ниже приведен пример, где MySQLi начнет последовательность с 100.

mysql> CREATE TABLE tutorials_auto
   -> (
   -> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
   -> PRIMARY KEY (id),
   -> name VARCHAR(30) NOT NULL, 
   -> );

Кроме того, вы можете создать таблицу, а затем установить начальное значение последовательности с помощью ALTER TABLE.

mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;

MySQLi — обработка дубликатов

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

Предотвращение появления дубликатов в таблице

Вы можете использовать PRIMARY KEY или UNIQUE Index для таблицы с соответствующими полями, чтобы остановить повторяющиеся записи. Давайте рассмотрим один пример: следующая таблица не содержит такого индекса или первичного ключа, поэтому она допускает дублирование записей для first_name и last_name.

CREATE TABLE person_tbl (
   first_name CHAR(20),
   last_name CHAR(20),
   sex CHAR(10)
);

Чтобы предотвратить создание в этой таблице нескольких записей с одинаковыми значениями имени и фамилии, добавьте PRIMARY KEY к ее определению. Когда вы делаете это, необходимо также объявить индексированные столбцы как NOT NULL, потому что PRIMARY KEY не допускает значения NULL —

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10),
   PRIMARY KEY (last_name, first_name)
);

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

Используйте INSERT IGNORE, а не INSERT . Если запись не дублирует существующую запись, MySQLi вставляет ее как обычно. Если запись является дубликатом, ключевое слово IGNORE сообщает MySQLi о том, что он должен отбросить ее без предупреждения.

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

mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)

Используйте REPLACE вместо INSERT. Если запись новая, она вставляется так же, как с INSERT. Если это дубликат, новая запись заменяет старую —

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 1 row affected (0.00 sec)

mysql> REPLACE INTO person_tbl (last_name, first_name)
   -> VALUES( 'Ajay', 'Kumar');
Query OK, 2 rows affected (0.00 sec)

INSERT IGNORE и REPLACE следует выбирать в соответствии с поведением обработки дубликатов, которое вы хотите применить. INSERT IGNORE сохраняет первый из набора дублированных записей и отбрасывает остальные. REPLACE сохраняет последние из набора дубликатов и удаляет любые более ранние.

Другой способ обеспечить уникальность — добавить в таблицу индекс UNIQUE, а не PRIMARY KEY.

CREATE TABLE person_tbl (
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Подсчет и идентификация дубликатов

Ниже приведен запрос на подсчет повторяющихся записей с именем first_name и last_name в таблице.

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
   -> FROM person_tbl
   -> GROUP BY last_name, first_name
   -> HAVING repetitions > 1;

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

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

  • Перечислите эти столбцы в списке выбора столбцов вместе с COUNT (*).

  • Перечислите также столбцы в предложении GROUP BY.

  • Добавьте предложение HAVING, которое исключает уникальные значения, так как число групп должно быть больше единицы.

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

Перечислите эти столбцы в списке выбора столбцов вместе с COUNT (*).

Перечислите также столбцы в предложении GROUP BY.

Добавьте предложение HAVING, которое исключает уникальные значения, так как число групп должно быть больше единицы.

Исключение дубликатов из результата запроса:

Вы можете использовать DISTINCT вместе с оператором SELECT, чтобы найти уникальные записи, доступные в таблице.

mysql> SELECT DISTINCT last_name, first_name
   -> FROM person_tbl
   -> ORDER BY last_name;

Альтернативой DISTINCT является добавление предложения GROUP BY, которое именует выбранные вами столбцы. Это приводит к удалению дубликатов и выбору только уникальных комбинаций значений в указанных столбцах —

mysql> SELECT last_name, first_name
   -> FROM person_tbl
   -> GROUP BY (last_name, first_name);

Удаление дубликатов с помощью замены таблицы

Если у вас есть дубликаты записей в таблице, и вы хотите удалить все дубликаты записей из этой таблицы, то вот процедура:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
   -> FROM person_tbl;
   -> GROUP BY (last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

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