MariaDB - Краткое руководство

Приложение базы данных существует отдельно от основного приложения и хранит коллекции данных. Каждая база данных использует один или несколько API для создания, доступа, управления, поиска и репликации содержащихся в ней данных.

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

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

РСУБД предлагает следующие функции -

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

  • Они обеспечивают целостность ссылок в строках нескольких таблиц.

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

  • Они интерпретируют запросы и операции SQL при манипулировании данными или поиске данных из таблиц.

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

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

  • Database - База данных - это источник данных, состоящий из таблиц, содержащих связанные данные.

  • Table - Таблица, то есть электронная таблица, представляет собой матрицу, содержащую данные.

  • Column- Столбец, то есть элемент данных, представляет собой структуру, содержащую данные одного типа; например, даты отгрузки.

  • Row- Строка - это структура, объединяющая связанные данные; например, данные о клиенте. Он также известен как кортеж, запись или запись.

  • Redundancy - Этот термин относится к двойному хранению данных для ускорения работы системы.

  • Primary Key- Это относится к уникальной идентифицирующей ценности. Это значение не может встречаться в таблице дважды, и с ним связана только одна строка.

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

  • Compound Key- Составной ключ или составной ключ - это ключ, который относится к нескольким столбцам. Он относится к нескольким столбцам из-за того, что столбец не обладает уникальным качеством.

  • Index - Указатель практически идентичен указателю книги.

  • Referential Integrity - Этот термин означает, что все значения внешнего ключа указывают на существующие строки.

База данных MariaDB

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

Ключевые особенности MariaDB

Важными особенностями MariaDB являются -

  • Вся MariaDB находится под GPL, LGPL или BSD.

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

  • MariaDB использует стандартный и популярный язык запросов.

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

  • MariaDB предлагает поддержку PHP, одного из самых популярных языков веб-разработки.

  • MariaDB предлагает кластерную технологию Galera.

  • MariaDB также предлагает множество операций и команд, недоступных в MySQL, и устраняет / заменяет функции, отрицательно влияющие на производительность.

Начиная

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

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

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

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

Установка в LINUX / UNIX

Если вы хорошо знакомы с системами Linux / Unix, просто загрузите исходный код для сборки. Рекомендуемый нами способ установки - использовать пакеты распространения. MariaDB предлагает пакеты для следующих дистрибутивов Linux / Unix -

  • RedHat/CentOS/Fedora
  • Debian/Ubuntu

Следующие дистрибутивы включают пакет MariaDB в свои репозитории -

  • openSUSE
  • Arch Linux
  • Mageia
  • Mint
  • Slackware

Выполните следующие действия для установки в среде Ubuntu -

Step 1 - Войдите в систему как пользователь root.

Step 2 - Перейдите в каталог, содержащий пакет MariaDB.

Step 3 - Импортируйте ключ подписи GnuPG со следующим кодом -

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

Step 4 - Добавьте MariaDB в sources.listфайл. Откройте файл и добавьте следующий код -

sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/5.5/ubuntuprecise main'

Step 5 - Обновите систему следующим образом -

sudo apt-get update

Step 6 - Установите MariaDB со следующим -

sudo apt-get install mariadb-server

Установка в Windows

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

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

mysqld.exe --console

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

Тестирование установки

Выполните несколько простых задач, чтобы подтвердить работу и установку MariaDB.

Use the Admin Utility to Get Server Status

Просмотрите версию сервера с двоичным файлом mysqladmin.

[root@host]# mysqladmin --version

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

Execute Simple Commands with a Client

Откройте командную строку для MariaDB. Это должно подключить вас к MariaDB и разрешить выполнение команд. Введите простую команду следующим образом -

mysql> SHOW DATABASES;

После установки

После успешной установки MariaDB установите пароль root. При новой установке пароль будет пустым. Введите следующее, чтобы установить новый пароль -

mysqladmin -u root password "[enter your password here]";

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

mysql -u root -p
Enter password:*******

Обновление в Windows

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

Параметры вашего файла MySQL my.cnf должны работать с MariaDB. Однако MariaDB имеет много функций, которых нет в MySQL.

Учтите следующие конфликты в вашем файле my.cnf:

  • MariaDB по умолчанию использует механизм хранения Aria для временных файлов. Если у вас много временных файлов, измените размер ключевого буфера, если вы не используете таблицы MyISAM.

  • Если ваши приложения часто подключаются / отключаются, измените размер кэша потока.

  • Если вы используете более 100 подключений, используйте пул потоков.

Совместимость

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

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

  • Запустите mysqld (двоичный файл MariaDB).
  • Запустите сценарий запуска mysqld_safe.
  • Запустите сценарий запуска mysql.server.

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

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

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

Создайте новую учетную запись пользователя со следующим кодом -

CREATE USER 'newusername'@'localhost' IDENTIFIED BY 'userpassword';

Этот код добавляет строку в пользовательскую таблицу без каких-либо прав. У вас также есть возможность использовать хеш-значение для пароля. Предоставьте пользователю права с помощью следующего кода -

GRANT SELECT, INSERT, UPDATE, DELETE ON database1 TO 'newusername'@'localhost';

Другие привилегии включают практически все команды или операции, возможные в MariaDB. После создания пользователя выполните команду «FLUSH PRIVILEGES», чтобы обновить таблицы предоставления. Это позволяет использовать учетную запись пользователя.

Файл конфигурации

После сборки в Unix / Linux файл конфигурации «/etc/mysql/my.cnf» должен быть отредактирован, чтобы он выглядел следующим образом:

# Example mysql config file.
# You can copy this to one of:
# /etc/my.cnf to set global options,
# /mysql-data-dir/my.cnf to get server specific options or
# ~/my.cnf for user specific options.

#

# One can use all long options that the program supports.
# Run the program with --help to get a list of available options

# This will be passed to all mysql clients
[client]
#password = my_password
#port = 3306
#socket = /tmp/mysql.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# The MySQL server
[mysqld]
#port = 3306
#socket = /tmp/mysql.sock
temp-pool

# The following three entries caused mysqld 10.0.1-MariaDB (and possibly other
   versions) to abort...
# skip-locking
# set-variable = key_buffer = 16M
# set-variable = thread_cache = 4

loose-innodb_data_file_path = ibdata1:1000M
loose-mutex-deadlock-detector
gdb

######### Fix the two following paths

# Where you want to have your database
data = /path/to/data/dir

# Where you have your mysql/MariaDB source + sql/share/english
language = /path/to/src/dir/sql/share/english

[mysqldump]
quick
MariaDB
8
set-variable = max_allowed_packet=16M
[mysql]
no-auto-rehash

[myisamchk]
set-variable = key_buffer = 128M

Отредактируйте строки «data =» и «language =», чтобы они соответствовали вашей среде.

После изменения файла перейдите в исходный каталог и выполните следующее:

./scripts/mysql_install_db --srcdir = $PWD --datadir = /path/to/data/dir -- user = $LOGNAME

Опустите «$PWD” variable if you added datadir to the configuration file. Ensure “$LOGNAME »используется при запуске MariaDB версии 10.0.1.

Команды администрирования

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

  • USE [database name] - Устанавливает текущую базу данных по умолчанию.

  • SHOW DATABASES - Список баз данных, находящихся в настоящее время на сервере.

  • SHOW TABLES - Список всех невременных таблиц.

  • SHOW COLUMNS FROM [table name] - Предоставляет информацию о столбце, относящуюся к указанной таблице.

  • SHOW INDEX FROM TABLENAME [table name] - Предоставляет информацию индекса таблицы, относящуюся к указанной таблице.

  • SHOW TABLE STATUS LIKE [table name]\G – - Предоставляет таблицы с информацией о невременных таблицах, а шаблон, который появляется после предложения LIKE, используется для выборки имен таблиц.

MariaDB хорошо сотрудничает с широким спектром языков программирования и фреймворков, таких как PHP, C #, JavaScript, Ruby on Rails, Django и другими. PHP остается самым популярным из всех доступных языков из-за его простоты и исторического следа. В этом руководстве основное внимание уделяется PHP в партнерстве с MariaDB.

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

Функции PHP, которые вы будете использовать для MariaDB, соответствуют следующему формату -

mysql_function(value,value,...);

Вторая часть функции определяет ее действие. В этом руководстве используются следующие две функции:

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

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

<html>
   <head>
      <title>PHP and MariaDB</title>
   </head>

   <body>
      <?php
         $retval = mysql_function(value, [value,...]); if( !$retval ) {
            die ( "Error: Error message here" );
         }
         // MariaDB or PHP Statements
      ?>
   </body>
</html>

В следующем разделе мы рассмотрим основные задачи MariaDB, используя функции PHP.

