Лекция
Привет, Вы узнаете о том , что такое виртуальные столбцы, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое виртуальные столбцы, виртуальный столбец , настоятельно рекомендую прочитать все из категории MySql (Maria DB).
Введение:
Что такое виртуальная колонка?
Синтаксис:
Синтаксис для добавления нового виртуального столбца,
==> Изменить таблицу имя_таблицы добавить столбец имя_столбца, создаваемое всегда как виртуальное имя_столбца;
Пример :
Изменить таблицу контактов добавить столбец, который всегда создается как mydbops_test virtual / stored.
GENERATED ALWAYS - указывает, что столбец является сгенерированным столбцом.
ВИРТУАЛЬНО - значения столбцов не сохраняются, но они оцениваются при чтении строк.
STORED - значения столбцов оцениваются и сохраняются при вставке или обновлении строк.
Случай 1 (с использованием concat):
Например, у нас есть структура таблицы mydbops_lab_test, как показано ниже,
mysql> создать таблицу mydbops_lab_test (id int (11) NOT NULL AUTO_INCREMENT первичный ключ, имя varchar (20), фамилия varchar (20), full_name char (41) ВСЕГДА ГЕНЕРИРУЕТСЯ КАК (concat (имя, '', фамилия)), email_id varchar (25)); Запрос в порядке, затронуты 0 строк (0,40 сек)
mysql> desc mydbops_lab_test; + ----------- + ------------- + ------ + ----- + --------- + ------------------- + | Поле | Тип | Null | Ключ | По умолчанию | Экстра | + ----------- + ------------- + ------ + ----- + --------- + ------------------- + | id | int (11) | НЕТ | PRI | NULL | auto_increment | | имя | варчар (20) | ДА | | NULL | | | фамилия | варчар (20) | ДА | | NULL | | | полное_имя | символ (41) | ДА | | NULL | ВИРТУАЛЬНАЯ ГЕНЕРАЦИЯ | | email_id | варчар (25) | ДА | | NULL | | + ----------- + ------------- + ------ + ----- + --------- + ------------------- + 5 рядов в наборе (0,00 сек)
Нам нужно протестировать столбец с полным именем, поэтому заполните несколько строк в таблице контактов.
mysql> выберите * из mydbops_lab_test; + ---- + ----------- + ---------- + -------------- + ------ ----------- + | id | имя | фамилия | полное_имя | email_id | + ---- + ----------- + ---------- + -------------- + ------ ----------- + | 1 | Джон | рубин | Джон Рубин | rubin@gmail.com | | 2 | отметка | Генри | Марк Генри | mark@gmail.com | | 3 | Питер | Паркер | Питер Паркер | peter@yahoo.com | | 4 | Джим | роза | Джим Роуз | jim@outlook.com | + ---- + ----------- + ---------- + -------------- + ------ ----------- + 4 ряда в наборе (0,00 сек)
Добавление виртуального столбца в существующую таблицу:
mysql> ALTER TABLE v_column ДОБАВИТЬ полное_имя char (41) СОЗДАВАЕТСЯ ВСЕГДА КАК (concat (firstname, '', lastname)) VIRTUAL NOT NULL; Запрос в порядке, затронуто 0 строк (0,35 секунды) Записей: 0 Дубликатов: 0 Предупреждений: 0
Случай 2 (с использованием разницы):
mysql> создать таблицу mydbops_lab_test_1 (id int (11) NOT NULL AUTO_INCREMENT первичный ключ, Total_cost float (9,4), Дорогой поплавок (9,4), Balance_amount float (12,6) ВСЕГДА ГЕНЕРИРУЕТСЯ КАК (Total_cost - Дорого), email_id varchar (25), имя varchar (30)); Запрос в порядке, затронуто 0 строк (0,34 секунды)mysql> desc mydbops_lab_test_1; + ---------------- + ------------- + ------ + ----- + ----- ---- + ------------------- + | Поле | Тип | Null | Ключ | По умолчанию | Экстра | + ---------------- + ------------- + ------ + ----- + ----- ---- + ------------------- + | id | int (11) | НЕТ | PRI | NULL | auto_increment | | Total_cost | поплавок (9,4) | ДА | | NULL | | | Дорогое | поплавок (9,4) | ДА | | NULL | | | Balance_amount | Поплавок (12,6) | ДА | | NULL | ВИРТУАЛЬНАЯ ГЕНЕРАЦИЯ | | email_id | VARCHAR (25) | ДА | | NULL | | | имя | VARCHAR (30) | НЕТ | | NULL | | + ---------------- + ------------- + ------ + ----- + ----- ---- + ------------------- + 6 рядов в наборе (0,00 сек)
mysql> выберите идентификатор, имя, Total_cost, Balance_amount из mydbops_lab_test_1, где Balance_amount <2000 заказ по Balance_amount desc;
+ ---- + -------- + ------------ + ---------------- + | id | имя | Total_cost | Balance_amount | + ---- + -------- + ------------ + ---------------- + | 1 | роза | 2000.0000 | 1949.109985 | | 5 | радж | 810.1100 | 798.209961 | | 4 | Кевин | 900.0000 | 579.000000 | | 9 | суреш | 677.1000 | 457.099976 | | 3 | Джим | 100.0000 | 71.000000 | | 8 | колокол | 41.9700 | 19.970001 | + ---- + -------- + ------------ + ---------------- + 6 рядов в наборе (0,00 сек)
Индексирование виртуальных столбцов:
Пример :
Здесь я добавил индекс для виртуального сгенерированного столбца (Balance_amount).
Синтаксис:
mysql> изменить таблицу mydbops_lab_test_1 добавить индекс idx_Balance_amount (Balance_amount); Запрос в порядке, затронуто 0 строк (0,33 секунды) Записей: 0 Дубликатов: 0 Предупреждений: 0
mysql> показать таблицу создания mydbops_lab_test_1 \ G ************************** 1. строка ******************** ******* Таблица: mydbops_lab_test_1 Создать таблицу: СОЗДАТЬ ТАБЛИЦУ `mydbops_lab_test_1` ( `id` int (11) NOT NULL AUTO_INCREMENT, `Total_cost` float (9,4) ПО УМОЛЧАНИЮ NULL, `Дорогой` float (9,4) DEFAULT NULL, `Balance_amount` float (12,6) ВСЕГДА ГЕНЕРИРУЕТСЯ КАК ((` Total_cost` - `Дорого`)) ВИРТУАЛЬНО, `email_id` varchar (25) ПО УМОЛЧАНИЮ NULL, `name` varchar (30) НЕ NULL, ПЕРВИЧНЫЙ КЛЮЧ (`id`), КЛЮЧ `idx_Balance_amount` (` Balance_amount`) ) ДВИГАТЕЛЬ = InnoDB AUTO_INCREMENT = 11 НАБОР ДАННЫХ ПО УМОЛЧАНИЮ = latin1 1 ряд в наборе (0,00 сек)
Преимущества:
Недостатки:
Ключевые моменты, о которых следует помнить:
Сгенерированные выражения столбцов подчиняются некоторым правилам:
Часть оператора Select не может присвоить значения сгенерированным столбцам в целевой таблице.
Исследование, описанное в статье про виртуальные столбцы, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое виртуальные столбцы, виртуальный столбец и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории MySql (Maria DB)
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)