Архив метки: MySQL

MySQL. REGEXP: поиск на основе регулярных выражений

Описание: в этой статье вы узнаете, как использовать оператор REGEXP в MySQL для выполнения сложного поиска на основе регулярных выражений.

 

Введение в регулярные выражения

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

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

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

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

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

Сокращением регулярных выражений является regex или regexp

 

Оператор REGEXP в MySQL

MySQL адаптирует регулярное выражение, реализованное Генри Спенсером. MySQL позволяет сопоставить шаблон прямо в операторах SQL с помощью оператора REGEXP.

Следующее иллюстрирует синтаксис оператора REGEXP в предложении  WHERE:

SELECT

column_list

FROM

table_name

WHERE

string_column REGEXP pattern;

 

Этот оператор выполняет сопоставление string_column с шаблоном pattern.

Если значение в string_column совпадает с pattern, выражение в предложении WHERE возвращает true, в противном случае возвращает false.

Если либо string_column либо pattern равен NULL, результат NULL.

Помимо оператора REGEXP вы можете использовать оператор RLIKE, который является синонимом оператора REGEXP.

Форма отрицания оператора REGEXP есть NOT REGEXP.

 

MySQL. Примеры REGEXP

Предположим, вы хотите найти все товары, Названия которых начинаются с символов A, B или C. Вы можете использовать регулярное выражение в следующем выражении SELECT:

SELECT

productname

FROM

products

WHERE

productname REGEXP '^(A|B|C)'

ORDER BY productname;

 

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Шаблон позволяет найти продукт, название которого начинается с A, B или C.

  • Символ ^ означает совпадение с начала строки.
  • символ | означает поиск альтернатив, если один не соответствует.

 

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














МетасимволПоведение
^соответствует позиции в начале искомой строки
$соответствует позиции в конце искомой строки
,соответствует любому отдельному символу
[…]соответствует любому символу, указанному в квадратных скобках
[^ …]соответствует любому символу, не указанному в квадратных скобках
p1 | p2соответствует любому из паттернов p1 или p2
*соответствует предыдущему символу ноль или более раз
+соответствует предыдущему символу один или несколько раз
{n}соответствует n количествам экземпляров предыдущего символа
{m,n}соответствует от m до n количеству экземпляров предыдущего символа

 

Чтобы найти продукты, названия которых начинаются с символа a, используйте метасимвол  ‘^’ для соответствия в начале имени:

SELECT

productname

FROM

products

WHERE

productname REGEXP '^a';

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

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

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

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

SELECT

productname

FROM

products

WHERE

productname REGEXP BINARY '^C';

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Чтобы найти продукт, имя которого заканчивается на f, вы используете ‘f$’, чтобы соответствовать концу строки.

SELECT

productname

FROM

products

WHERE

productname REGEXP 'f$'

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Чтобы найти продукт, название которого содержит слово «ford», вы используете следующий запрос:

SELECT

productname

FROM

products

WHERE

productname REGEXP 'ford';

 

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

 

Чтобы найти продукт, имя которого содержит ровно 10 символов, вы используете « ^’и», $ чтобы соответствовать началу и концу названия продукта, а также повторять {10} любой символ » .’ » между ними, как показано в следующем запросе:

SELECT

productname

FROM

products

WHERE

productname REGEXP '^.{10}$';

 

 

 

MySQL. REGEXP. Поиск на основе регулярных выражений_1

Из этой статьи вы узнали, как запрашивать данные с помощью оператора REGEXP в MySQL с регулярными выражениями.



2020-01-11T21:54:29
База данных MySQL

Как изменить механизм хранения таблицы в MySQL

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

MySQL поддерживает многие виды механизмов хранения, которые предоставляют различные возможности и характеристики. Например, таблицы InnoDB поддерживают транзакции, а MyISAM — нет.

 

Запрос текущего механизма хранения таблицы

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

Первый способ проверить текущий механизм хранения таблицы — это запрос данных из таблицы tables в базе данных information_schema.

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

SELECT

engine

FROM

information_schema.tables

WHERE

table_schema = 'classicmodels'

AND table_name = 'offices';

 

 

Как изменить Storage Engine в MySQL

 

Второй способ запроса механизма хранения таблицы состоит SHOW TABLE STATUS в следующем:

SHOW TABLE STATUS LIKE 'offices';

 

Как изменить Storage Engine в MySQL

 

Третий способ получить механизм хранения таблицы — использовать оператор SHOW CREATE TABLE.