Один из способов установить соединение с MariaDB состоит в использовании двоичного файла mysql в командной строке.

Бинарный MYSQL

Просмотрите пример, приведенный ниже.

[root@host]# mysql -u root -p

Enter password:******

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

Welcome to the MariaDB monitor. Commands end with ; or \g. 
Your MariaDB connection id is 122323232 
Server version: 5.5.40-MariaDB-log
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  
mysql>

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

Отключитесь от MariaDB через exit команда следующим образом -

mysql> exit

Скрипт подключения PHP

Другой способ подключения к MariaDB и отключения от него - использование сценария PHP. PHP предоставляетmysql_connect()функция открытия соединения с базой данных. Он использует пять необязательных параметров и возвращает идентификатор ссылки MariaDB после успешного подключения или false при неудачном подключении. Он также предоставляетmysql_close() функция закрытия соединений с базой данных, использующая единственный параметр.

Синтаксис

Просмотрите следующий синтаксис сценария подключения PHP -

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

Описание параметров приведено ниже -

Старший Нет Параметр и описание
1

server

Этот необязательный параметр указывает имя хоста, на котором запущен сервер базы данных. Его значение по умолчанию - «localhost: .3036».

2

user

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

3

passwd

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

4

new_link

Этот необязательный параметр указывает, что при втором вызове mysql_connect() с идентичными аргументами, а не для нового соединения, будет возвращен идентификатор текущего соединения.

5

client flags

Этот необязательный параметр использует комбинацию следующих постоянных значений -

  • MYSQL_CLIENT_SSL - использует ssl-шифрование.

  • MYSQL_CLIENT_COMPRESS - использует протокол сжатия.

  • MYSQL_CLIENT_IGNORE_SPACE - разрешает пробел после имен функций.

  • MYSQL_CLIENT_INTERACTIVE - разрешает интерактивный тайм-аут в секундах бездействия перед закрытием соединения.

Просмотрите синтаксис скрипта отключения PHP, приведенный ниже -

bool mysql_close ( resource $link_identifier );

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

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

<html>
   <head>
      <title>Connect to MariaDB Server</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'guest1'; $dbpass = 'guest1a';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
      
         if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($conn);
      ?>
   </body>
</html>

При успешном подключении вы увидите следующий вывод -

mysql> Connected successfully

Для создания или удаления баз данных в MariaDB требуются права, обычно предоставляемые только пользователям root или администраторам. Под этими учетными записями у вас есть два варианта создания базы данных - двоичный файл mysqladmin и сценарий PHP.

двоичный файл mysqladmin

В следующем примере демонстрируется использование двоичного файла mysqladmin при создании базы данных с именем Products -

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

Скрипт создания базы данных PHP

PHP использует mysql_queryфункция при создании базы данных MariaDB. Функция использует два параметра, один необязательный, и возвращает либо значение «истина» в случае успеха, либо «ложь» в противном случае.

Синтаксис

Просмотрите следующие create database script синтаксис -

bool mysql_query( sql, connection );

Описание параметров приведено ниже -

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

sql

Этот обязательный параметр состоит из SQL-запроса, необходимого для выполнения операции.

2

connection

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

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

<html>
   <head>
      <title>Create a MariaDB Database</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'root';
         $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }

         echo 'Connected successfully<br />';
         $sql = 'CREATE DATABASE PRODUCTS'; $retval = mysql_query( $sql, $conn );
      
         if(! $retval ) { die('Could not create database: ' . mysql_error()); } echo "Database PRODUCTS created successfully\n"; mysql_close($conn);
      ?>
   </body>
</html>

При успешном удалении вы увидите следующий вывод -

mysql> Database PRODUCTS created successfully 
mysql> SHOW DATABASES; 
+-----------------------+ 
| Database              | 
+-----------------------+ 
| PRODUCTS              | 
+-----------------------+

Для создания или удаления баз данных в MariaDB требуются права, обычно предоставляемые только пользователям root или администраторам. Под этими учетными записями у вас есть два варианта удаления базы данных: двоичный файл mysqladmin и сценарий PHP.

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

двоичный файл mysqladmin

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

[root@host]# mysqladmin -u root -p drop PRODUCTS
Enter password:******
mysql> DROP PRODUCTS
ERROR 1008 (HY000): Can't drop database 'PRODUCTS'; database doesn't exist

Скрипт базы данных удаления PHP

PHP использует mysql_queryфункция удаления баз данных MariaDB. Функция использует два параметра, один необязательный, и возвращает либо значение «истина» в случае успеха, либо «ложь» в противном случае.

Синтаксис

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

bool mysql_query( sql, connection );

Описание параметров приведено ниже -

Старший Нет Параметр и описание
1

sql

Этот обязательный параметр состоит из SQL-запроса, необходимого для выполнения операции.

2

connection

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

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

<html>
   <head>
      <title>Delete a MariaDB Database</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'root';
         $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         
         $sql = 'DROP DATABASE PRODUCTS'; $retval = mysql_query( $sql, $conn );
         
         if(! $retval ){ die('Could not delete database: ' . mysql_error()); } echo "Database PRODUCTS deleted successfully\n"; mysql_close($conn);
      ?>
   </body>
</html>

При успешном удалении вы увидите следующий вывод -

mysql> Database PRODUCTS deleted successfully

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

Командная строка

При выборе базы данных в командной строке просто используйте команду SQL ‘use’ -

[root@host]# mysql -u root -p

Enter password:******

mysql> use PRODUCTS;

Database changed

mysql> SELECT database();  
+-------------------------+ 
| Database                | 
+-------------------------+ 
| PRODUCTS                | 
+-------------------------+

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

Note- Все имена (например, база данных, таблица, поля) чувствительны к регистру. Убедитесь, что команды соответствуют правильному регистру.

Сценарий выбора базы данных PHP

PHP предоставляет mysql_select_dbфункция выбора базы данных. Функция использует два параметра, один необязательный, и возвращает значение «истина» при успешном выборе или ложь при неудаче.

Синтаксис

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

bool mysql_select_db( db_name, connection );

Описание параметров приведено ниже -

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

db_name

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

2

connection

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

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

<html>
   <head>
      <title>Select a MariaDB Database</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036'; $dbuser = 'guest1';
         $dbpass = 'guest1a'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully';
         
         mysql_select_db( 'PRODUCTS' );
         mysql_close($conn);
      ?>
   </body>
</html>

При успешном выборе вы увидите следующий результат -

mysql> Connected successfully

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

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

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

Числовые типы данных, поддерживаемые MariaDB, следующие:

  • TINYINT - Этот тип данных представляет небольшие целые числа, попадающие в диапазон со знаком от -128 до 127 и диапазон без знака от 0 до 255.

  • BOOLEAN - Этот тип данных связывает значение 0 с «ложью» и значение 1 с «истиной».

  • SMALLINT - Этот тип данных представляет целые числа в диапазоне от -32768 до 32768 со знаком и диапазоне от 0 до 65535 без знака.

  • MEDIUMINT - Этот тип данных представляет целые числа в диапазоне со знаком от -8388608 до 8388607 и в диапазоне без знака от 0 до 16777215.

  • INT(also INTEGER)- Этот тип данных представляет собой целое число нормального размера. Если помечено как беззнаковое, диапазон охватывает от 0 до 4294967295. Если подписан (настройка по умолчанию), диапазон охватывает от -2147483648 до 2147483647. Когда для столбца установлено значение ZEROFILL (беззнаковое состояние), все его значения начинаются с нуля для размещения M цифр в значении INT.

  • BIGINT - Этот тип данных представляет целые числа в диапазоне со знаком от 9223372036854775808 до 9223372036854775807 и в диапазоне без знака от 0 до 18446744073709551615.

  • DECIMAL(также DEC, NUMERIC, FIXED) - этот тип данных представляет точные числа с фиксированной запятой, где M указывает свои цифры, а D указывает цифры после десятичной дроби. В значение M не добавляется «-» или десятичная точка. Если для D установлено значение 0, десятичная или дробная часть не отображается, а значение будет округлено до ближайшего ДЕСЯТИЧНОГО ЧИСЛА при ВСТАВИТЕ. Максимально допустимое количество цифр - 65, а максимальное количество десятичных знаков - 30. Значение по умолчанию для M при пропуске равно 10 и 0 для D при пропуске.

  • FLOAT - Этот тип данных представляет собой небольшое число с плавающей запятой значения 0 или число в следующих диапазонах:

    • -3.402823466E + 38 до -1.175494351E-38

    • С 1.175494351E-38 до 3.402823466E + 38

  • DOUBLE (также REAL и DOUBLE PRECISION) - Этот тип данных представляет собой числа с плавающей запятой нормального размера со значением 0 или в следующих диапазонах:

    • -1.7976931348623157E + 308 до -2.2250738585072014E-308

    • 2.2250738585072014E-308 до 1.7976931348623157E + 308

  • BIT- Этот тип данных представляет собой битовые поля, где M указывает количество бит на значение. Если пропустить M, значение по умолчанию равно 1. Битовые значения могут применяться с «b '[value]'», в котором значение представляет битовое значение в 0 и 1. Нулевое заполнение выполняется автоматически слева на всю длину; например, «10» становится «0010».

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

