MySQLi - Краткое руководство
Что такое база данных?
База данных - это отдельное приложение, в котором хранится набор данных. Каждая база данных имеет один или несколько отдельных API-интерфейсов для создания, доступа, управления, поиска и репликации данных, которые она хранит.
Могут использоваться и другие типы хранилищ данных, такие как файлы в файловой системе или большие хеш-таблицы в памяти, но выборка и запись данных не будут такими быстрыми и легкими с такими типами систем.
Поэтому в настоящее время мы используем системы управления реляционными базами данных (РСУБД) для хранения и управления огромными объемами данных. Это называется реляционной базой данных, потому что все данные хранятся в разных таблицах, а отношения устанавливаются с использованием первичных ключей или других ключей, известных как внешние ключи.
А Relational DataBase Management System (RDBMS) это программное обеспечение, которое -
Позволяет реализовать базу данных с таблицами, столбцами и индексами.
Гарантирует ссылочную целостность между строками различных таблиц.
Обновляет индексы автоматически.
Интерпретирует SQL-запрос и объединяет информацию из различных таблиц.
Терминология СУБД
Прежде чем мы продолжим объяснять систему баз данных MySQLi, давайте пересмотрим несколько определений, связанных с базой данных.
Database - База данных - это набор таблиц со связанными данными.
Table- Таблица - это матрица с данными. Таблица в базе данных выглядит как простая электронная таблица.
Column - Один столбец (элемент данных) содержит данные одного и того же типа, например, почтовый индекс столбца.
Row - Строка (= кортеж, запись или запись) - это группа связанных данных, например, данные одной подписки.
Redundancy - Двойное хранение данных с резервированием для ускорения работы системы.
Primary Key- Первичный ключ уникален. Значение ключа не может встречаться дважды в одной таблице. С помощью ключа вы можете найти не более одной строки.
Foreign Key - Внешний ключ - это связующее звено между двумя таблицами.
Compound Key - Составной ключ (составной ключ) - это ключ, состоящий из нескольких столбцов, поскольку один столбец недостаточно уникален.
Index - Индекс в базе данных напоминает индекс в конце книги.
Referential Integrity - Ссылочная целостность гарантирует, что значение внешнего ключа всегда указывает на существующую строку.
База данных MySQLi
MySQLi - это быстрая и простая в использовании СУБД, используемая для многих малых и крупных предприятий. MySQLi Extension разрабатывается, продается и поддерживается MySQL. 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 .
Скачивание 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-client - Клиентские программы MySQL, позволяющие подключаться к серверу и взаимодействовать с ним.
MySQL-devel - Библиотеки и файлы заголовков, которые пригодятся при компиляции других программ, использующих MySQL.
MySQL-shared - Общие библиотеки для клиента MySQL.
MySQL-bench - Инструменты для тестирования производительности и производительности для сервера базы данных MySQL.
Все перечисленные здесь RPM MySQL созданы в системе SuSE Linux, но обычно они без труда работают и в других вариантах Linux.
Теперь выполните следующие шаги, чтобы продолжить установку -
Войдите в систему, используя root пользователь.
Перейдите в каталог, содержащий RPM -
Установите сервер базы данных MySQL, выполнив следующую команду. Не забудьте заменить имя файла курсивом на имя файла вашего RPM.
[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm
Это необязательный, но рекомендуемый шаг для установки остальных RPM таким же образом -
Вышеупомянутая команда отвечает за установку сервера MySQL, создание пользователя MySQL, создание необходимой конфигурации и автоматический запуск сервера MySQL.
Вы можете найти все связанные с MySQL двоичные файлы в / usr / bin и / usr / sbin. Все таблицы и базы данных будут созданы в каталоге / var / lib / mysql.
[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
NOTE - Если вы используете 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 является расширением 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, вам просто нужно добавить новую запись в user таблица в базе данных mysql.
Ниже приведен пример добавления нового пользователя. guest с привилегиями 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.
NOTE - 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.
SHOW DATABASES - Список баз данных, доступных СУБД MySQLi.
SHOW TABLES - Показывает таблицы в базе данных после выбора базы данных с помощью команды использования.
SHOW COLUMNS FROM tablename - Показывает атрибуты, типы атрибутов, ключевую информацию, разрешено ли значение NULL, значения по умолчанию и другую информацию для таблицы.
SHOW INDEX FROM tablename - Представляет подробную информацию обо всех индексах в таблице, включая ПЕРВИЧНЫЙ КЛЮЧ.
SHOW TABLE STATUS LIKE tablename\G - Сообщает подробную информацию о производительности и статистике СУБД MySQLi.
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 с использованием двоичного файла 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 с использованием PHP-скрипта
PHP предоставляет mysqli_connect()функция, чтобы открыть соединение с базой данных. Эта функция принимает пять параметров и возвращает идентификатор ссылки MySQLi в случае успеха или FALSE в случае неудачи.
Синтаксис
connection mysqli_connect(server,user,passwd,new_link,client_flag);
Sr.No. | Параметр и описание |
---|---|
1 | server Необязательно - имя хоста, на котором запущен сервер базы данных. Если не указано, то значение по умолчаниюlocalhost:3306. |
2 | user Необязательно - имя пользователя, имеющего доступ к базе данных. Если не указано, по умолчанию используется имя пользователя, которому принадлежит процесс сервера. |
3 | passwd Необязательно - пароль пользователя, имеющего доступ к базе данных. Если не указан, то по умолчанию используется пустой пароль. |
4 | new_link Необязательно - если второй вызов mysqli_connect () сделан с теми же аргументами, новое соединение не будет установлено; вместо этого будет возвращен идентификатор уже открытого соединения. |
5 | client_flags Необязательно - комбинация следующих констант -
|
Вы можете отключиться от базы данных MySQLi в любое время, используя другую функцию PHP. mysqli_close(). Эта функция принимает единственный параметр, который является соединением, возвращаемымmysqli_connect() функция.
Синтаксис
bool mysqli_close ( resource $link_identifier );
Если ресурс не указан, последняя открытая база данных закрывается. Эта функция возвращает истину, если она успешно закрывает соединение, в противном случае возвращает ложь.
пример
Попробуйте следующий пример для подключения к серверу 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
Создать базу данных с помощью mysqladmin
Вам потребуются особые привилегии для создания или удаления базы данных MySQLi. Итак, если у вас есть доступ к пользователю root, вы можете создать любую базу данных с помощью mysqlmysqladmin двоичный.
пример
Вот простой пример создания базы данных под названием TUTORIALS -
[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******
Это создаст базу данных MySQLi TUTORIALS.
Создать базу данных с помощью скрипта PHP
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
Удалить базу данных с помощью mysqladmin
Вам потребуются особые привилегии для создания или удаления базы данных MySQLi. Итак, если у вас есть доступ к пользователю root, вы можете создать любую базу данных с помощью mysqlmysqladmin двоичный.
Будьте осторожны при удалении любой базы данных, потому что вы потеряете все данные, доступные в вашей базе данных.
Вот пример удаления базы данных, созданной в предыдущей главе -
[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-скрипта
PHP использует 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 = "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>
WARNING- При удалении базы данных с помощью PHP-скрипта не требуется подтверждения. Так что будьте осторожны при удалении базы данных MySQLi.
Если база данных подключена и удалена успешно, то результат должен быть таким:
Connected successfully
Database deleted successfully
После того, как вы установили соединение с сервером MySQLi, необходимо выбрать конкретную базу данных для работы. Это связано с тем, что с MySQLi Server может быть доступно несколько баз данных.
Синтаксис
bool mysqli_select_db( db_name, connection );
Sr.No. | Параметр и описание |
---|---|
1 | db_name Обязательно - нужно выбрать имя базы данных MySQLi |
2 | connection Необязательно - если не указано, будет использоваться последнее открытое соединение 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
Правильное определение полей в таблице важно для общей оптимизации вашей базы данных. Вы должны использовать только тот тип и размер поля, которое вам действительно нужно; не определяйте поле шириной 10 символов, если вы знаете, что собираетесь использовать только 2 символа. Эти типы полей (или столбцов) также называются типами данных послеtype of data вы будете хранить в этих полях.
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 знаков для DOUBLE. REAL - это синоним DOUBLE.
DECIMAL(M,D) - Распакованное число с плавающей запятой, которое не может быть без знака. В неупакованных десятичных дробях каждое десятичное число соответствует одному байту. Требуется определение длины отображения (M) и количества десятичных знаков (D). NUMERIC является синонимом DECIMAL.
Типы даты и времени
Типы данных даты и времени MySQL:
DATE- Дата в формате ГГГГ-ММ-ДД, между 01.01.1000 и 31.12.9999. Например, 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 (ГГГГММДДЧЧММСС).
TIME - Сохраняет время в формате ЧЧ: ММ: СС.
YEAR(M)- Сохраняет год в 2-значном или 4-значном формате. Если длина указана как 2 (например, YEAR (2)), YEAR может быть от 1970 до 2069 (от 70 до 69). Если длина указана как 4, ГОД может быть от 1901 до 2155. Длина по умолчанию - 4.
Типы строк
Хотя числовые типы и типы даты - это весело, большинство данных, которые вы будете хранить, будут в строковом формате. В этом списке описаны общие строковые типы данных в MySQLi.
CHAR(M)- Строка фиксированной длины от 1 до 255 символов (например, CHAR (5)), дополненная справа пробелами до указанной длины при сохранении. Определение длины не требуется, но значение по умолчанию равно 1.
VARCHAR(M)- Строка переменной длины от 1 до 255 символов; например VARCHAR (25). Вы должны определить длину при создании поля VARCHAR.
BLOB or TEXT- Поле максимальной длиной 65535 символов. BLOB-объекты являются «большими двоичными объектами» и используются для хранения больших объемов двоичных данных, таких как изображения или другие типы файлов. Поля, определенные как ТЕКСТ, также содержат большие объемы данных; разница между ними заключается в том, что при сортировке и сравнении сохраненных данных учитывается регистр в больших двоичных объектах и не учитывается регистр в полях ТЕКСТ. Вы не указываете длину с помощью BLOB или TEXT.
TINYBLOB or TINYTEXT- Столбец BLOB или TEXT с максимальной длиной 255 символов. Вы не указываете длину с помощью TINYBLOB или TINYTEXT.
MEDIUMBLOB or MEDIUMTEXT- Столбец BLOB или TEXT с максимальной длиной 16777215 символов. Вы не указываете длину с MEDIUMBLOB или MEDIUMTEXT.
LONGBLOB or LONGTEXT- Столбец BLOB или TEXT с максимальной длиной 4294967295 символов. Вы не указываете длину с LONGBLOB или LONGTEXT.
ENUM - Перечисление, причудливый термин для обозначения списка. При определении ENUM вы создаете список элементов, из которых необходимо выбрать значение (или оно может быть NULL). Например, если вы хотите, чтобы ваше поле содержало «A», «B» или «C», вы должны определить ENUM как ENUM ('A', 'B', 'C') и только эти значения (или NULL) может когда-либо заполнить это поле.
Команда создания таблицы требует -
- Название таблицы
- Имена полей
- Определения для каждого поля
Синтаксис
Вот общий синтаксис 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используется для определения столбца как первичного ключа. Вы можете использовать несколько столбцов, разделенных запятыми, для определения первичного ключа.
Создание таблиц из командной строки
Создать таблицу MySQLi легко из приглашения mysql>. Вы будете использовать команду SQLCREATE 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>
NOTE - MySQLi не завершает команду, пока вы не поставите точку с запятой (;) в конце команды SQL.
Создание таблиц с помощью скрипта PHP
Чтобы создать новую таблицу в любой существующей базе данных, вам нужно будет использовать функцию 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 очень легко, но при удалении любой существующей таблицы нужно быть очень осторожным, потому что потерянные данные не будут восстановлены после удаления таблицы.
Синтаксис
Вот общий синтаксис SQL для удаления таблицы MySQLi -
DROP TABLE table_name ;
Удаление таблиц из командной строки
Это нужно просто выполнить DROP TABLE Команда SQL в приглашении 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, вам нужно будет использовать SQL INSERT INTOкоманда. Вы можете вставить данные в таблицу MySQLi, используя приглашение mysql> или любой сценарий, например PHP.
Синтаксис
Вот общий синтаксис SQL команды INSERT INTO для вставки данных в таблицу MySQLi:
INSERT INTO table_name
( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
Чтобы вставить строковые типы данных, необходимо заключить все значения в двойные или одинарные кавычки, например: - "value".
Вставка данных из командной строки
Это будет использовать команду 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)
NOTE- Обратите внимание, что все стрелки (->) не являются частью команды 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
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 атрибут.
Получение данных из командной строки -
Это будет использовать команду 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, а затем печатаются значения в строке.
NOTE - Всегда не забывайте помещать фигурные скобки, если вы хотите вставить значение массива непосредственно в строку.
Пример вывода должен быть таким -
Connected successfully
Name: ram
Name: kit
Name: abc
Мы видели 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Предложение работает как условие if на любом языке программирования. Это предложение используется для сравнения данного значения со значением поля, доступным в таблице MySQLi. Если данное значение извне равно доступному значению поля в таблице MySQLi, то он возвращает эту строку.
Вот список операторов, которые можно использовать с WHERE пункт.
Предположим, что поле A содержит 10, а поле B - 20, тогда -
Оператор | Описание | пример |
---|---|---|
знак равно | Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. | (A = B) неверно. |
знак равно | Проверяет, равны ли значения двух операндов или нет, если значения не равны, условие становится истинным. | (A! = B) верно. |
> | Проверяет, больше ли значение левого операнда, чем значение правого операнда, если да, то условие становится истинным. | (A> B) неверно. |
< | Проверяет, меньше ли значение левого операнда, чем значение правого операнда, если да, то условие становится истинным. | (A <B) верно. |
> = | Проверяет, больше ли значение левого операнда или равно значению правого операнда, если да, то условие становится истинным. | (A> = B) неверно. |
<= | Проверяет, меньше ли значение левого операнда или равно значению правого операнда, если да, то условие становится истинным. | (A <= B) верно. |
Предложение WHERE очень полезно, когда вы хотите получить выбранные строки из таблицы, особенно когда вы используете MySQLi Join. Объединения обсуждаются в другой главе.
Обычной практикой является поиск записей с использованием Primary Key чтобы сделать поиск быстрым.
Если данное условие не соответствует ни одной записи в таблице, запрос не вернет ни одной строки.
Получение данных из командной строки
Это будет использовать команду 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:
Вы можете использовать ту же команду 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. Вы можете сделать это с помощью SQLUPDATEкоманда. Это изменит любое значение поля любой таблицы MySQLi.
Синтаксис
Вот общий синтаксис SQL команды UPDATE для изменения данных в таблице MySQLi:
UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
Вы можете обновить одно или несколько полей вместе.
Вы можете указать любое условие, используя предложение WHERE.
Вы можете обновлять значения в одной таблице за раз.
Предложение WHERE очень полезно, когда вы хотите обновить выбранные строки в таблице.
Обновление данных из командной строки
Это будет использовать команду SQL UPDATE с предложением WHERE для обновления выбранных данных в таблице MySQLi tutorials_inf.
пример
Следующий пример обновит name поле для записи с 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
Вы можете использовать команду SQL UPDATE с или без WHERE CLAUSE в функции PHP mysqli_query(). Эта функция будет выполнять команду SQL аналогично тому, как она выполняется в приглашении mysql>.
пример
Попробуйте обновить следующий пример name поле для записи.
<?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, вы можете использовать команду SQL DELETE FROM. Вы можете использовать эту команду в командной строке mysql>, а также в любом скрипте, например PHP.
Синтаксис
Вот общий синтаксис SQL команды DELETE для удаления данных из таблицы MySQLi:
DELETE FROM table_name [WHERE Clause]
Если предложение WHERE не указано, все записи будут удалены из данной таблицы MySQLi.
Вы можете указать любое условие, используя предложение WHERE.
Вы можете удалять записи в одной таблице за раз.
Предложение WHERE очень полезно, когда вы хотите удалить выбранные строки в таблице.
Удаление данных из командной строки
Это будет использовать команду SQL DELETE с предложением WHERE для удаления выбранных данных в таблице MySQLi tutorials_inf.
пример
В следующем примере в 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
Мы видели SQL SELECTкоманда для извлечения данных из таблицы MySQLi. Мы также можем использовать условное предложение, называемоеWHERE пункт для выбора необходимых записей.
Предложение WHERE со знаком равенства (=) отлично работает там, где мы хотим получить точное совпадение. Например, если "name = 'sai'". Но может быть требование, когда мы хотим отфильтровать все результаты, в которых имя должно содержать «johar». Это можно сделать с помощью SQLLIKE предложение вместе с предложением 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 также для указания условия.
Использование предложения 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-скрипта
Вы можете использовать аналогичный синтаксис предложения 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
Мы видели 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 обычным способом для установки условия.
Использование предложения ORDER BY в командной строке
Это будет использовать команду SQL SELECT с предложением ORDER BY для извлечения данных из таблицы MySQLi tutorials_inf.
пример
Попробуйте следующий пример, который возвращает результат в порядке убывания.
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-скрипта
Вы можете использовать аналогичный синтаксис предложения 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
До сих пор мы получали данные только из одной таблицы за раз. Это нормально для простых дублей, но в большинстве случаев использования 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 записи идентификатора согласно запросу.
Использование объединений в PHP-скрипте
Вы можете использовать любой из вышеупомянутых SQL-запросов в PHP-скрипте. Вам нужно только передать SQL-запрос в функцию PHPmysqli_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 ЛЕВОЕ СОЕДИНЕНИЕ
Левое соединение MySQLi отличается от простого соединения. MySQLi LEFT JOIN уделяет особое внимание таблице слева.
Если я выполняю 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, и она станет более понятной при рассмотрении реальных примеров.
Мы видели SQL SELECT командовать вместе с WHERE предложение для выборки данных из таблицы MySQLi, но когда мы пытаемся дать условие, которое сравнивает значение поля или столбца с NULL, это не работает должным образом.
Для обработки такой ситуации MySQLi предоставляет три оператора
IS NULL - оператор возвращает истину, если значение столбца NULL.
IS NOT NULL - оператор возвращает истину, если значение столбца не равно 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 с LIKE ...%. MySQLi поддерживает другой тип операции сопоставления с образцом на основе регулярных выражений иREGEXPоператор. Если вы знакомы с PHP или PERL, то это очень просто понять, потому что это сопоставление очень похоже на те регулярные выражения сценариев.
Ниже приводится таблица выкройки, которую можно использовать вместе с REGEXP оператор.
Шаблон | Какой шаблон соответствует |
---|---|
^ | Начало строки |
$ | Конец строки |
. | Любой одиночный персонаж |
[...] | Любой символ, указанный в квадратных скобках |
[^ ...] | Любой символ, не указанный в квадратных скобках |
p1 | p2 | p3 | Чередование; соответствует любому из шаблонов p1, p2 или p3 |
* | Ноль или более экземпляров предыдущего элемента |
+ | Один или несколько экземпляров предыдущего элемента |
{n} | n экземпляров предыдущего элемента |
{m, 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)
Запрос на поиск всех имен, содержащих 'a'
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]';
Транзакция - это последовательная группа операций манипулирования базой данных, которая выполняется так, как если бы это была одна единая работа. Другими словами, транзакция никогда не будет завершена, если каждая отдельная операция в группе не будет успешной. Если какая-либо операция внутри транзакции завершится неудачно, вся транзакция завершится ошибкой.
Фактически вы объедините множество SQL-запросов в группу и будете выполнять их все вместе как часть транзакции.
Свойства транзакций
Транзакции имеют следующие четыре стандартных свойства, обычно обозначаемых аббревиатурой ACID -
Atomicity- обеспечивает успешное завершение всех операций внутри единицы работы; в противном случае транзакция прерывается в момент сбоя, а предыдущие операции возвращаются в исходное состояние.
Consistency - гарантирует, что база данных правильно меняет состояния после успешно совершенной транзакции.
Isolation - позволяет транзакциям работать независимо и прозрачно друг для друга.
Durability - гарантирует, что результат или эффект зафиксированной транзакции сохранится в случае сбоя системы.
В MySQL транзакции начинаются с оператора BEGIN WORK и заканчиваются оператором COMMIT или ROLLBACK. Команды SQLi между начальным и конечным операторами составляют основную часть транзакции.
COMMIT и ROLLBACK
Эти два ключевых слова Commit и Rollback в основном используются для транзакций MySQL.
Когда успешная транзакция завершена, следует подать команду 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.
Безопасные для транзакций типы таблиц в 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 Команда очень полезна, когда вы хотите изменить имя своей таблицы, любого поля таблицы или если вы хотите добавить или удалить существующий столбец в таблице.
Начнем с создания таблицы под названием 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 не будет работать, если в таблице остался единственный столбец.
Чтобы добавить столбец, используйте ДОБАВИТЬ и укажите определение столбца. Следующее утверждение восстанавливаетi столбец в tutorials_alter -
mysql> ALTER TABLE tutorials_alter ADD i INT;
После выполнения этого оператора testalter будет содержать те же два столбца, что и при первом создании таблицы, но не будет иметь такую же структуру. Это потому, что по умолчанию новые столбцы добавляются в конец таблицы. Так что хотяi изначально был первым столбцом в 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 и значения по умолчанию -
При ИЗМЕНЕНИИ или ИЗМЕНЕНИИ столбца вы также можете указать, может ли столбец содержать значения 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. Мы увидим эту функцию в следующей главе.
Индекс базы данных - это структура данных, которая повышает скорость операций в таблице. Индексы могут быть созданы с использованием одного или нескольких столбцов, что обеспечивает основу как для быстрого случайного поиска, так и для эффективного упорядочивания доступа к записям.
При создании индекса следует учитывать, какие столбцы будут использоваться для выполнения запросов 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 для добавления и удаления ИНДЕКС
Есть четыре типа операторов для добавления индексов в таблицу:
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);
Вы можете отбросить любой ИНДЕКС, используя предложение DROP вместе с командой ALTER. Попробуйте выполнить следующий пример, чтобы удалить созданный выше индекс.
mysql> ALTER TABLE tutorials_inf DROP INDEX (c);
Вы можете отбросить любой ИНДЕКС, используя предложение DROP вместе с командой ALTER. Попробуйте выполнить следующий пример, чтобы удалить созданный выше индекс.
ALTER Команда для добавления и удаления ПЕРВИЧНОГО КЛЮЧА
Таким же образом можно добавить первичный ключ. Но убедитесь, что первичный ключ работает со столбцами, которые НЕ НУЛЕНЫ.
Вот пример добавления первичного ключа в существующую таблицу. Это сначала сделает столбец НЕ 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
........
В некоторых случаях временные таблицы могут быть очень полезны для хранения временных данных. Самое важное, что следует знать о временных таблицах, - это то, что они будут удалены при завершении текущего сеанса клиента.
Как указывалось ранее, временные таблицы будут существовать только до тех пор, пока активен сеанс. Если вы запустите код в сценарии 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
Может возникнуть ситуация, когда вам понадобится точная копия таблицы и CREATE TABLE ... 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.
Information about the result of queries - Сюда входит количество записей, на которые влияет любой оператор SELECT, UPDATE или DELETE.
Information about tables and databases - Сюда входит информация, относящаяся к структуре таблиц и баз данных.
Information about the MySQLi server - Сюда входит текущий статус сервера базы данных, номер версии и т. Д.
Получить всю эту информацию в командной строке 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_affected_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 | SELECT VERSION( ) Строка версии сервера |
2 | SELECT DATABASE( ) Имя текущей базы данных (пусто, если нет) |
3 | SELECT USER( ) Текущее имя пользователя |
4 | SHOW STATUS Индикаторы состояния сервера |
5 | SHOW VARIABLES Переменные конфигурации сервера |
Последовательность - это набор целых чисел 1, 2, 3, ..., которые генерируются по запросу по запросу. Последовательности часто используются в базах данных, поскольку многие приложения требуют, чтобы каждая строка в таблице содержала уникальное значение, а последовательности обеспечивают простой способ их создания. В этой главе описывается, как использовать последовательности в MySQLi.
Использование столбца AUTO_INCREMENT
Самый простой способ использования последовательностей в MySQLi - это определить столбец как 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 неизбежно, способ сделать это - удалить столбец из таблицы, а затем добавить его снова. В следующем примере показано, как изменить нумерацию значений id в таблице насекомых с помощью этого метода.
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;
Таблицы или наборы результатов иногда содержат повторяющиеся записи. Иногда это разрешено, но иногда требуется остановить повторяющиеся записи. Иногда требуется выявить повторяющиеся записи и удалить их из таблицы. В этой главе описывается, как предотвратить появление повторяющихся записей в таблице и как удалить уже существующие повторяющиеся записи.
Предотвращение дублирования в таблице
Вы можете использовать PRIMARY KEY или же UNIQUEИндексируйте таблицу с соответствующими полями, чтобы избежать дублирования записей. Возьмем один пример: следующая таблица не содержит такого индекса или первичного ключа, поэтому она допускает дублирование записей для first_name и last_name.
CREATE TABLE person_tbl (
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
Чтобы предотвратить создание в этой таблице нескольких записей с одинаковыми значениями имени и фамилии, добавьте в ее определение ПЕРВИЧНЫЙ КЛЮЧ. Когда вы это делаете, также необходимо объявить индексированные столбцы как 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. Если это дубликат, новая запись заменяет старую -
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 сохраняет последние дубликаты и удаляет все более ранние.
Еще один способ обеспечить уникальность - добавить в таблицу УНИКАЛЬНЫЙ индекс, а не ПЕРВИЧНЫЙ КЛЮЧ.
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, которое исключает уникальные значения, требуя, чтобы количество групп было больше единицы.
Удаление дубликатов из результата запроса:
Вы можете использовать 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;
Простой способ удалить повторяющиеся записи из таблицы - добавить в эту таблицу ИНДЕКС или КЛЮЧ PRIMAY. Даже если эта таблица уже доступна, вы можете использовать эту технику для удаления повторяющихся записей, и вы будете в безопасности и в будущем.
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);