Архив метки: База данных MySQL

Как усечь таблицу в MySQL

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

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

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

Чтобы использовать оператор TRUNCATE, у вас должны быть привилегии DROP в базе данных.

 

Особенности Truncate

Ниже приведены некоторые характерные особенности оператора TRUNCATE, которые отличают его от оператора DELETE:

  1. Операцию усечения нельзя откатить, поскольку она выполняет неявную фиксацию.
  2. Он работает, удаляя таблицу и воссоздавая ее, сохраняя ее структуру, но не данные.
  3. Truncate поддерживает поврежденные таблицы, удаляя все данные и восстанавливая пустую таблицу.
  4. Он не вызывает никаких триггеров удаления.
  5. Сохраняет разбиение таблицы
  6. Оператор TRUNCATE не возвращает никакой информации о затронутых строках — это означает, что возвращаемое значение равно 0.

 

Основное использование

Общий синтаксис использования оператора TRUNCATE:

TRUNCATE TABLE tbl_name;

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

 

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

Давайте посмотрим на пример использования оператора TRUNCATE.

В этом примере мы будем использовать таблицу сотрудников, представленную в ресурсе ниже:

https://dev.mysql.com/doc/index-other.html

 

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

SELECT * FROM employees LIMIT 10;

 

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

SET FOREIGN_KEY_CHECKS = FALSE;



TRUNCATE TABLE employees;

Сначала мы устанавливаем для переменной FOREIGN_KEY_CHECK значение False, потому что оператор TRUNCATE не работает, если таблица содержит ограничения из других таблиц.

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

Вы можете подтвердить, щелкнув выбрать:

SELECT * FROM employees;

 

Примечание
ВНИМАНИЕ ! Не удаляйте проверку ограничений в таблицах реальной базы данных.

 

Заключение

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



2021-06-16T13:48:30
База данных MySQL

MySQL. Комментарии в глубину

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

 

Комментарии

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

MySQL поддерживает три стиля комментариев:

  1. От ‘—‘ до конца строки. Стиль двойного тире-комментария требует как минимум пробела или управляющего символа (пробел, табуляция, новая строка и т. д.) После второго тире.
    SELECT * FROM users; -- это комментарий

     

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

    SELECT 10--1;

     

    Оператор возвращает 11. Если MySQL не использует пробелы, он возвращает 10.

     

  2. От ‘#’до конца строки.
    SELECT

    lastName, firstName

    FROM

    employees

    WHERE

    reportsTo = 1002; # получить подчиненных

     

  3. Комментарий в стиле C /**/ может занимать несколько строк. Этот стиль комментария используется для документирования блока кода SQL.
    /*

    Получить сотрудников торгового

    представителя в отчете

    */

    

    SELECT

    lastName, firstName

    FROM

    employees

    WHERE

    reportsTo = 1143

    AND jobTitle = 'Sales Rep';

     

 

Обратите внимание, что MySQL не поддерживает вложенные комментарии.

 

Исполняемые комментарии

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

Ниже показан синтаксис исполняемого комментария:

/*! MySQL-specific code */

 

Например, следующий оператор использует исполняемый комментарий:

SELECT 1 /*! +1 */

 

Оператор возвращает 2 вместо 1. Однако он вернет 1, если вы выполните его в других системах баз данных.

Если вы хотите выполнить комментарий из определенной версии MySQL, вы используете следующий синтаксис:

/*!##### MySQL-specific code */

 

Строка ‘#####’ представляет минимальную версию MySQL, которая может выполнить комментарий. Первый # является основной версией, например, 5 или 8. Вторые 2 цифры (##) являются младшей версией. И последние 2 уровня патча.

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

CREATE TABLE t1 (

k INT AUTO_INCREMENT,

KEY (k)

) /*!50110 KEY_BLOCK_SIZE=1024; */

 

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



2020-04-03T13:23:40
База данных MySQL

Как сопоставить значения NULL с другими значимыми значениями

Резюме: в этой статье вы научитесь отображать значения NULL в другие значимые значения.

Dr.EFCodd, который является создателем реляционной модели для базы данных, представил эту концепцию NULL в теории реляционных баз данных. Согласно Dr.EFCodd, NULL означает неизвестное значение или недостающая информацию.

MySQL также поддерживает NULL, которые представляют концепцию отсутствующей или неприменимой информации.

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

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

Синтаксис функции IF следующий:

IF(exp,exp_result1,exp_result2);

 