Типы данных даты и времени, поддерживаемые MariaDB, следующие:

  • DATE - Этот тип данных представляет диапазон дат от «1000-01-01» до «9999-12-31» и использует формат даты «ГГГГ-ММ-ДД».

  • TIME - Этот тип данных представляет временной диапазон от «-838: 59: 59.999999» до «838: 59: 59.999999».

  • DATETIME- Этот тип данных представляет собой диапазон от «1000-01-01 00: 00: 00.000000» до «9999-12-31 23: 59: 59.999999». Он использует формат «ГГГГ-ММ-ДД ЧЧ: ММ: СС».

  • TIMESTAMP- Этот тип данных представляет собой метку времени в формате «ГГГГ-ММ-ДД ЧЧ: ММ: ДД». В основном он находит применение при детализации времени модификаций базы данных, например, вставки или обновления.

  • YEAR- Этот тип данных представляет год в 4-значном формате. Четырехзначный формат допускает значения в диапазоне от 1901 до 2155 и 0000.

Строковые типы данных

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

  • String literals - Этот тип данных представляет собой последовательности символов, заключенные в кавычки.

  • CHAR- Этот тип данных представляет собой строку фиксированной длины с правым заполнением, содержащую пробелы указанной длины. M представляет длину столбца символов в диапазоне от 0 до 255, его значение по умолчанию - 1.

  • VARCHAR - Этот тип данных представляет строку переменной длины с диапазоном M (максимальная длина столбца) от 0 до 65535.

  • BINARY - Этот тип данных представляет двоичные байтовые строки, где M - длина столбца в байтах.

  • VARBINARY - Этот тип данных представляет двоичные байтовые строки переменной длины, где M - длина столбца.

  • TINYBLOB- Этот тип данных представляет столбец больших двоичных объектов с максимальной длиной 255 (28-1) байтов. В хранилище каждый использует префикс длиной в один байт, указывающий количество байтов в значении.

  • BLOB- Этот тип данных представляет столбец больших двоичных объектов с максимальной длиной 65 535 (216 - 1) байт. В хранилище каждый использует двухбайтовый префикс, указывающий количество байтов в значении.

  • MEDIUMBLOB- Этот тип данных представляет столбец больших двоичных объектов с максимальной длиной 16 777 215 (2 24 - 1) байт. В хранилище каждый использует трехбайтовый префикс, указывающий количество байтов в значении.

  • LONGBLOB- Этот тип данных представляет столбец больших двоичных объектов с максимальной длиной 4 294 967 295 (2 32 - 1) байт. В хранилище каждый использует префикс длиной в четыре байта, указывающий количество байтов в значении.

  • TINYTEXT- Этот тип данных представляет собой текстовый столбец с максимальной длиной 255 (2 8 - 1) символов. В хранилище каждый использует префикс длиной в один байт, указывающий количество байтов в значении.

  • TEXT- Этот тип данных представляет собой текстовый столбец с максимальной длиной 65 535 (2 16 - 1) символов. В хранилище каждый использует двухбайтовый префикс, указывающий количество байтов в значении.

  • MEDIUMTEXT- Этот тип данных представляет собой текстовый столбец с максимальной длиной 16 777 215 (2 24 - 1) символов. В хранилище каждый использует трехбайтовый префикс, указывающий количество байтов в значении.

  • LONGTEXT- Этот тип данных представляет собой текстовый столбец с максимальной длиной 4 294 967 295 или 4 ГБ (2 32 - 1) символов. В хранилище каждый использует префикс длиной в четыре байта, указывающий количество байтов в значении.

  • ENUM - Этот тип данных представляет собой строковый объект, имеющий только одно значение из списка.

  • SET- Этот тип данных представляет собой строковый объект, имеющий ноль или более значений из списка с максимум 64 элементами. Значения SET представлены внутри как целые числа.

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

Ниже приведен общий синтаксис для создания таблицы -

CREATE TABLE table_name (column_name column_type);

Просмотрите команду, примененную для создания таблицы в базе данных ПРОДУКТОВ -

databaseproducts_ tbl(
   product_id INT NOT NULL AUTO_INCREMENT,
   product_name VARCHAR(100) NOT NULL,
   product_manufacturer VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( product_id )
);

В приведенном выше примере в качестве атрибута поля используется «NOT NULL», чтобы избежать ошибок, вызванных нулевым значением. Атрибут «AUTO_INCREMENT» указывает MariaDB добавить следующее доступное значение в поле идентификатора. Первичный ключ ключевого слова определяет столбец какprimary key. Несколько столбцов, разделенных запятыми, могут определять первичный ключ.

Два основных метода создания таблиц - использование командной строки и сценария PHP.

Командная строка

Используйте команду CREATE TABLE для выполнения задачи, как показано ниже -

root@host# mysql -u root -p
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> CREATE TABLE products_tbl(
   -> product_id INT NOT NULL AUTO_INCREMENT,
   -> product_name VARCHAR(100) NOT NULL,
   -> product_manufacturer VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( product_id )
   -> );
mysql> SHOW TABLES;
+------------------------+
| PRODUCTS               |
+------------------------+
| products_tbl           |
+------------------------+

Убедитесь, что все команды заканчиваются точкой с запятой.

Скрипт создания таблицы PHP

PHP предоставляет mysql_query()для создания таблицы. Его второй аргумент содержит необходимую команду SQL -

<html>
   <head>
      <title>Create a MariaDB Table</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root'; $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
      
         if(! $conn ){ die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = "CREATE TABLE products_tbl( ".
            "product_id INT NOT NULL AUTO_INCREMENT, ".
            "product_name VARCHAR(100) NOT NULL, ".
            "product_manufacturer VARCHAR(40) NOT NULL, ".
            "submission_date DATE, ".
            "PRIMARY KEY ( product_id )); ";
      
         mysql_select_db( 'PRODUCTS' );
         $retval = mysql_query( $sql, $conn ); if(! $retval ) {
            die('Could not create table: ' . mysql_error());
         }
         echo "Table created successfully\n";
         
         mysql_close($conn);
      ?>
   </body>
</html>

При успешном создании таблицы вы увидите следующий вывод -

mysql> Table created successfully

В этой главе мы научимся удалять таблицы.

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

DROP TABLE table_name ;

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

Командная строка

В командной строке просто используйте DROP TABLE Команда SQL -

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

mysql> SELECT * from products_tbl
ERROR 1146 (42S02): Table 'products_tbl' doesn't exist

Скрипт выпадающей таблицы PHP

PHP предоставляет mysql_query()для сброса столов. Просто передайте второй аргумент соответствующей команде SQL -

<html>
   <head>
      <title>Create a MariaDB Table</title>
   </head>

   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root'; $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = "DROP TABLE products_tbl";
         mysql_select_db( 'PRODUCTS' );
         $retval = mysql_query( $sql, $conn ); if(! $retval ) {
            die('Could not delete table: ' . mysql_error());
         }
         echo "Table deleted successfully\n";
         
         mysql_close($conn);
      ?>
   </body>
</html>

При успешном удалении таблицы вы увидите следующий вывод -

mysql> Table deleted successfully

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

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

Просмотрите его общий синтаксис, приведенный ниже -

INSERT INTO tablename (field,field2,...) VALUES (value, value2,...);

Этот оператор требует использования одинарных или двойных кавычек для строковых значений. Другие параметры для оператора включают операторы «INSERT ... SET», «INSERT ... SELECT» и несколько других параметров.

Note - Функция VALUES (), которая появляется внутри оператора, применяется только к операторам INSERT и возвращает NULL, если используется в другом месте.

Существуют два варианта выполнения операции: использование командной строки или использование сценария PHP.

Командная строка

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

belowmysql>
INSERT INTO products_tbl (ID_number, Nomenclature) VALUES (12345,“Orbitron 4000”);
mysql> SHOW COLUMNS FROM products_tbl;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| ID_number   | int(5)      |      |     |         |       |
| Nomenclature| char(13)    |      |     |         |       |
+-------------+-------------+------+-----+---------+-------+

Вы можете вставить несколько строк -

INSERT INTO products VALUES (1, “first row”), (2, “second row”);

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

INSERT INTO products SELECT * FROM inventory WHERE status = 'available';

Скрипт вставки PHP

Используйте тот же оператор «INSERT INTO ...» в функции PHP для выполнения операции. Вы будете использоватьmysql_query() функция еще раз.

Просмотрите пример, приведенный ниже -

<?php
   if(isset($_POST['add'])) {
      $dbhost = 'localhost:3036'; $dbuser = 'root';
      $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
         die('Could not connect: ' . mysql_error());
      }

      if(! get_magic_quotes_gpc() ) {
         $product_name = addslashes ($_POST['product_name']);
         $product_manufacturer = addslashes ($_POST['product_name']);
      } else {
         $product_name = $_POST['product_name'];
         $product_manufacturer = $_POST['product_manufacturer'];
      }
      $ship_date = $_POST['ship_date'];
      $sql = "INSERT INTO products_tbl ". "(product_name,product_manufacturer, ship_date) ". "VALUES"."('$product_name','$product_manufacturer','$ship_date')";

      mysql_select_db('PRODUCTS');
      $retval = mysql_query( $sql, $conn ); if(! $retval ) {
         die('Could not enter data: ' . mysql_error());
      }

      echo "Entered data successfully\n";
      mysql_close($conn);
   }