SHOW CREATE TABLE offices;

 

 

mysql> SHOW CREATE TABLE officesG;

*************************** 1. row ***************************

Table: offices

Create Table: CREATE TABLE `offices` (

`officeCode` varchar(10) NOT NULL,

`city` varchar(50) NOT NULL,

`phone` varchar(50) NOT NULL,

`addressLine1` varchar(50) NOT NULL,

`addressLine2` varchar(50) DEFAULT NULL,

`state` varchar(50) DEFAULT NULL,

`country` varchar(50) NOT NULL,

`postalCode` varchar(15) NOT NULL,

`territory` varchar(10) NOT NULL,

PRIMARY KEY (`officeCode`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1

1 row in set (0.00 sec)

mysql>

 

MySQL показал, что таблица offices использует механизм хранения InnoDB.

 

MySQL изменяет механизм хранения

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

ALTER TABLE table_name ENGINE engine_name;

 

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

SHOW ENGINES;

 

Как изменить Storage Engine в MySQL

 

Например, чтобы изменить механизм хранения таблицы offices с InnoDB на MyISAM, используйте следующий оператор:

ALTER TABLE offices ENGINE = 'MYISAM';

 

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



2020-01-06T08:47:26
База данных MySQL

Как сравнить последовательные строки в одной таблице в MySQL

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

Предположим, у вас есть таблица inventory, со структурой, определенной оператором CREATE TABLE, следующим образом:

CREATE TABLE inventory(

id INT AUTO_INCREMENT PRIMARY KEY,

counted_date date NOT NULL,

item_no VARCHAR(20) NOT NULL,

qty int(11) NOT NULL

);

 

В таблице inventory:

  • id — является автоинкрементными колонками.
  • counted_date  — это подсчитанная  дата.
  • item_no  — код товара, размещенный в инвентаре.
  • qty —  накопленное количество в запасе.

Ниже приведены примеры данных таблицы inventory:

INSERT INTO inventory(counted_date,item_no,qty)

VALUES ('2019-12-27','A',20),

('2019-12-27','A',30),

('2019-12-27','A',45),

('2019-12-27','A',80),

('2019-12-27','A',100);

 

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

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

В MySQL вы можете использовать технику самосоединения (self join) для сравнения последовательных строк как следующий запрос:

SELECT

g1.item_no,

g1.counted_date from_date,

g2.counted_date to_date,

(g2.qty - g1.qty) AS receipt_qty

FROM

inventory g1

INNER JOIN

inventory g2 ON g2.id = g1.id + 1

WHERE

g1.item_no = 'A';

 

Условие в предложении INNER JOIN g2.id = g1.id + 1 позволяет, конечно, сравнить текущую строку со следующей строкой в таблице inventory, предполагая, что в столбцах идентификаторов нет пробелов.

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

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



2019-12-27T19:04:08
База данных MySQL

Переменная SELECT INTO в MySQL

Описание: в этой статье вы узнаете, как использовать переменную SELECT INTO в MySQL для хранения результатов запроса в переменных.

 

Синтаксис переменной SELECT INTO в MySQL

Чтобы сохранить результат запроса в одной или нескольких переменных , используйте синтаксис переменной SELECT INTO:

SELECT

c1, c2, c3, ...

INTO

@v1, @v2, @v3,...

FROM

table_name

WHERE

condition;

 

В этом синтаксисе:

  • c1, c2 и c3 — это столбцы или выражения, которые вы хотите выбрать и сохранить в переменных.
  • @ v1, @ v2 и @ v3 — это переменные, в которых хранятся значения из c1, c2 и c3.

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

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

Если запрос возвращает несколько строк, MySQL выдает ошибку. Чтобы запрос всегда возвращал максимум одну строку, используйте условие LIMIT 1, чтобы ограничить результирующий набор одной строкой.

 

Примеры переменной SELECT INTO в MySQL

Мы будем использовать таблицу customers в примере базы данных для демонстрации.

Переменная SELECT INTO в MySQL

 

Пример одной переменной SELECT INTO в MySQL

Следующий оператор получает город клиента с номером 103 и сохраняет его в переменной @city:

SELECT

city

INTO

@city

FROM

customers

WHERE

customerNumber = 103;

 

 

Следующий оператор отображает содержимое переменной @city:

SELECT

@city;

 

Пример нескольких переменных SELECT INTO в MySQL

Чтобы сохранить значения из списка выбора в несколько переменных, вы разделяете переменные запятыми. Например, следующий оператор находит город и страну клиента с номером 103 и сохраняет данные в двух соответствующих переменных @city и @country:

SELECT

city,

country

INTO

@city,

@country

FROM

customers

WHERE

customerNumber = 103;

 

Следующий оператор показывает содержимое переменных @city и @country:

SELECT

@city,

@country;

 

Переменная SELECT INTO в MySQL

 

Пример нескольких строк SELECT INTO в MySQL

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

SELECT

creditLimit

INTO

@creditLimit

FROM

customers

WHERE

customerNumber > 103;/

 



Вот вывод:

Error Code: 1172. Result consisted of more than one row

 

Чтобы исправить это, вы используете следующее предложение LIMIT 1:

SELECT

creditLimit

INTO

@creditLimit

FROM

customers

WHERE

customerNumber > 103

LIMIT1;

 

В этой статье вы узнали, как использовать синтаксис переменной SELECT INTO в MySQL для хранения результата запроса результата в одной или нескольких переменных.



2019-12-25T06:02:32
База данных MySQL

Переменные MySQL

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

 

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

Иногда вы хотите передать значение из оператора SQL в другой оператор SQL. Для этого вы сохраняете значение в пользовательской переменной MySQL в первом операторе и ссылаетесь на него в последующих инструкциях.

Для создания пользовательской переменной вы используете формат @variable_name, в котором она variable_name состоит из буквенно-цифровых символов. Максимальная длина пользовательской переменной составляет 64 символа с MySQL 5.7.5

Пользовательские переменные не чувствительны к регистру. Это означает, что @id и @ID то же самое.

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

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

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

 

Переменная MySQL

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

Первый способ заключается в следующем:

SET @variable_name := value;

 

Вы можете использовать либо : =, либо = как оператор присваивания в операторе SET. Например, оператор присваивает число 100 переменной @counter.

SET @counter := 100;

 

Второй способ присвоения значения переменной — использование оператора SELECT. В этом случае вы должны использовать оператор присваивания : =, потому что в операторе SELECT в MySQL рассматривает оператор = как оператор равенства.

SELECT @variable_name := value;

 

После назначения вы можете использовать переменную в последующем операторе, где выражение разрешено, например, в предложении WHERE, операторе INSERT или UPDATE.

 

Примеры переменных MySQL

Следующий оператор получает самый дорогой продукт в таблице products и назначает цену пользовательской переменной @msrp:

SELECT

    @msrp:=MAX(msrp)

FROM

    products;

Переменные MySQL

 

Следующий оператор использует переменную @msrp для запроса информации о самом дорогом продукте.

SELECT

    productCode, productName, productLine, msrp

FROM

    products

WHERE

    msrp = @msrp;

 

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

SELECT @id:=LAST_INSERT_ID();

 

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

SELECT

    @buyPrice:=buyprice

FROM

    products

WHERE

    buyprice > 95

ORDER BY buyprice;

Переменные MySQL

SELECT @buyprice;

Переменные MySQL

 

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



2019-12-21T23:59:29
База данных MySQL

Учебник. MySQL и Perl

В этом разделе Perl MySQL показано, как взаимодействовать с MySQL с помощью API Perl DBI для подключения и отключения от баз данных MySQL, создания таблиц, обработки данных и управления транзакциями.

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

 

Подключение к MySQL с помощью Perl

Из этой статьи вы узнаете, как подключиться и отключиться от базы данных MySQL с помощью модуля Perl DBI.

 

Создание таблиц в MySQL при помощи Perl

В этой статье вы узнаете, как создавать новые таблицы в базе данных MySQL с помощью API Perl DBI.

 

Вставка данных в MySQL при помощи Perl

В этой статье мы покажем вам шаг за шагом, как вставить данные в таблицу с помощью Perl DBI.

 

Управление транзакциями в MySQL при помощи Perl

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

 

Выборка данных в MySQL при помощи Perl

В этой статье мы покажем вам различные способы запроса данных из таблиц базы данных MySQL с помощью Perl DBI.

 

Обновление данных в MySQL при помощи Perl

Эта статья покажет вам шаг за шагом, как обновить данные в таблице MySQL, используя подготовленный оператор в Perl DBI.

 

Удаление данных в MySQL при помощи Perl

Эта пошаговая статья покажет, как использовать Perl DBI для удаления данных из таблицы базы данных MySQL.



2019-11-12T18:43:06
База данных MySQL