MySQL - ENUM: A Friendly Guide for Beginners
Привет, будущие маги баз данных! Сегодня мы отправляемся в увлекательное путешествие в мир типа данных ENUM в MySQL. Не волнуйтесь, если вы новички в программировании - я буду вашим доброжелательным гидом, и мы рассмотрим эту тему шаг за шагом. Так что возьмите杯 кофе (или чая, если это ваше дело) и погружайтесь с нами!
The MySQL ENUM Data Type
Представьте, что вы создаете базу данных для пиццерии. Вы хотите хранить размеры пицц, но знаете, что есть только определенные варианты: small, medium и large. Вот где на помощь приходит ENUM!
ENUM, сокращение от "enumeration", - это изысканный способ сказать "список предопределенных вариантов". Это как вопрос с множественным выбором, где MySQL позволяет только ответы из тех вариантов, которые вы дали.
Давайте создадим простую таблицу для демонстрации:
CREATE TABLE pizza_orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(50),
size ENUM('small', 'medium', 'large')
);
В этом примере, size
- это наш столбец ENUM. Он может содержать только одно из трех указанных нами значений: 'small', 'medium' или 'large'.
Attributes of ENUM
Теперь давайте поговорим о некоторых классных функциях ENUM:
-
Ordered List: Порядок, в котором вы определяете значения ENUM, имеет значение. MySQL assigns a number to each value, starting from 1.
-
Case-Insensitive: 'SMALL', 'Small', и 'small' treated the same way.
-
Storage Efficiency: ENUM очень эффективен с точки зрения хранения. MySQL хранит каждое значение как число (1, 2, 3 и т.д.), а не как teljes string.
-
Default Value: Если вы не указываете значение при вставке записи, MySQL использует первое значение в списке ENUM в качестве значения по умолчанию.
Inserting Records with Numerical ENUM Values
Вот крошечный секрет: вы можете использовать числа для вставки значений ENUM! Давайте попробуем:
INSERT INTO pizza_orders (customer_name, size) VALUES
('Alice', 1),
('Bob', 2),
('Charlie', 3);
В этом случае:
- 1 represents 'small'
- 2 represents 'medium'
- 3 represents 'large'
Давайте проверим наши результаты:
SELECT * FROM pizza_orders;
Вы увидите, что MySQL правильно интерпретировал числа как соответствующие им значения ENUM. Pretty neat, right?
Inserting Invalid Records
Но что happens if we try to be sneaky and insert an invalid value? Давайте узнаем:
INSERT INTO pizza_orders (customer_name, size) VALUES ('David', 'extra-large');
Ой! MySQL даст нам ошибку, потому что 'extra-large' не входит в наш предопределенный список. Это как пытаться выбрать "D" в вопросе с истинным/ложным - это просто не работает!
Filtering Records by Numeric ENUM Value
Помните, как я mentioned, что значения ENUM хранятся как числа? Мы можем использовать это в своих интересах при фильтрации записей:
SELECT * FROM pizza_orders WHERE size = 2;
Этот запрос вернет все заказы medium пицц. Это как иметь секретный код - 2 означает medium!
Filtering Records by Human-Readable ENUM Value
Конечно, мы также можем фильтровать, используя сами значения ENUM:
SELECT * FROM pizza_orders WHERE size = 'large';
Этот запрос получит все заказы large пицц. Much more intuitive, right?
Disadvantages of ENUM Data Type
Теперь я не был бы хорошим учителем, если бы не предупредил вас о некоторых потенциальных ловушках:
-
Inflexibility: Once you define an ENUM, adding or removing values requires altering the table structure. It's like trying to change the rules mid-game!
-
Database Dependency: If your application logic depends on these ENUM values, you're tying your application closely to the database structure.
-
Sorting Limitations: ENUM values are sorted based on their internal numeric values, which might not always be what you want.
Enum Datatypes Using a Client Program
When working with ENUM through a client program (like a PHP or Python script), you'll typically interact with the human-readable values. However, it's good to be aware of the underlying numeric representation.
Here's a table summarizing the ENUM methods we've discussed:
Method | Example | Description |
---|---|---|
Creating ENUM | ENUM('small', 'medium', 'large') |
Defines the allowed values |
Inserting by String | INSERT ... VALUES ('medium') |
Uses the actual ENUM value |
Inserting by Number | INSERT ... VALUES (2) |
Uses the numeric representation |
Filtering by String | WHERE size = 'large' |
Filters using the ENUM value |
Filtering by Number | WHERE size = 3 |
Filters using the numeric representation |
Remember, whether you're using a client program or working directly in MySQL, these principles remain the same.
And there you have it, folks! We've journeyed through the land of MySQL ENUMs. From creating them to inserting values and even peeking at their secret numeric identities, you're now equipped to use ENUMs in your database adventures.
Just remember, like choosing toppings for a pizza, ENUMs are great when you have a fixed set of options. But if you find yourself constantly wanting to add new flavors, it might be time to consider a different approach.
Keep practicing, stay curious, and happy coding! Who knows, maybe the next time you order a pizza, you'll be thinking about database structures. (Or maybe that's just me? ?)
Credits: Image by storyset