?>

При успешной вставке данных вы увидите следующий вывод -

mysql> Entered data successfully

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

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

Операторы SELECT извлекают выбранные строки. Они могут включать инструкции UNION, предложение упорядочивания, предложение LIMIT, предложение WHERE, предложение GROUP BY ... HAVING и подзапросы.

Просмотрите следующий общий синтаксис -

SELECT field, field2,... FROM table_name, table_name2,... WHERE...

Оператор SELECT предоставляет несколько вариантов для указания используемой таблицы -

  • database_name.table_name

  • table_name.column_name

  • database_name.table_name.column_name

Все операторы выбора должны содержать один или несколько select expressions. Выражения выбора состоят из одной из следующих опций -

  • Имя столбца.

  • Выражение, использующее операторы и функции.

  • Спецификация «table_name. *» Для выбора всех столбцов в данной таблице.

  • Символ «*» для выбора всех столбцов из всех таблиц, указанных в предложении FROM.

Командная строка или сценарий PHP могут использоваться для выполнения оператора select.

Командная строка

В командной строке выполните следующие инструкции:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> SELECT * from products_tbl
+-------------+---------------+
| ID_number   | Nomenclature  |
+-------------+---------------+
| 12345       | Orbitron 4000 |
+-------------+---------------+

Сценарий выбора PHP

Используйте тот же оператор SELECT в функции PHP для выполнения операции. Вы будете использоватьmysql_query()функция еще раз. Просмотрите пример, приведенный ниже -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name,product_manufacturer, ship_date FROM products_tbl';
   mysql_select_db('PRODUCTS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Product ID :{$row['product_id']} <br> ". "Name: {$row['product_name']} <br> ".
         "Manufacturer: {$row['product_manufacturer']} <br> ". "Ship Date : {$row['ship_date']} <br>".
         "--------------------------------<br>";
   }

   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

При успешном извлечении данных вы увидите следующий вывод -

Product ID: 12345
Nomenclature: Orbitron 4000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 12346
Nomenclature: Orbitron 3000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
mysql> Fetched data successfully

Лучшие практики предлагают освобождать память курсора после каждого оператора SELECT. PHP предоставляетmysql_free_result()функция для этой цели. Просмотрите его использование, как показано ниже -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root'; $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl';
   mysql_select_db('PRODUCTS');
   $retval = mysql_query( $sql, $conn ); if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Product ID :{$row[0]} <br> ". "Name: {$row[1]} <br> ".
         "Manufacturer: {$row[2]} <br> ". "Ship Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }

   mysql_free_result($retval); echo "Fetched data successfully\n"; mysql_close($conn);
?>

WHEREпредложения фильтруют различные операторы, такие как SELECT, UPDATE, DELETE и INSERT. Они представляют критерии, используемые для определения действий. Обычно они появляются после имени таблицы в операторе, а затем следуют их условия. Предложение WHERE по существу работает как оператор if.

Просмотрите общий синтаксис предложения WHERE, приведенный ниже -

[COMMAND] field,field2,... FROM table_name,table_name2,... WHERE [CONDITION]

Обратите внимание на следующие качества предложения WHERE -

  • Это необязательно.

  • Это позволяет указать любое условие.

  • Он позволяет указывать несколько условий с помощью оператора AND или OR.

  • Чувствительность к регистру применяется только к операторам, использующим сравнения LIKE.

Предложение WHERE разрешает использование следующих операторов:

Оператор
=! =
> <
> = <=

Предложения WHERE можно использовать в командной строке или в сценарии PHP.

Командная строка

В командной строке просто используйте стандартную команду -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> SELECT * from products_tbl WHERE product_manufacturer = 'XYZ Corp';
+-------------+----------------+----------------------+
| ID_number   | Nomenclature   | product_manufacturer |
+-------------+----------------+----------------------+
| 12345       | Orbitron 4000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12346       | Orbitron 3000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12347       | Orbitron 1000  | XYZ Corp             |
+-------------+----------------+----------------------+

Просмотрите пример, используя AND состояние -

SELECT *
FROM products_tbl
WHERE product_name = 'Bun Janshu 3000';
AND product_id <= 344;

В этом примере сочетаются условия И и ИЛИ.

SELECT *
FROM products_tbl
WHERE (product_name = 'Bun Janshu 3000' AND product_id < 344)
OR (product_name = 'Bun Janshu 3000');

Скрипты PHP с использованием предложения Where

Использовать mysql_query() функция в операциях с использованием предложения WHERE -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl WHERE product_manufacturer = "XYZ Corp"'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID :{$row['product_id']} <br> ".
         "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ".
         "Ship Date: {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

При успешном извлечении данных вы увидите следующий вывод -

Product ID: 12345
Nomenclature: Orbitron 4000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 12346
Nomenclature: Orbitron 3000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
Product ID: 12347
Nomenclature: Orbitron 1000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
mysql> Fetched data successfully

В UPDATEКоманда изменяет существующие поля, изменяя значения. Он использует предложение SET, чтобы указать столбцы для модификации и указать новые присвоенные значения. Эти значения могут быть выражением или значением поля по умолчанию. Установка значения по умолчанию требует использования ключевого слова DEFAULT. Команда также может использовать предложение WHERE для указания условий обновления и / или предложение ORDER BY для обновления в определенном порядке.

Просмотрите следующий общий синтаксис -

UPDATE table_name SET field=new_value, field2=new_value2,...
[WHERE ...]

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

Командная строка

В командной строке просто используйте стандартный commandroot -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> UPDATE products_tbl
   SET nomenclature = 'Fiber Blaster 300Z' WHERE ID_number = 112;
mysql> SELECT * from products_tbl WHERE ID_number='112';
+-------------+---------------------+----------------------+
| ID_number   | Nomenclature        | product_manufacturer |
+-------------+---------------------+----------------------+
| 112         | Fiber Blaster 300Z  | XYZ Corp             |
+-------------+---------------------+----------------------+

Сценарий запроса обновления PHP

Использовать mysql_query() функция в операторах команды UPDATE -

<?php
   $dbhost = ‘localhost:3036’; $dbuser = ‘root’;
   $dbpass = ‘rootpassword’; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die(‘Could not connect: ‘ . mysql_error());
   }

   $sql = ‘UPDATE products_tbl SET product_name = ”Fiber Blaster 300z” WHERE product_id = 112’; mysql_select_db(‘PRODUCTS’); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die(‘Could not update data: ‘ . mysql_error()); } echo “Updated data successfully\n”; mysql_close($conn);
?>

При успешном обновлении данных вы увидите следующий вывод -

mysql> Updated data successfully

Команда DELETE удаляет строки таблицы из указанной таблицы и возвращает удаленное количество. Доступ к количеству, удаленному с помощью функции ROW_COUNT (). Предложение WHERE определяет строки, и при его отсутствии все строки удаляются. Предложение LIMIT контролирует количество удаленных строк.

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

Просмотрите следующий синтаксис DELETE -

DELETE FROM table_name [WHERE …]

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

Командная строка

В командной строке просто используйте стандартную команду -

root@host# mysql –u root –p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> DELETE FROM products_tbl WHERE product_id=133;
mysql> SELECT * from products_tbl WHERE ID_number='133';
ERROR 1032 (HY000): Can't find record in 'products_tbl'

Скрипт запроса удаления PHP

Использовать mysql_query() функция в операторах команды DELETE -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'DELETE FROM products_tbl WHERE product_id = 261'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die('Could not delete data: ' . mysql_error()); } echo "Deleted data successfully\n"; mysql_close($conn);
?>

При успешном удалении данных вы увидите следующий вывод -