Если значение exp имеет TRUE (когда exp <> 0 и exp <> NULL), то функция IF возвращает значение из в противном случае exp_result1 возвращает значение exp_result2.

Возвращается значение функции IF может быть строка или число, в зависимости от выражений exp_result1 и exp_result2.

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

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

Ниже приведены частичные данные в таблице customers, которая включает в себя customername state и country:

SELECT

customername, state, country

FROM

customers

ORDER BY country;

 

Значения состояния недоступны для некоторых клиентов. Вы можете использовать функцию IF для отображения значения NULL как N/A:

SELECT

customername, IF(state IS NULL, 'N/A', state) state, country

FROM

customers

ORDER BY country;

 

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

IFNULL(exp,exp_result);

 

 

Функция IFNULL возвращает значение выражения exp_result, если exp вычисляется в значение NULL, в противном случае, он возвращает значение выражения exp.

В следующем запросе функция IFNULL отображается NULL как неизвестная следующим образом:

SELECT customername,

IFNULL(state,"N/A")state,

country

FROM customers

ORDER BY country;

 

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



2020-03-28T11:51:49
База данных MySQL

Как получить сегодняшнюю дату в MySQL. Руководство для начинающих

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

 

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

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

SELECT

column_list

FROM

table_name

WHERE

expired_date = today;

 

Чтобы получить сегодняшнюю дату, вы используете функцию CURDATE() следующим образом:

mysql> SELECT CURDATE() today;

+------------+

| today      |

+------------+

| 2020-03-12 |

+------------+

1 row in set (0.00 sec)

 

Или вы можете получить часть даты из текущего времени, возвращенного функцией NOW():

mysql> SELECT DATE(NOW()) today;

+------------+

| today      |

+------------+

| 2020-03-12 |

+------------+

1 row in set (0.00 sec)

 

Таким образом, запрос должен измениться на:

SELECT

column_list

FROM

table_name

WHERE

expired_date = CURDATE();

 

Если столбец expired_date содержит часть даты и времени, следует использовать функцию DATE(), чтобы извлечь только часть даты и сравнить ее с текущей датой:

SELECT

column_list

FROM

table_name

WHERE

DATE(expired_date) = CURDATE();

 

Создание вашей хранимой функции MySQL

Если вы часто используете эту функцию CURDATE() в своих запросах и хотите заменить ее на функцию today(), чтобы сделать запросы более читабельными, вы можете создать свою собственную хранимую функцию с именем today() следующим образом:

DELIMITER $$

CREATE FUNCTION today()

RETURNS DATE

BEGIN

RETURN CURDATE();

END$$

DELIMITER ;

 

Теперь вы можете использовать созданную вами функцию today() следующим образом:

mysql> SELECT today();

+------------+

| today()    |

+------------+

| 2020-03-12 |

+------------+

1 row in set (0.00 sec)

 

Как насчет завтра? Это должно быть так просто, как:

mysql> SELECT today() + interval 1 day Tomorrow;

+------------+

| Tomorrow   |

+------------+

| 2017-07-09 |

+------------+

1 row in set (0.00 sec)

 

И вчерашний день также прост:

mysql> SELECT today() - interval 1 day Yesterday;

+------------+

| Yesterday  |

+------------+

| 2017-07-07 |

+------------+

1 row in set (0.00 sec)

 

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



2020-03-12T07:27:51
База данных MySQL

NULL в MySQL. Руководство для начинающих

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

 

Введение в NULL в MySQL

В MySQL значение NULL означает неизвестное. Значение NULL отличается от нуля (0) или пустой строки ».

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

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

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

Например, следующий оператор создает таблицу leads:

DROP TABLE IF EXISTS leads;



CREATE TABLE leads (

id INT AUTO_INCREMENT PRIMARY KEY,

first_name VARCHAR(50) NOT NULL,

last_name VARCHAR(50) NOT NULL,

source VARCHAR(255) NOT NULL,

email VARCHAR(100),

phone VARCHAR(25)

);

 

В таблице leads столбец id является столбцом первичного ключа, поэтому он не принимает никаких значений NULL.

Столбцы first_name, last_name и source используют ограничение NOT NULL, следовательно, вы не можете вставить любые значения NULL в эти столбцы, в то время как emailи phoneстолбцы принимают значения NULL.

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

INSERT INTO leads(first_name,last_name,source,email,phone)

VALUE('Andrey','Terminator','Web Search','Andrey.Terminator@andreyex.ru',NULL);

 

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

