RU (Русский) Перевод

Привет, будущие маги баз данных! Сегодня мы окунемся в fascинирующий мир логического типа данных в MySQL. Не волнуйтесь, если вы еще ни разу не писали строку кода - я буду вашим доброжелательным проводником в этом путешествии, как я делал для countless студентов на протяжении многих лет teaching. Так что возьмите杯 ваш любимого напитка, и давайте начнем!

MySQL - BOOLEAN

Что такое логический тип данных?

Прежде чем мы перейдем к конкретике MySQL, давайте поймем, что такое логическое значение. Представьте, что вы играете в простую игру "да" или "нет" с другом. Вот что такое логическое значение в программировании - оно может иметь только два возможных значения: true или false.

В реальных приложениях логические значения incredibly полезны. Они могут представлять:

  • whether пользователь вошел в систему или нет
  • если товар есть в наличии
  • whether студент сдал экзамен

Теперь давайте посмотрим, как MySQL обрабатывает это понятие.

Логическое значение в MySQL

Здесь事情变得有点奇怪 - MySQL не имеет nativного типа данных BOOLEAN! Я знаю, это звучит запутанно. Но не волнуйтесь, MySQL имеет хитрый обходной путь.

В MySQL, BOOLEAN на самом деле является синонимом для TINYINT(1). Это означает, что когда вы создаете столбец BOOLEAN, MySQL тайно создает столбец TINYINT(1) вместо этого.

Давайте посмотрим это в действии:

CREATE TABLE game_status (
    id INT AUTO_INCREMENT PRIMARY KEY,
    game_name VARCHAR(50),
    is_completed BOOLEAN
);

INSERT INTO game_status (game_name, is_completed) VALUES 
('Chess', TRUE),
('Monopoly', FALSE),
('Scrabble', TRUE);

SELECT * FROM game_status;

Когда вы выполните этот SELECT запрос, вы можете быть удивлены, увидев:

+----+-----------+--------------+
| id | game_name | is_completed |
+----+-----------+--------------+
|  1 | Chess     |            1 |
|  2 | Monopoly  |            0 |
|  3 | Scrabble  |            1 |
+----+-----------+--------------+

Подождите минутку! Где наши TRUE и FALSE значения? Ну, вспомните, что я говорил о BOOLEAN как о TINYINT(1)? Вот что происходит:

  • TRUE хранится как 1
  • FALSE хранится как 0

Это как если бы MySQL играл тайную игру "1 означает да, 0 означает нет" за кулисами!

Замена BOOLEAN 0,1 на TRUE и FALSE

Теперь вы, возможно, думаете: "Но я хочу видеть TRUE и FALSE в своих результатах!" Не волнуйтесь, MySQL позаботится о вас. Мы можем использовать оператор CASE для преобразования этих хитрых 0 и 1 обратно в TRUE и FALSE:

SELECT 
    id, 
    game_name, 
    CASE 
        WHEN is_completed = 1 THEN 'TRUE'
        ELSE 'FALSE'
    END AS is_completed
FROM game_status;

Это даст вам более читаемый результат:

+----+-----------+--------------+
| id | game_name | is_completed |
+----+-----------+--------------+
|  1 | Chess     | TRUE         |
|  2 | Monopoly  | FALSE        |
|  3 | Scrabble  | TRUE         |
+----+-----------+--------------+

Much better, right? It's like we've given MySQL a little translator to speak our language!

Логические операторы с использованием клиентской программы

Теперь, когда мы понимаем, как MySQL обрабатывает логические значения, давайте рассмотрим некоторые логические операторы. Это как правила нашей игры "да/нет", которые tell MySQL, как combine или manipulate логические значения.

Вот основные логические операторы в MySQL:

Оператор Описание
AND True, если оба истинны
OR True, если хотя бы один истинен
NOT Инвертирует логическое значение
XOR True, если только один истинен

Давайте посмотрим это в действии с нашей таблицей game_status:

-- Оператор AND
SELECT * FROM game_status WHERE is_completed = TRUE AND game_name = 'Chess';

-- Оператор OR
SELECT * FROM game_status WHERE is_completed = TRUE OR game_name = 'Monopoly';

-- Оператор NOT
SELECT * FROM game_status WHERE NOT is_completed;

-- Оператор XOR
SELECT * FROM game_status WHERE is_completed XOR game_name = 'Monopoly';

Давайте разберем это:

  1. Запрос с оператором AND вернет строки только в том случае, если игра завершена И имя игры 'Chess'.
  2. Запрос с оператором OR вернет строки, где либо игра завершена, либо имя игры 'Monopoly'.
  3. Запрос с оператором NOT вернет строки, где игра не завершена (помните, это означает is_completed = 0).
  4. Запрос с оператором XOR вернет строки, где либо игра завершена, либо имя игры 'Monopoly', но не оба.

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

Заключение

И вот мы arrived,朋友们! Мы совершили путешествие через землю логических значений в MySQL, от их странной реализации как TINYINT(1) до мощных операторов, которые помогают нам запрашивать наши данные.

Помните, в мире баз данных все либо 1, либо 0, TRUE или FALSE. Это как база данных постоянно играет в огромную игру "да/нет" с нашими данными. А теперь у вас есть инструменты, чтобы присоединиться к этой игре!

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

Так что идите вперед, мои студенты, и пусть ваши запросы всегда возвращают TRUE (если вы не хотите, чтобы они возвращали FALSE, конечно)!

Credits: Image by storyset