mysql> Deleted data successfully
mysql> SELECT * from products_tbl WHERE ID_number='261';
ERROR 1032 (HY000): Can't find record in 'products_tbl'

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

Предложение LIKE проверяет соответствие шаблону, возвращая истину или ложь. Шаблоны, используемые для сравнения, принимают следующие подстановочные знаки: «%», что соответствует количеству символов (0 или более); и «_», что соответствует одному символу. Подстановочный знак «_» соответствует только символам в его наборе, то есть он будет игнорировать латинские символы при использовании другого набора. По умолчанию совпадения нечувствительны к регистру, что требует дополнительных настроек чувствительности к регистру.

Предложение NOT LIKE позволяет тестировать противоположное условие, как и not оператор.

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

Просмотрите общий синтаксис предложения LIKE, приведенный ниже -

SELECT field, field2,... FROM table_name, table_name2,...
WHERE field LIKE condition

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

Командная строка

В командной строке просто используйте стандартную команду -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from products_tbl
   WHERE product_manufacturer LIKE 'XYZ%';
+-------------+----------------+----------------------+
| ID_number   | Nomenclature   | product_manufacturer |
+-------------+----------------+----------------------+
| 12345       | Orbitron 4000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12346       | Orbitron 3000  | XYZ Corp             |
+-------------+----------------+----------------------+
| 12347       | Orbitron 1000  | XYZ Corp             |
+-------------+----------------+----------------------+

Скрипт PHP с использованием предложения Like

Использовать mysql_query() функция в операторах, использующих предложение LIKE

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl WHERE product_manufacturer LIKE "xyz%"'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID:{$row['product_id']} <br> ".
         "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ".
         "Ship Date: {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

При успешном извлечении данных вы увидите следующий вывод -

Product ID: 12345
Nomenclature: Orbitron 4000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 12346
Nomenclature: Orbitron 3000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
Product ID: 12347
Nomenclature: Orbitron 1000
Manufacturer: XYZ Corp
Ship Date: 01/02/17
----------------------------------------------
mysql> Fetched data successfully

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

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

Просмотрите общий синтаксис предложения ORDER BY, приведенного ниже -

SELECT field, field2,... [or column] FROM table_name, table_name2,...
ORDER BY field, field2,... ASC[or DESC]

Используйте предложение ORDER BY либо в командной строке, либо в сценарии PHP.

Командная строка

В командной строке просто используйте стандартную команду -

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

mysql> SELECT * from products_tbl ORDER BY product_manufacturer ASC
+-------------+----------------+----------------------+
| ID_number   | Nomenclature   | product_manufacturer |
+-------------+----------------+----------------------+
| 56789       | SuperBlast 400 | LMN Corp             |
+-------------+----------------+----------------------+
| 67891       | Zoomzoom 5000  | QFT Corp             |
+-------------+----------------+----------------------+
| 12347       | Orbitron 1000  | XYZ Corp             |
+-------------+----------------+----------------------+

Скрипт PHP с использованием пункта Order By

Используйте mysql_query() функция, еще раз, в операторах, использующих предложение ORDER BY -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl ORDER BY product_manufacturer DESC'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID :{$row['product_id']} <br> ".
         "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ".
         "Ship Date : {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>

При успешном извлечении данных вы увидите следующий вывод -

Product ID: 12347
Nomenclature: Orbitron 1000
Manufacturer: XYZ Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 67891
Nomenclature: Zoomzoom 5000
Manufacturer: QFT Corp
Ship Date: 01/01/17
----------------------------------------------
Product ID: 56789
Nomenclature: SuperBlast 400
Manufacturer: LMN Corp
Ship Date: 01/04/17
----------------------------------------------
mysql> Fetched data successfully

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

JOINsразрешить объединение двух или более таблиц в один объект. Они используются с помощью операторов SELECT, UPDATE и DELETE.

Просмотрите общий синтаксис оператора, использующего JOIN, как показано ниже -

SELECT column
FROM table_name1
INNER JOIN table_name2
ON table_name1.column = table_name2.column;

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

СОЕДИНЕНИЯ бывают разных форм, таких как левое соединение, правое соединение или внутреннее соединение. Различные типы соединений предлагают разные типы агрегирования на основе общих значений или характеристик.

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

Командная строка

В командной строке просто используйте стандартный оператор -

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

mysql> SELECT products.ID_number, products.Nomenclature, inventory.inventory_ct
   FROM products
   INNER JOIN inventory
   ON products.ID_numbeer = inventory.ID_number;
+-------------+----------------+-----------------+
| ID_number   | Nomenclature   | Inventory Count |
+-------------+----------------+-----------------+
| 12345       | Orbitron 4000  | 150             |
+-------------+----------------+-----------------+
| 12346       | Orbitron 3000  | 200             |
+-------------+----------------+-----------------+
| 12347       | Orbitron 1000  | 0               |
+-------------+----------------+-----------------+

Скрипт PHP с использованием JOIN

Использовать mysql_query() функция для выполнения операции соединения -

<?php
   $dbhost = 'localhost:3036'; $dbuser = 'root';
   $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT a.product_id, a.product_manufacturer, b.product_count FROM products_tbl a, pcount_tbl b WHERE a.product_manufacturer = b.product_manufacturer'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn );

   if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Manufacturer:{$row['product_manufacturer']} <br> ".
         "Count: {$row['product_count']} <br> ". "Product ID: {$row['product_id']} <br> ".
         "--------------------------------<br>";
   }

   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

При успешном извлечении данных вы увидите следующий вывод -

ID Number: 12345
Nomenclature: Orbitron 4000
Inventory Count: 150
--------------------------------------
ID Number: 12346
Nomenclature: Orbitron 3000
Inventory Count: 200
--------------------------------------
ID Number: 12347
Nomenclature: Orbitron 1000
Inventory Count: 0
--------------------------------------
mysql> Fetched data successfully

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

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

NULL не чувствителен к регистру и имеет следующие псевдонимы:

  • НЕИЗВЕСТНО (логическое значение)
  • \N

Операторы NULL

Стандартные операторы сравнения не могут использоваться с NULL (например, =,>,> =, <=, <или! =), Потому что все сравнения со значением NULL возвращают NULL, а не истину или ложь. При сравнении с NULL или, возможно, содержащим его, необходимо использовать оператор «<=>» (NULL-SAFE).

Другие доступные операторы -

  • IS NULL - он проверяет значение NULL.

  • IS NOT NULL - подтверждает отсутствие значения NULL.

  • ISNULL - возвращает значение 1 при обнаружении значения NULL и 0 при его отсутствии.

  • COALESCE - возвращает первое значение списка, отличное от NULL, или возвращает значение NULL при его отсутствии.

Сортировка значений NULL

В операциях сортировки значения NULL имеют наименьшее значение, поэтому порядок DESC приводит к значениям NULL внизу. MariaDB позволяет устанавливать более высокое значение для значений NULL.

Есть два способа сделать это, как показано ниже:

SELECT column1 FROM product_tbl ORDER BY ISNULL(column1), column1;

Другой способ -

SELECT column1 FROM product_tbl ORDER BY IF(column1 IS NULL, 0, 1), column1 DESC;

NULL функции

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

  • IFNULL()- Если первое выражение не равно NULL, оно возвращает его. Когда он оценивается как NULL, он возвращает второе выражение.

  • NULLIF() - Возвращает NULL, если сравниваемые выражения равны, в противном случае возвращает первое выражение.

Такие функции, как SUM и AVG, игнорируют значения NULL.

Вставка значений NULL

При вставке значения NULL в столбец, объявленный NOT NULL, возникает ошибка. В режиме SQL по умолчанию столбец NOT NULL вместо этого вставляет значение по умолчанию на основе типа данных.

Когда поле является TIMESTAMP, AUTO_INCREMENT или виртуальным столбцом, MariaDB по-разному управляет значениями NULL. Вставка в столбец AUTO_INCREMENT приводит к тому, что на его место вставляется следующий номер в последовательности. Вместо этого в поле TIMESTAMP MariaDB назначает текущую метку времени. В виртуальных столбцах, теме, обсуждаемой далее в этом руководстве, назначается значение по умолчанию.

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

Значения NULL и команда Alter

Когда вы используете команду ALTER для изменения столбца, при отсутствии спецификации NULL, MariaDB автоматически присваивает значения.

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

MariaDB 10.0.5 представила регулярные выражения PCRE, которые резко увеличивают объем сопоставления в таких областях, как рекурсивные шаблоны, утверждения с упреждением и многое другое.

Просмотрите использование стандартного синтаксиса оператора REGEXP, приведенного ниже -

SELECT column FROM table_name WHERE column REGEXP '[PATTERN]';

REGEXP возвращает 1 при совпадении с шаблоном или 0 при его отсутствии.