INSERT INTO leads(first_name,last_name,source,phone)

VALUES

('Max','Hard','Cold Calling','(123)-456-789'),

('Lilu','Dalas','Web Search','(987)-654-321');

 

SET NULL в заявлении UPDATE

Чтобы установить значение столбца в NULL, вы используете оператор присваивания ( =). Например, чтобы обновить телефон Lilu Dalas до NULL, вы используете следующую   инструкцию UPDATE:

UPDATE

leads

SET

phone = NULL

WHERE

id = 3;

MySQL ORDER BY NULL

 

Если вы используете предложение ORDER BY для сортировки результирующего набора в порядке возрастания, MySQL считает, что значения NULL ниже, чем другие значения, поэтому NULL сначала он представляет значения.

Следующее утверждение сортирует клиентов по номеру телефона в порядке возрастания.

SELECT

*

FROM

leads

ORDER BY phone;

 

Если вы используете ORDER BY DESC, значения NULL появляются в конце набора результатов. Смотрите следующий пример:

SELECT

*

FROM

leads

ORDER BY phone DESC;

 

Для проверки NULL в запросе вы используете оператор IS NULL или IS NOT NULL в предложении WHERE.

Например, чтобы получить потенциальных клиентов, которые еще не указали номер телефона, вы используете оператора IS NULL следующим образом:

SELECT

*

FROM

leads

WHERE

phone IS NULL;

 

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

SELECT

*

FROM

leads

WHERE

email IS NOT NULL;

 

Даже если значение NULL не равно NULL, два значения NULL равны в предложении GROUP BY.

SELECT

id, first_name, last_name, email, phone

FROM

leads

GROUP BY email;

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

 

NULL и индекс UNIQUE в MySQL

Когда вы используете ограничение UNIQUE или индекс UNIQUE для столбца, вы можете вставить несколько значений NULL в этот столбец. Это прекрасно, потому что в этом случае MySQL считает, что значения NULL различны.

Давайте проверим этот момент, создав индекс UNIQUE для столбца phone.

CREATE UNIQUE INDEX idx_phone ON leads(phone);

 

Обратите внимание, что если вы используете механизм хранения BDB, MySQL считает, что значения NULL равны, поэтому вы не можете вставить несколько значений NULL в столбец с уникальным ограничением.

 

Функция NULL в MySQL

MySQL предоставляет несколько полезных функций, которые эффективно обрабатывают NULL: IFNULL, COALESCE и NULLIF.

Функция IFNULL принимает два параметра. Функция IFNULL возвращает первый аргумент, если он не NULL, в противном случае она возвращает второй аргумент.

Например, следующий оператор возвращает номер телефона, если это не NULL, иначе он возвращает N/A вместо NULL.

SELECT

id,

first_name,

last_name,

IFNULL(phone, 'N/A') phone

FROM

leads;

 

Функция COALESCE принимает список аргументов и возвращает первый аргумент не-NULL. Например, вы можете использовать функцию COALESCE для отображения контактной информации о потенциальной возможности в зависимости от приоритета информации в следующем порядке: телефон, электронная почта и N/A.

SELECT

id,

first_name,

last_name,

COALESCE(phone, email, 'N/A') contact

FROM

leads;

 

Функция NULLIF принимает два аргумента. Если два аргумента равны, функция NULLIF возвращает NULL. В противном случае она возвращает первый аргумент.

Функция NULLIF полезна, если у вас есть как NULL и пустые строковые значения в столбце. Например, по ошибке вы вставляете в таблицу leads следующую строку :

INSERT INTO leads(first_name,last_name,source,email,phone)

VALUE('Andreyex','Destroyer','Web Search','Andreyex.Destroyer@example.ru','');

 

Телефон представляет собой пустую строку вместо NULL.

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

SELECT

id,

first_name,

last_name,

COALESCE(phone, email, 'N/A') contact

FROM

leads;

 

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

SELECT

id,

first_name,

last_name,

COALESCE(NULLIF(phone, ''), email, 'N/A') contact

FROM

leads;

 

Из этой статьи вы узнали, как работать с NULL в MySQL и как использовать некоторые удобные функции для обработки запросов NULL.



2020-03-01T16:23:29
База данных MySQL

Интервал в MySQL

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

 

Введение в интервальные значения MySQL

Значения интервала MySQL используются в основном для расчета даты и времени. Чтобы создать значение интервала, вы используете следующее выражение:

INTERVAL expr unit

 

