DML – Data Manipulation Language. Согласно книге Д. Осипова “Базы данных и Delphi”. Итак, базис языка строится на 3 командах
INSERT – вставка новых записей;
UPDATE – редактирование записей в таблице;
DELETE – удаление записей в таблице;
Итак, начнём эксперименты с СУБД MYSQL и консольным клиентом MySQL.exe В данном посте посмотрим как работает оператор INSERT
INSERT
Если пользоваться официальным синтаксисом с сайта mysql.exe, то INSERT может быть 3 разновидностей.
1 2 3 4 5 6 7 8 9 |
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... или INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... или INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ... |
При этом, INSERT INTO – для вставки одной записи, INSERT SELECT – для вставки сразу нескольких записей.
Также выражение expression
может относится к любому столбцу, который ранее был внесен в список значений. Например, можно указать следующее:
1 |
mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); |
Но нельзя указать:
1 |
mysql> INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15); |
Итак, продолжим работать с созданной в программе workbench базой sql_groupby. Вы можете легко создать свою базу данных для экспериментов. Для начала посмотрим описание одной из таблиц sales
Описание столбцов даст нам корректный синтаксис для команд вставки INSERT. Попробуем вставить новую запись методом INSERT… VALUES…
Обратите внимание, что в команде я указал 2 поля, а не 3. Пропустил автоинкрементное поле. При вставке оно заполнилось само. Если попробовать заполнить только 1 поле, то, скорее всего – будет ошибка, так как все поля Not NULLed – не нулевые. И Default value мы не назначали. То есть в каждом поле должно быть какое-то значение.
MySQL позволяет вставлять сразу несколько записей. Это особенно удобно, когда нужно вставить несколько записей, в рамках одной транзакции.
Insert и Default-ные значения
Если вместо ключевого слова VALUES написать DEFAULT VALUES, тогда в таблице окажутся значения по умолчанию, а в тех полях, для которых не определены DEFAULT VALUES, окажутся значения NULL. Проверим это, выставив предварительно, в программе WorkBench дефолтные значения.
Итак, значения по умолчанию выставили. Далее пробуем в MySQL.exe заполнить только одно поле, второе – заполнится значением по умолчанию;
В книге Д. Осипова, я прочитал, что можно вставить только дефолтные значения таким образом
Insert into TableName Default Values
Но, к сожалению мой сервер такую команду не принял.
То есть, чтобы вставить всю строку дефолтной, нужно прописать…
INSERT ... SELECT
Как уже упоминалось ранее – данные операторы помогают вносить в одну таблицу записи из другой, при условии, что типы данных соответствующих полей совпадают. Для того, чтобы проверить данный факт – просто создадим дубль одной из таблиц в программе WorkBench.
Поэкспериментируем… Я создал дубль таблицы Sales и назвал её SalesCopy, внёс 3 записи с ключами 1,2,3… Такие же ключи есть в таблице Sales…Интересно как поведёт себя система при попытке вставить записи с повторяющимися ключами…
Пробуем вставить записи в таблицу Sales из таблицы SalesCopy…
Итак, система не дала вставить записи, так как повторялись ключи. А также потому, что мы пытались вставить все поля, включая Primary_id. Теперь исправим данный недостаток другим запросом;
То есть, всё что мы сделали – изменили запрос и всё сработало как нужно. Чтобы убедиться в этом – сделаем запрос select для таблицы Sales;
[block id=”mysql-first-steps”]