Возможен противоположный вариант в виде НЕ РЕГ. MariaDB также предлагает синонимы для REGEXP и NOT REGEXP, RLIKE и NOT RLIKE, которые были созданы по соображениям совместимости.

Сравниваемый шаблон может быть буквальной строкой или чем-то еще, например столбцом таблицы. В строках используется escape-синтаксис C, поэтому любые символы «\» удваиваются. REGEXP также нечувствителен к регистру, за исключением двоичных строк.

Таблица возможных шаблонов, которые можно использовать, приведена ниже -

Старший Нет Узор и описание
1

^

Соответствует началу строки.

2

$

Он соответствует концу строки.

3

.

Соответствует одному символу.

4

[...]

Соответствует любому символу в скобках.

5

[^...]

Соответствует любому символу, не указанному в скобках.

6

p1|p2|p3

Соответствует любому из шаблонов.

7

*

Соответствует 0 или более экземплярам предыдущего элемента.

8

+

Он соответствует одному или нескольким экземплярам предыдущего элемента.

9

{n}

Соответствует n экземплярам предыдущего элемента.

10

{m,n}

Он соответствует от m до n экземпляров предыдущего элемента.

Просмотрите примеры сопоставления с образцом, приведенные ниже -

Товары на букву «pr» -

SELECT name FROM product_tbl WHERE name REGEXP '^pr';

Продукты, заканчивающиеся на «na» -

SELECT name FROM product_tbl WHERE name REGEXP 'na$';

Произведения на гласную -

SELECT name FROM product_tbl WHERE name REGEXP '^[aeiou]';

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

Транзакции соответствуют ACID (атомарность, согласованность, изоляция и долговечность) -

  • Atomicity - Обеспечивает успешность всех операций за счет прерывания при сбоях и отката изменений.

  • Consistency - Это гарантирует, что база данных применяет изменения при успешной транзакции.

  • Isolation - Обеспечивает независимую операцию транзакций транзакций.

  • Durability - Обеспечивает сохранение успешной транзакции в случае сбоя системы.

В начале оператора транзакции находится оператор START TRANSACTION, за которым следуют операторы COMMIT и ROLLBACK -

  • START TRANSACTION начинает транзакцию.

  • COMMIT сохраняет изменения в данных.

  • ROLLBACK завершает транзакцию, уничтожая любые изменения.

При успешной транзакции действует COMMIT. В случае сбоя действует ROLLBACK.

Note- Некоторые операторы вызывают неявную фиксацию, а также вызывают ошибку при использовании в транзакциях. Примеры таких операторов включают, но не ограничиваются ими, CREATE, ALTER и DROP.

Транзакции MariaDB также включают такие параметры, как SAVEPOINT и LOCK TABLES. SAVEPOINT устанавливает точку восстановления для использования с ROLLBACK. LOCK TABLES позволяет контролировать доступ к таблицам во время сеансов, чтобы предотвратить изменения в определенные периоды времени.

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

Структура транзакции

Общая структура отчета о транзакции начинается с START TRANSACTION. Следующим шагом является вставка одной или нескольких команд / операций, вставка операторов, которые проверяют наличие ошибок, вставка операторов ROLLBACK для управления любыми обнаруженными ошибками и, наконец, вставка оператора COMMIT для применения изменений при успешных операциях.

Просмотрите пример, приведенный ниже -

START TRANSACTION;
SELECT name FROM products WHERE manufacturer = 'XYZ Corp';
UPDATE spring_products SET item = name;
COMMIT;

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

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

ALTER в паре с DROP удаляет существующий столбец. Однако это не удается, если столбец является единственным оставшимся столбцом.

Просмотрите пример, приведенный ниже -

mysql> ALTER TABLE products_tbl DROP version_num;

Используйте оператор ALTER ... ADD для добавления столбцов -

mysql> ALTER TABLE products_tbl ADD discontinued CHAR(1);

Используйте ключевые слова FIRST и AFTER, чтобы указать размещение столбца -

ALTER TABLE products_tbl ADD discontinued CHAR(1) FIRST;
ALTER TABLE products_tbl ADD discontinued CHAR(1) AFTER quantity;

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

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

Просмотрите пример ИЗМЕНЕНИЯ, приведенный ниже -

mysql> ALTER TABLE products_tbl CHANGE discontinued status CHAR(4);

В операторе с использованием CHANGE укажите исходный столбец, а затем новый столбец, который его заменит. Просмотрите пример ИЗМЕНИТЬ ниже -

mysql> ALTER TABLE products_tbl MODIFY discontinued CHAR(4);

Команда ALTER также позволяет изменять значения по умолчанию. Просмотрите пример -

mysql> ALTER TABLE products_tbl ALTER discontinued SET DEFAULT N;

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

mysql> ALTER TABLE products_tbl ALTER discontinued DROP DEFAULT;

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

Измените тип таблицы с помощью предложения TYPE -

mysql> ALTER TABLE products_tbl TYPE = INNODB;

Переименуйте таблицу с ключевым словом RENAME -

mysql> ALTER TABLE products_tbl RENAME TO products2016_tbl;

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

Есть четыре типа индексов -

  • Primary (одна запись представляет все записи)

  • Unique (одна запись представляет несколько записей)

  • Plain

  • Full-Text (допускает множество вариантов текстового поиска).

Термины «ключ» и «индекс» в этом использовании идентичны.

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

Хотя индексы ускоряют поиск или операторы SELECT, они перетаскивают вставки и обновления из-за выполнения операций как с таблицами, так и с индексами.

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

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

Просмотрите общий синтаксис индекса, приведенный ниже -

CREATE [UNIQUE or FULLTEXT or...] INDEX index_name ON table_name column;

Просмотрите пример его использования -

CREATE UNIQUE INDEX top_sellers ON products_tbl product;

Отбросить указатель

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

Просмотрите общий синтаксис Drop Index, приведенный ниже -

DROP INDEX index_name ON table_name;

Просмотрите пример его использования -

DROP INDEX top_sellers ON product_tbl;

Переименовать указатель

Переименуйте индекс с помощью оператора ALTER TABLE. Просмотрите его общий синтаксис, приведенный ниже -

ALTER TABLE table_name DROP INDEX index_name, ADD INDEX new_index_name;

Просмотрите пример его использования -

ALTER TABLE products_tbl DROP INDEX top_sellers, ADD INDEX top_2016sellers;

Управление индексами

Вам нужно будет изучить и отслеживать все индексы. Используйте SHOW INDEX для вывода списка всех существующих индексов, связанных с данной таблицей. Вы можете установить формат отображаемого содержимого, используя такой параметр, как «\ G», который указывает вертикальный формат.

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

mysql > SHOW INDEX FROM products_tbl\G

Таблица статистики

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

Некоторым операциям могут быть полезны временные таблицы из-за скорости или одноразовых данных. Срок действия временной таблицы заканчивается по завершении сеанса, независимо от того, используете ли вы их из командной строки, с помощью сценария PHP или через клиентскую программу. Он также не появляется в системе обычным образом. Команда SHOW TABLES не отображает список, содержащий временные таблицы.

Создать временную таблицу

Ключевое слово TEMPORARY в операторе CREATE TABLE порождает временную таблицу. Просмотрите пример, приведенный ниже -

mysql>CREATE TEMPORARY TABLE order (
   item_name VARCHAR(50) NOT NULL
   , price DECIMAL(7,2) NOT NULL DEFAULT 0.00
   , quantity INT UNSIGNED NOT NULL DEFAULT 0
);

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

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

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

  • Иногда они конфликтуют с теневыми именами невременных таблиц.

Note - Временные таблицы могут иметь то же имя, что и существующая невременная таблица, потому что MariaDB рассматривает ее как ссылку на разницу.

Администрация

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

GRANT CREATE TEMPORARY TABLES ON orders TO 'machine122'@'localhost';

Удалить временную таблицу

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

mysql> DROP TABLE order;

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

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

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

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

  • Используйте оператор INSERT INTO ... SELECT, если вам также нужно скопировать данные таблицы.

mysql> INSERT INTO inventory_copy_tbl (
   product_id,product_name,product_manufacturer,ship_date)
   
   SELECT product_id,product_name,product_manufacturer,ship_date,
   FROM inventory_tbl;

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

Просмотрите его синтаксис, приведенный ниже -

CREATE TABLE clone_tbl AS
   SELECT columns
   FROM original_tbl
   WHERE conditions];

Просмотрите пример его использования ниже -

CREATE TABLE products_copy_tbl AS
   SELECT *
   FROM products_tbl;

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