За ним следует ключевое слово INTERVAL expr, определяющее значение интервала и unitуказывающее единицу измерения интервала. Например, чтобы создать 1-дневный интервал, вы используете следующее выражение:

INTERVAL 1 DAY

 

Обратите внимание, что INTERVAL и UNIT без учета регистра, поэтому следующее выражение эквивалентно приведенному выше:

interval 1 day

 

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

date + INTERVAL expr unit

date - INTERVAL expr unit

 

Значения интервалов также используются в различных временных функциях, таких как DATE_ADD, DATE_SUB, TIMESTAMPADD и TIMESTAMPDIFF

MySQL определяет стандартные форматы expr и unit как показано в следующей таблице:
























unitexpr
DAYДни
DAY_HOURДни: Часы
DAY_MICROSECONDДни: Микросекунды
DAY_MINUTEДни: Минуты
DAY_SECONDДни: Секунды
HOURЧасы
HOUR_MICROSECONDЧасы: Микросекунды
HOUR_MINUTEЧасы: Минуты
HOUR_SECONDЧасы: Секунды
MICROSECONDМикросекунд
MINUTEМинуты
MINUTE_MICROSECONDМинуты: Микросекунды
MINUTE_SECONDМинуты: Секунды
MONTHМесяц
QUARTERДекада
SECONDСекунды
SECOND_MICROSECONDСекунды: Микросекунды
WEEKНеделя
YEARГод
YEAR_MONTHГод: Месяц

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

Следующее утверждение добавляет 1 день к January 1st 2020:

SELECT '2020-01-01' + INTERVAL 1 DAY;

+-------------------------------+

| '2020-01-01' + INTERVAL 1 DAY |

+-------------------------------+

| 2020-01-02                    |

+-------------------------------+

1 row in set (0.01 sec)

 

Если значение интервала используется в выражении, которое включает значение DATE или значение интервала DATETIME находится справа от выражения, вы можете использовать отрицательное значение expr, как показано в следующем примере:

SELECT '2020-01-01' + INTERVAL -1 DAY;

+--------------------------------+

| '2020-01-01' + INTERVAL -1 DAY |

+--------------------------------+

| 2019-12-31                     |

+--------------------------------+

1 row in set(0.00sec)

 

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

SELECT DATE_ADD('2020-01-01', INTERVAL 1 MONTH)1_MONTH_LATER,

DATE_SUB('2020-01-01',INTERVAL 1 MONTH) 1_MONTH_BEFORE;

+---------------+----------------+

| 1_MONTH_LATER | 1_MONTH_BEFORE |

+---------------+----------------+

| 2020-02-01    | 2019-12-01     |

+---------------+----------------+

1 row in set (0.00 sec)

 

Следующий запрос использует функцию TIMESTAMPADD(unit, interval, expression) для добавления 30 минут к значению временной метки:

SELECT TIMESTAMPADD(MINUTE,30,'2020-01-01') 30_MINUTES_LATER;

+---------------------+

| 30_MINUTES_LATER    |

+---------------------+

| 2020-01-01 00:30:00 |

+---------------------+

1 row in set (0.00 sec)

 

Практический пример интервала в MySQL

Давайте создать новую таблицу с именем memberships для демонстрации:

CREATE TABLE memberships (

id INT AUTO_INCREMENT PRIMARY KEY,

email VARCHAR(355) NOT NULL,

plan VARCHAR(255) NOT NULL,

expired_date DATE NOT NULL

);

 

В таблице memberships в столбце expired_date хранится дата окончания членства каждого участника.

Следующий оператор вставляет несколько строк в таблицу memberships.

INSERT INTO memberships(email, plan, expired_date)

VALUES('andreyex@example.ru','Gold','2020-02-13'),

('alex@example.ru','Platinum','2020-02-10'),

('max@example.ru','Silver','2020-02-08');

 

Предположим, сегодня 2020-02-06 вы можете найти участников, срок действия которых истек в течение 7 дней, с помощью следующего запроса:

SELECT

email,

plan,

expired_date,

DATEDIFF(expired_date, '2020-02-06') remaining_days

FROM

memberships

WHERE

'2020-02-06' BETWEEN DATE_SUB(expired_date, INTERVAL 7 DAY) AND expired_date;

 

В этом запросе мы использовали функцию DATE_SUB для вычитания истекшей даты на 7 дней, указанных значением интервала (INTERVAL 7 DAY).

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

 



2020-02-20T08:58:43
База данных MySQL