По умолчанию MySQL не предлагает собственный логический тип данных. Однако он предоставляет нам тип данных TINYINT, позволяющий хранить логические значения — например, значения с типом TINYINT.
В этой статье основное внимание будет уделено тому, как использовать тип данных MySQL TINYINT для хранения логических значений.
MySQL определяет значение 0 как ложное и ненулевое значение как истинное. Следовательно, чтобы использовать значения логических литералов, вы используете константы TRUE и FALSE, которые оценивают значения 0 и 1.
Пример:
select TRUE, FALSE;
После выполнения вышеуказанного запроса вы получите результат, аналогичный показанному ниже:
mysql> select TRUE, FALSE; +------+-------+ | TRUE | FALSE | +------+-------+ | 1 | 0 | +------+-------+ 1 row in set (0.00 sec)
Из вышесказанного мы можем сделать вывод, что MySQL рассматривает 1 и 0 как True и False, соответственно.
Стоит отметить, что в качестве верхнего или нижнего регистра MySQL присваивает True и False 0 и 1, как показано в запросе ниже:
select TRUE, FALSE, true, false, True, False;
Результат показан ниже:
+------+-------+------+-------+------+-------+ | TRUE | FALSE | true | false | True | False | +------+-------+------+-------+------+-------+ | 1 | 0 | 1 | 0 | 1 | 0 | +------+-------+------+-------+------+-------+ 1 row in set (0.00 sec)
Давайте воспользуемся примером, чтобы проиллюстрировать, как мы можем использовать логический тип в MySQL.
Начните с создания базы данных и таблицы с названием languages, в которой будет храниться информация о различных языках программирования.
Внутри таблицы у нас есть следующие столбцы:
Рассмотрим приведенный ниже запрос для реализации указанной выше базы данных:
CREATE DATABASE sampled; USE sampled; CREATE TABLE languages ( ID INT NOT NULL AUTO_INCREMENT, Language_name VARCHAR(100), Beginner_friendly BOOLEAN, PRIMARY KEY (ID) );
После выполнения вышеуказанного запроса у вас будет выборочная база данных с таблицей языков.
Чтобы получить информацию о таблице выше, мы можем использовать оператор MySQL DESC, как показано в выходных данных ниже:
mysql> DESC languages; +-------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+--------------+------+-----+---------+----------------+ | ID | int | NO | PRI | NULL | auto_increment | | Language_name | varchar(100) | YES | | NULL | | | Beginner_friendly | tinyint(1) | YES | | NULL | | +-------------------+--------------+------+-----+---------+----------------+ 3 rows in set (0.01 sec)
Если вы посмотрите на поле Beginner_friendly, которое мы установили как Boolean при создании таблицы, теперь оно показывает Type of TINYINT.
На следующем шаге давайте добавим данные в таблицу, используя запросы, представленные ниже:
INSERT INTO sampled.languages (ID, Language_name, Beginner_friendly) VALUES(1, "Python", True); INSERT INTO sampled.languages (ID, Language_name, Beginner_friendly) VALUES(2, "C++", False);
Если вы сейчас выберете значения в приведенной выше таблице:
mysql> select * from sampled.languages -> ; +----+---------------+-------------------+ | ID | Language_name | Beginner_friendly | +----+---------------+-------------------+ | 1 | Python | 1 | | 2 | C++ | 0 | +----+---------------+-------------------+ 2 rows in set (0.00 sec)
Вы увидите, что значения установлены на 0 и 1 соответственно.
ПРИМЕЧАНИЕ. В столбце Boolean можно хранить числовые значения, отличные от значений True и False. Например, рассмотрим запрос ниже:
INSERT INTO sampled.languages (ID, Language_name, Beginner_friendly) VALUES(3, "Go Lang", 10);
Если вы выполните вышеуказанный запрос, MySQL не сообщит об ошибке. Вместо этого он сохранит числовое значение как 10. Рассмотрим результат, показанный ниже:
mysql> select * from sampled.languages; +----+---------------+-------------------+ | ID | Language_name | Beginner_friendly | +----+---------------+-------------------+ | 1 | Python | 1 | | 2 | C++ | 0 | | 3 | Go Lang | 10 | +----+---------------+-------------------+ 3 rows in set (0.00 sec)
MySQL поддерживает различные логические операторы, такие как IS TRUE, IS FALSE, IS NOT TRUE, и IS NOT FALSE. По названию можно определить, что некоторые делают то же самое.
Например, IS TRUE и IS NOT FALSE похожи. То же самое относится и к другой паре.
Однако мы можем использовать эти операторы для получения набора значений True или False. Например, приведенный ниже запрос получает все значения, где Beginner_friendly — True.
mysql> select * from sampled.languages WHERE Beginner_friendly IS TRUE; +----+---------------+-------------------+ | ID | Language_name | Beginner_friendly | +----+---------------+-------------------+ | 1 | Python | 1 | | 3 | Go Lang | 10 | +----+---------------+-------------------+ 2 rows in set (0.00 sec)
Как видно из выходных данных, мы получаем только значения, в которых значение Beginner_friendly равно True.
Вы также можете получить значения False, используя IS TRUE или IS NOT TRUE .
mysql> select * from sampled.languages WHERE Beginner_friendly IS NOT TRUE; +----+---------------+-------------------+ | ID | Language_name | Beginner_friendly | +----+---------------+-------------------+ | 2 | C++ | 0 | +----+---------------+-------------------+ 1 row in set (0.00 sec)
В этой статье показано, как реализовать и использовать логические типы данных MySQL для хранения значений True или False.