Он не позволяет использовать в нескольких запросах, только в исходном запросе из-за его виртуального (не записываемого на диск) характера. Однако таблицы последовательности можно преобразовать в стандартные таблицы с помощью команды ALTER. Если преобразованная таблица удалена, таблица последовательности все еще существует. Последовательности также не могут давать отрицательные числа или вращаться по минимуму / максимуму.

Установка Sequence Engine

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

INSTALL SONAME "ha_sequence";

После установки проверьте это -

SHOW ENGINES\G

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

Создание последовательности

Есть два метода создания последовательности -

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

  • Используйте существующую базу данных и используйте запрос SELECT последовательности для создания последовательности. В запросе используется синтаксис seq_ [FROM] _to_ [TO] или seq_ [FROM] _to_ [TO] _step_STEP.

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

SELECT * FROM seq_77_to_99;

Последовательности имеют много применений -

  • Найдите отсутствующие значения в столбце для защиты от связанных проблем в операциях -

SELECT myseq.seq FROM seq_22_to_28 myseq LEFT JOIN table1 t ON myseq.seq
   = x.y WHERE x.y IS NULL;
  • Постройте комбинацию ценностей -

SELECT x1.seq, x2.seq FROM seq_5_to_9 x1 JOIN seq_5_to_9 x2 ORDER BY 5, 6;
  • Найдите кратные числа -

SELECT seq FROM seq_3_to_100_step_4;
  • Создайте последовательность дат для использования в таких приложениях, как системы бронирования.
  • Постройте временную последовательность.

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

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

Стратегии и инструменты

Есть четыре основных способа управления дубликатами:

  • Найдите их с помощью JOIN и удалите с помощью временной таблицы.

  • Используйте INSERT ... ON DUPLICATE KEY UPDATE для обновления при обнаружении дубликата.

  • Используйте DISTINCT для удаления результатов оператора SELECT и удаления дубликатов.

  • Используйте INSERT IGNORE, чтобы остановить вставку дубликатов.

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

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

Использование INSERT

Когда INSERT ... ON DUPLICATE KEY UPDATE обнаруживает повторяющийся уникальный или первичный ключ, выполняется обновление. При обнаружении нескольких уникальных ключей обновляется только первый. Следовательно, не используйте его в таблицах с несколькими уникальными индексами.

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

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Note - Если ключ не находит, оператор INSERT ... ON DUPLICATE KEY UPDATE выполняется как обычный оператор вставки.

Использование DISTINCT

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

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Note - Результаты оператора с предложением DISTINCT -

  • При использовании одного выражения оно возвращает для него уникальные значения.

  • При использовании нескольких выражений он возвращает уникальные комбинации.

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

Просмотрите следующий оператор, используя предложение DISTINCT для одного выражения:

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

Просмотрите следующий пример с использованием нескольких выражений -

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

Использование INSERT IGNORE

Оператор INSERT IGNORE инструктирует MariaDB отменить вставку при обнаружении повторяющейся записи. Просмотрите пример его использования, приведенный ниже -

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

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

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

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

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

if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
   $result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
   echo "Invalid username";
}

Также используйте оператор REGEXP и предложения LIKE при создании ограничений ввода.

Рассмотрим все типы необходимого явного контроля ввода, такие как -

  • Управляйте используемыми escape-символами.

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

  • Контролируйте синтаксис вводимых данных. Не допускайте ничего за пределами необходимого рисунка.

  • Контролировать разрешенные сроки. Черный список ключевых слов SQL.

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

1=1
-or-
*

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

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

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

ПАРАМЕТРЫ

Основные варианты резервного копирования включают логические и физические резервные копии. Логические резервные копии содержат операторы SQL для восстановления данных. Физические резервные копии содержат копии данных.

  • Logical backupsпредлагают гибкость восстановления данных на другом компьютере с другой конфигурацией в отличие от физических резервных копий, которые часто ограничиваются одним и тем же компьютером и типом базы данных. Логическое резервное копирование происходит на уровне базы данных и таблицы, а физическое - на уровне каталогов и файлов.

  • Physical backupsимеют меньший размер, чем логические, а также требуют меньше времени на выполнение и восстановление. Физические резервные копии также включают файлы журналов и конфигурации, а логические - нет.

Инструменты резервного копирования

Основной инструмент, используемый для резервного копирования MariaDB, - это mysqldump. Он предлагает логическое резервное копирование и гибкость. Это также отличный вариант для небольших баз данных.Mysqldumpвыгружает данные в SQL, CSV, XML и многие другие форматы. Его выходные данные не сохраняют хранимые процедуры, представления и события без явных инструкций.

Есть три варианта mysqldump резервные копии -

  • Raw data - Выгрузить таблицу как файл необработанных данных с помощью параметра --tab, который также указывает место назначения файла -

$ mysqldump -u root -p --no-create-info \
   --tab=/tmp PRODUCTS products_tbl
  • Data/Definitions export- Эта опция позволяет экспортировать одну или несколько таблиц в файл и поддерживает резервное копирование всех существующих баз данных на хост-машине. Изучите пример экспорта содержимого или определений в файл.

$ mysqldump -u root -p PRODUCTS products_tbl > export_file.txt
  • Transfer - Вы также можете выводить базы данных и таблицы на другой хост

$ mysqldump -u root -p database_name \
   | mysql -h other-host.com database_name

Использование оператора SELECT ... INTO OUTFILE

Другой вариант экспорта данных использует оператор SELECT ... INTO OUTFILE. Этот простой вариант выводит таблицу в простой форматированный текстовый файл -

mysql> SELECT * FROM products_tbl
   -> INTO OUTFILE '/tmp/products.txt';

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

Обратите внимание на следующие качества этого утверждения:

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

  • Для выполнения инструкции вам потребуются права файла MariaDB.

  • Имя выходного файла должно быть уникальным.

  • Вам нужны учетные данные для входа на хост.

  • В среде UNIX выходной файл доступен для чтения всем, но его владение сервером влияет на возможность его удаления. Убедитесь, что у вас есть привилегии.

Использование CONNECT в резервных копиях

Обработчик CONNECT позволяет экспортировать данные. Это оказывается полезным в первую очередь в ситуациях, когда операция SELECT ... INTO OUTFILE не поддерживает формат файла.

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

create table products
engine = CONNECT table_type = XML file_name = 'products.htm' header = yes
option_list = 'name = TABLE,coltype = HTML,attribute = border = 1;cellpadding = 5'

select plugin_name handler, plugin_version version, plugin_author
author, plugin_description description, plugin_maturity maturity
from information_schema.plugins where plugin_type = 'STORAGE ENGINE';

Другие инструменты

Другие варианты резервного копирования следующие:

  • XtraBackup- Эта опция предназначена для баз данных XtraDB / InnoDB и работает с любым механизмом хранения. Узнайте больше об этом инструменте на официальном сайте Percona.

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

  • LVM- В этом популярном методе используется сценарий Perl. Он получает блокировку чтения для каждой таблицы и сбрасывает кеши на диск. Затем он получает снимок и разблокирует таблицы. Проконсультируйтесь с официальнымmylvmbackup веб-сайт для получения дополнительной информации.

  • TokuBackup- Это решение, предоставленное Percona, обеспечивает горячее резервное копирование с учетом проблем и ограничений параметров резервного копирования InnoDB. Он создает транзакционную звуковую копию файлов, в то время как приложения продолжают манипулировать ими. Дополнительную информацию можно получить на веб-сайте Percona.

Рекомендации по INNODB

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

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

Есть три варианта загрузки данных: оператор LOAD DATA, mysqlimport и простое восстановление mysqldump.

Использование НАГРУЗКИ ДАННЫХ

Оператор LOAD DATA работает как массовый загрузчик. Просмотрите пример его использования, который загружает текстовый файл -

mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl;

Обратите внимание на следующие качества оператора LOAD DATA:

  • Используйте ключевое слово LOCAL, чтобы запретить MariaDB выполнять глубокий поиск хоста, и используйте очень конкретный путь.

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

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

mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl
   FIELDS TERMINATED BY '|'
   LINES TERMINATED BY '\n';
  • В заявлении предполагается, что столбцы в файле данных используют тот же порядок, что и таблица. Если вам нужно установить другой порядок, вы можете загрузить файл следующим образом:

mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl (c, b, a);

Использование MYSQLIMPORT

Инструмент mysqlimport действует как оболочка ЗАГРУЗКИ ДАННЫХ, позволяя выполнять те же операции из командной строки.

Загрузите данные следующим образом -

$ mysqlimport -u root -p --local database_name source_file.txt

Укажите форматирование следующим образом -

$ mysqlimport -u root -p --local --fields-terminated-by="|" \
   --lines-terminated-by="\n" database_name source_file.txt

Использовать --columns возможность указать порядок столбцов -

$ mysqlimport -u root -p --local --columns=c,b,a \
   database_name source_file.txt

