Архив метки: 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

Функция RANK в MySQL

Описание: в этой статье вы узнаете о функции RANK() в MySQL и о том, как ее применять, чтобы присвоить ранг каждой строке в разделе набора результатов.

Обратите внимание, что MySQL поддерживает функцию RANK() и другие оконные функции начиная с версии 8.0

 

Введение в функцию RANK() в MySQL

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

Ниже показан синтаксис функции RANK():

RANK() OVER (

PARTITION BY <expression>[{,<expression>...}]

ORDER BY <expression> [ASC|DESC], [{,<expression>...}]

)

 

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

  • Во-первых, предложение PARTITION BY делит наборы результатов на разделы. Функция RANK() выполняется в разделах и реинициализируется при пересечении границы раздела.
  • Во-вторых, предложение ORDER BYRDER BYRDER BYRDER BYRDER BYRDER BYRDER BY сортирует строки в разделе по одному или нескольким столбцам или выражениям.

В отличие от функции ROW_NUMBER(), функция RANK() не всегда возвращает последовательные целые числа.

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

CREATE TABLE t (

val INT

);



INSERT INTO t(val)

VALUES(1),(2),(2),(3),(4),(4),(5);



SELECT * FROM t;

 

Вот выheight=»156″ />

Следующий оператор использует функцию RANK() для присвоения ранга каждой строке из набора результатов в таблице t:

SELECT

val,

RANK() OVER (

ORDER BY val

) my_rank

FROM

t;

 

Как видите, второй и третий ряды имеют одинаковые связи, поэтому они получают одинаковое звание 2.

Четвертый ряд имеет ранг 4, потому что функция RANK() пропускает ранг 3.

 

Пример функции RANK() в MySQL

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

Если вы еще не создали таблицу sales, вот скрипт:

CREATE TABLE IF NOT EXISTS sales(

sales_employee VARCHAR(50) NOT NULL,

fiscal_year INT NOT NULL,

sale DECIMAL(14,2) NOT NULL,

PRIMARY KEY(sales_employee,fiscal_year)

);



INSERT INTO sales(sales_employee,fiscal_year,sale)

VALUES('Bob',2016,100),

('Bob',2017,150),

('Bob',2018,200),

('Alice',2016,150),

('Alice',2017,100),

('Alice',2018,200),

('John',2016,200),

('John',2017,150),

('John',2018,250);



SELECT * FROM sales;

 

На следующем рисунке показанheight=»198″ />height=»198″ />h=»233″ height=»198″ />

 

Следующий оператор использует функцию RANK() для ранжирования сотрудников по продажам по сумме продаж в каждом году:

SELECT

sales_employee,

fiscal_year,

sale,

RANK() OVER (PARTITION BY

fiscal_year

ORDER BY

sale DESC

) sales_rank

FROM

sales;

 

В этом примере:

  • Во-первых, предложение PARTITION BY разбивает результирующие наборы на разделы по финансовым годам.
  • Затем предложение ORDER BY сортирует сотрудников по продажам в порядке убывания.

 

Функция RANK() в MySQL с примером CTE

Следующий оператор использует функцию RANK() для поиска трех самых высоких заказов в каждом году:

WITH order_values AS(
SELECT
orderNumber,
YEAR(orderDate) order_year,
quantityOrdered*priceEach AS order_value,
RANK() OVER (
PARTITION BY YEAR(orderDate)
ORDER BY quantityOrdered*priceEach DESC
) order_value_rank
FROM
orders
INNER JOIN orderDetails USING (orderNumber)
)
SELECheight="200" />height="200" />h="344" height="200" />h="344" height="200" />QL" width="344" height="200" />

 

В этом примере:

  • Сначала мы использовали общее табличное выражение (CTE), чтобы получить номер заказа, год заказа и ранг. Чтобы ранжировать заказы по значению заказа в каждом году, мы использовали функцию RANK(), которая разбивала строки по годам заказа и сортировала значение заказа по убыванию.
  • Затем мы выбрали только ордера, чей ранг меньше или равен трем.

В этой статье вы узнали, как использовать функцию RANK() в MySQL для присвоения ранга каждой строке в наборе результатов.



2019-10-30T16:04:52
База данных MySQL

Как установить MariaDB на Debian 10

MariaDB — это многопоточная система управления реляционными базами данных с открытым исходным кодом, обратно совместимая замена для MySQL. MariaDB — это стандартная реализация MySQL в Debian.

В этой статье объясняется, как установить MariaDB в Debian 10.

 

На момент написания этой статьи последняя версия MariaDB, доступная в основной части Debian, — это версия 10.3.

Для установки MariaDB в Debian 10 выполните следующие действия как пользователь root или пользователь с привилегиями sudo:

  1. Начните с обновления индекса пакетов:
    sudo apt update

    

    

  2. Установите серверные и клиентские пакеты MariaDB, выполнив следующую команду:
    sudo apt install mariadb-server

    

    

    Как запустить сервер MariaDB

    systemctl start mariadb

    Как запустить сервер MariaDB при загрузке

    systemctl enable mariadb

  3. Сервис MariaDB запустится автоматически. Чтобы проверить это, проверьте статус услуги:
    sudo systemctl status mariadb

     

    Вывод должен выглядеть примерно так:

    ● mariadb.service - MariaDB 10.3.15 database server

       Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)

       Active: active (running) since Thu 2019-07-11 14:36:28 PDT; 19min ago

         Docs: man:mysqld(8)

               https://mariadb.com/kb/en/library/systemd/

     Main PID: 4509 (mysqld)

       Status: "Taking your SQL requests now..."

        Tasks: 30 (limit: 2359)

       Memory: 78.6M

       CGroup: /system.slice/mariadb.service

               └─4509 /usr/sbin/mysqld

MariaDB поставляется со скриптом, который может помочь вам повысить безопасность установки. Чтобы запустить скрипт mysql_secure_installation в вашем терминале:

sudo mysql_secure_installation

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

...

Enter current password for root (enter for none):

...

Set root password? [Y/n] Y

New password: 

Re-enter new password: 

...

Remove anonymous users? [Y/n] Y

...

Disallow root login remotely? [Y/n] Y

...

Remove test database and access to it? [Y/n] Y

...

Reload privilege tables now? [Y/n] Y

...

Thanks for using MariaDB!

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

Все шаги объяснены подробно, и рекомендуется ответить «Y» (да) на все вопросы.

 

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

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

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

Если вы хотите изменить аутентификацию root на классическую, войдите на сервер MariaDB:

sudo mysql

Запустите следующие операторы, чтобы изменить плагин аутентификации:

ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password;

ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_root_passwd';

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

mysql -u root -p

Изменение плагина аутентификации также позволит вам войти в систему как root из внешней программы, такой как phpMyAdmin.

 

В этой статье мы показали, как установить и защитить MariaDB на сервере Debian 10.

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



2019-07-15T22:35:17
MariaDB

Решение ошибки #1698 – Access denied for user ‘root’@’localhost’

В сегодняшней статье разберемся как устранить ошибку:

#1698 – Access denied for user ‘root'@'localhost'

при попытке подключиться к БД из под root.

MySQL 5.7 изменила модель безопасности: теперь вход в MySQL под рутом (root) требует sudo (при этом пароль всё равно может быть пустым). Т.е. phpMyAdmin невозможно использовать под пользователем root.

Самым простым (и самым безопасным) решением будет создать нового пользователя и предоставить ему требуемые привилегии. Читать