Использование MYSQLDUMP

Восстановление с mysqldump требует этого простого оператора для загрузки файла дампа обратно на хост -

shell> mysql database_name < source_file.sql

ОСОБЫЕ ПЕРСОНАЖИ И ЦИТАТЫ

В операторе LOAD DATA кавычки и специальные символы могут интерпретироваться неправильно. Оператор принимает значения без кавычек и обрабатывает обратную косую черту как escape-символы. Используйте предложение FIELDS, чтобы указать форматирование. Укажите на кавычки с помощью «ENCLOSED BY», что приведет к удалению кавычек из значений данных. Измените escape-последовательности с помощью «ESCAPED BY».

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

Агрегатные функции MariaDB

Наиболее часто используемые агрегатные функции приведены ниже -

Старший Нет Имя и описание
1

COUNT

Считает количество записей.

Example - ВЫБРАТЬ СЧЕТЧИК (*) ИЗ customer_table;

2

MIN

Он показывает минимальное значение набора записей.

Example - ВЫБРАТЬ организацию, МИН (аккаунт) ИЗ договоров ГРУППА ПО организации;

3

MAX

Он показывает максимальное значение набора записей.

Example - ВЫБРАТЬ организацию, МАКС (размер_счета) ИЗ контрактов ГРУППА ПО организации;

4

AVG

Он вычисляет среднее значение набора записей.

Example - ВЫБРАТЬ AVG (account_size) ИЗ контрактов;

5

SUM

Он вычисляет сумму набора записей.

Example - ВЫБРАТЬ СУММУ (account_size) ИЗ контрактов;

Расчет возраста MariaDB

В TIMESTAMPDIFF функция позволяет рассчитать возраст -

SELECT CURDATE() AS today;
SELECT ID, DOB, TIMESTAMPDIFF(YEAR,DOB,'2015-07-01') AS age FROM officer_info;

Конкатенация строк MariaDB

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

SELECT CONCAT(item, item,...);

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

SELECT CONCAT('Ram', 'bu', 'tan');
Output:Rambutan

Функции даты и времени MariaDB

Ниже приведены важные функции даты -

Старший Нет Имя и описание
1

CURDATE()

Он возвращает дату в формате гггг-мм-дд или ггггммдд.

Example - ВЫБРАТЬ CURDATE ();

2

DATE()

Он возвращает дату в нескольких форматах.

Example −СОЗДАТЬ ТАБЛИЦУ product_release_tbl (x DATE);

3

CURTIME()

Он возвращает время в формате ЧЧ: ММ: СС или ЧЧММСС.uuuuuu.

Example - ВЫБРАТЬ CURTIME ();

4

DATE_SUB()

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

Example - SELECT DATE_SUB ('2016-02-08', ИНТЕРВАЛ 60 ДНЕЙ);

5

DATEDIFF()

Он определяет дни между двумя датами.

Example - ВЫБРАТЬ РАЗНДАТ ('2016-01-01 23:59:59', '2016-01-03');

6

DATE ADD()

Он добавляет или вычитает любую единицу времени к / из даты и времени.

Example - SELECT DATE_ADD ('2016-01-04 23:59:59', ИНТЕРВАЛ 22 СЕКУНДА);

7

EXTRACT()

Он извлекает единицу из даты.

Example - ВЫБРАТЬ ВЫПИСКУ (ГОД ОТ '2016-01-08');

8

NOW()

Он возвращает текущую дату и время в формате гггг-мм-дд чч: мм: сс или ггггммддччммсс.уууууу.

Example - ВЫБРАТЬ СЕЙЧАС ();

9

DATE FORMAT()

Он форматирует дату в соответствии с указанной строкой формата.

Example - ВЫБРАТЬ ДАТУ_ФОРМАТ ('2016-01-09 20:20:00', '% W% M% Y');

Ниже приведены некоторые важные функции времени -

Старший Нет Имя и описание
1

HOUR()

Возвращает час времени или прошедшие часы.

Example - ВЫБЕРИТЕ ЧАС ('19: 17: 09 ');

2

LOCALTIME()

Он работает точно так же, как NOW ().

3

MICROSECOND()

Возвращает микросекунды времени.

Example - ВЫБРАТЬ МИКРОСЕКУНДУ ('16: 30: 00.543876 ');

4

MINUTE()

Возвращает минуты времени.

Example - ВЫБРАТЬ МИНУТУ ('2016-05-22 17:22:01');

5

SECOND()

Возвращает секунды даты.

Example - ВЫБРАТЬ ВТОРОЙ ('2016-03-12 16: 30: 04.000001');

6

TIME_FORMAT()

Он форматирует время в соответствии с указанной строкой формата.

Example - SELECT TIME_FORMAT ('22: 02: 20 ','% H% k% h% I% l ');

7

TIMESTAMP()

Он предоставляет метку времени для действия в формате гггг-мм-дд чч: мм: дд.

Example - СОЗДАТЬ ТАБЛИЦУ заказов_ (ID INT, tmst TIMESTAMP);

Числовые функции MariaDB

Ниже приведены некоторые важные числовые функции в MariaDB:

Старший Нет Имя и описание
1

TRUNCATE()

Он возвращает усеченное число с указанием десятичных знаков.

Example - ВЫБРАТЬ TRUNCATE (101.222, 1);

2

COS()

Возвращает косинус x радиан.

Example - ВЫБРАТЬ COS (PI ());

3

CEILING()

Он возвращает наименьшее целое число не ниже x.

Example - ВЫБРАТЬ ПОТОЛОК (2.11);

4

DEGREES()

Преобразует радианы в градусы.

Example - ВЫБРАТЬ ГРАДУСЫ (PI ());

5

DIV()

Выполняет целочисленное деление.

Example - ВЫБРАТЬ 100 РАЗДЕЛ 4;

6

EXP()

Он возвращает e в степень x.

Example - ВЫБРАТЬ EXP (2);

7

FLOOR()

Он возвращает наибольшее целое число не выше x.

Example - ВЫБЕРИТЕ ЭТАЖ (2.01);

8

LN()

Возвращает натуральный логарифм x.

Example - ВЫБРАТЬ LN (3);

9

LOG()

Возвращает натуральный логарифм или логарифм с заданным основанием.

Example - ВЫБРАТЬ ЖУРНАЛ (3);

10

SQRT()

Возвращает квадратный корень.

Example - ВЫБРАТЬ SQRT (16);

Строковые функции MariaDB

Важные строковые функции приведены ниже -

Старший Нет Имя и описание
1

INSTR()

Возвращает позицию первого экземпляра подстроки.

Example - ВЫБРАТЬ ИНСТРУКЦИЮ ('рамбутан', 'загар');

2

RIGHT()

Он возвращает самые правые строковые символы.

Example - ВЫБРАТЬ ВПРАВО ('рамбутан', 3);

3

LENGTH()

Он возвращает длину строки в байтах.

Example - ВЫБЕРИТЕ ДЛИНУ ('рамбутан');

4

LOCATE()

Возвращает позицию первого экземпляра подстроки.

Example - ВЫБРАТЬ МЕСТО ('загар', 'рамбутан');

5

INSERT()

Он возвращает строку с указанной подстрокой в ​​определенной позиции, которая была изменена.

Example - ВЫБРАТЬ ВСТАВИТЬ ('рампутан', 4, 1, 'б')

6

LEFT()

Возвращает крайние левые символы.

Example - ВЫБРАТЬ ВЛЕВО ('рамбутан', 3);

7

UPPER()

Он меняет символы на верхний регистр.

Example - ВЫБРАТЬ ВЕРХНИЙ (фамилия);

8

LOWER()

Он меняет символы на строчные.

Example - ВЫБЕРИТЕ НИЖНИЙ (фамилия);

9

STRCMP()

Он сравнивает строки и возвращает 0, если они равны.

Example - ВЫБРАТЬ STRCMP ('яйцо', 'сыр');

10

REPLACE()

Он возвращает строку после замены символов.

Example - ВЫБРАТЬ ЗАМЕНИТЬ ('sully', 'l', 'n');

11

REVERSE()

Он меняет местами символы в строке.

Example - ВЫБРАТЬ РЕВЕРС («гоночный автомобиль»);

12

REPEAT()

Он возвращает строку, повторяющую заданные символы x раз.

Example - ВЫБРАТЬ ПОВТОР ('ха', 10);

13

SUBSTRING()

Он возвращает подстроку из строки, начиная с позиции x.

Example - ВЫБРАТЬ ПОДСТРОКУ ('рамбутан', 3);

14

TRIM()

Он удаляет конечные / ведущие символы из строки.

Example - ВЫБРАТЬ ОТДЕЛКУ (ВЕДУЩИЙ '_' ОТ '_rambutan');