Поиск по сайту:
Повесть об этом стара, но слава нетленна (Вергилий).

12 основных примеров команды INSERT в MySQL

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
04.11.2016

Одна из общих операций в MySQL, чтобы вставить запись в таблицу.

В этом руководстве объясняется, как использовать команду INSERT в MySQL и несколько практических и полезных примеров.

Рассматриваются в данном руководстве следующие примеры:

  1. Основные примеры команды Insert
  2. Вставьте значения только для выбранных столбцов
  3. Пример INSERT с SET
  4. Вставка записей на основе строк из другой таблицы
  5. Вставка значений выбранных столбцов из другой таблицы
  6. Вставить записи в определенный раздел
  7. Вставка записи в несколько разделов в таблице
  8. Игнорировать сообщение об ошибке во время ввода текста
  9. Значения по умолчанию в Insert
  10. Экспрессия в вставки значений
  11. Сделайте приоритет команды Insert ниже или выше
  12. При найденном дубликате, обновить значение столбца

 

В следующем примере мы подключимся к базу данных andreyexbase с именем пользователя devuser и паролем mysecretpwd

# mysql -u devuser -pmysecretpwd andreyexbase
mysql>

 

Для этого урока мы вставим значения в таблице сотрудников. Это структура таблицы сотрудников.

mysql> desc worker;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| id     | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | YES  |     | NULL    |                |
| dept   | varchar(10) | YES  |     | NULL    |                |
| salary | int(10)     | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+

 

Если вы новичок в MySQL, используйте это Как создать MySQL базу данных и таблицу, чтобы начать работу.

1. Основные примеры команды Insert

Следующая команда вставит три новых записей в таблице сотрудников. В этом примере, после “values”, укажет значения для всех столбцов в таблице.

INSERT INTO worker VALUES(100,'Andrey','Sales',5000);

 

С помощью команды SELECT в MySQL, убедитесь, что записи был успешно установлены.

SELECT * FROM worker;

 

2. Вставьте значения только для выбранных столбцов

Если вы хотите, вставить значения только выбранных столбцов, следует указать имена столбцов в команде вставки.

Ниже будет вставлены две записи только для столбцов идентификатора и имени.

INSERT INTO worker(id,name) VALUES(200,'Maxim');

 

Для “отдела” и столбца “зарплаты”, мы не указали никаких значений для этой конкретной записи. Таким образом, мы будем видеть NULL в качестве значения в нашем выводе команды SELECT. Обратите внимание, что это не строка “NULL”, именно значение столбца в строке действительно нулевая.

mysql> SELECT * FROM worker;
+-----+--------+-------+--------+
| id  | name   | dept  | salary |
+-----+--------+-------+--------+
| 100 | Andrey | Sales |   5000 |
| 200 | Maxim  | NULL  |   NULL |
+-----+--------+-------+--------+
2 rows in set (0.00 sec)

 

3. Пример INSERT с SET

Вместо того чтобы использовать ключевого слова “values” в вашей команде выбора, вы можете также использовать ключевое слово “set” в вашей команде выбора, как показано ниже.

Следующая команда вставки точно так же, как и в предыдущем примере. Но, вместо значения, использует набор.

mysql> INSERT INTO worker SET id=300, name='Dimon';

 

mysql> select * from worker;
+-----+--------+-------+--------+
| id  | name   | dept  | salary |
+-----+--------+-------+--------+
| 100 | Andrey | Sales |   5000 |
| 200 | Maxim  | NULL  |   NULL |
| 300 | Dimon  | NULL  |   NULL |
+-----+--------+-------+--------+

 

4. Вставка записей на основе строк из другой таблицы

В этом примере мы будем использовать INSERT … SELECT метод, который будет выбирать строки из другой таблицы, и вставлять его в нашу таблицу.

В следующем примере будет принимать все записи из таблицы подрядчика и вставить его в таблицу сотрудников.

INSERT INTO worker SELECT * FROM contractor;

 

Вы можете также использовать различные условия в “where” выберите команду, чтобы выбрать записи из таблицы подрядной и вставить в таблицу служащих, как показано ниже.

INSERT INTO worker SELECT * FROM contractor WHERE salary >= 7000;

 

Примечание: Если вы привыкли к базе данных Oracle, вы будете использовать “insert into worker AS select * from contractor”. Обратите внимание, что MySQL не использует ключевого слова “AS” в данном контексте.

5. Вставка значений выбранных столбцов из другой таблицы

Кроме того, можно выбрать только выбранные значения столбцов строк из другой таблицы и вставить его в таблицу.

В следующем примере будет принимать значения “ID” и “name” для всех строк в таблице подрядчика и вставлять его в таблицу сотрудников.

INSERT INTO worker(id,name) SELECT id,name FROM contractor;

 

Так же, как и в предыдущем примере, вы можете также использовать, когда есть условие и ограничение на записи.

INSERT INTO worker(id,name) SELECT id,name FROM contractor WHERE salary >= 7000;

 

Обратите внимание, что если запись уже существует для первичного ключа (что идентификатор) в таблице сотрудников, вы получите следующее сообщение об ошибке. Следующее сообщение об ошибке указывает на то, что идентификационный номер сотрудника “100” уже существует в таблице сотрудников.

ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'

 

6. Вставить записи в определенный раздел

Если вы создали таблицу, используя раздел по диапазону, то вы можете указать раздел в вашей команде вставки, как показано ниже.

В следующем примере будет вставлять записи в таблицу служащих в разделе p1

INSERT INTO worker PARTITION (p1) VALUES(100,'Andrey','Sales',5000);

 

Обратите внимание, что строка уже существует в данном конкретном разделе. Например, в данном примере p1, вы получите следующее сообщение об ошибке:

ERROR 1729 (HY000): Found a row not matching the given partition set

 

Примечание: Эта функция будет работать только на MySQL 5.6 и выше.

7. Вставка записи в несколько разделов в таблице

Вы также можете вставлять записи на несколько разделов с помощью одного оператора вставки.

Следующий оператор вставки вставляет запись с идентификатором “100” в разделе p1, и запись с идентификатором “200” в разделе p2.

INSERT INTO worker PARTITION (p1, p2) VALUES(100,'Andrey','Sales',5000), (200,'Maxim','Technology',5500);

 

Обратите внимание, что в приведенном выше примере, если по каким-либо причинам MySQL не может вставить одну из записей в раздел, весь оператор вставки не получится, и обе записи не будут вставлены.

Опять же, это будет работать только на MySQL 5.6 и выше.

8. Игнорировать сообщение об ошибке во время ввода текста

Если по какой-то причине вы хотите проигнорировать сообщение об ошибке MySQL во время вставки, вы можете использовать игнорирование вставки.

Например, следующая команда выдаст сообщение об ошибке, так как запись уже существует в таблице.

mysql> INSERT INTO worker VALUES(100,'Andrey','Sales',5000);
ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'

 

Чтобы проигнорировать выше сообщение об ошибке, вы можете использовать “insert ignore” (вместо того, чтобы просто вставить), как показано ниже. Обратите внимание, что это еще не вставит запись в таблицу, поскольку есть primary key в идентификаторе столбца. Но, это просто игнорирует сообщение об ошибке.

mysql> INSERT IGNORE INTO worker VALUES(100,'Andrey','Sales',5000);
Query OK, 0 rows affected (0.00 sec)

 

9. Значения по умолчанию в Insert

Если MySQL работает в строгом режиме, и когда мы не указываем значения по умолчанию, он выдаст сообщение об ошибке.

Однако, если строгий режим не включен (который по умолчанию), и когда вы делаете команду вставки и не указываете значение столбца, он будет использовать значение по умолчанию для этого конкретного типа данных столбца.

Например, в бонусной таблице, оба значения столбца установлены в положение “not null”.

mysql> DESC bonus;
+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id     | int(11) | NO   |     | NULL    |       |
| amount | int(11) | NO   |     | NULL    |       |
+--------+---------+------+-----+---------+-------+

 

Давайте вставим запись в эту таблицу для столбца идентификаторов.

INSERT INTO bonus(id) VALUES(100);

 

Когда вы выполните команду select, вы заметите, что колонка “сумма” автоматически устанавливается неявной значением 0 по умолчанию.

SELECT * FROM bonus;
+-----+--------+
| id  | amount |
+-----+--------+
| 100 |      0 |
+-----+--------+

 

Если вы не указываете как для идентификатора и суммы, будет установлено на 0 автоматически, как показано ниже. Если значения не заданы, то MySQL будет использовать значения по умолчанию.

INSERT INTO bonus VALUES();

mysql> select * from bonus;
+-----+--------+
| id  | amount |
+-----+--------+
|   0 |      0 |
+-----+--------+

 

Примечание: Вы можете также использовать ключевое слово “DEFAULT” в значениях, как показано ниже, что позволит достичь выхода, как описано выше.

INSERT INTO bonus VALUES(DEFAULT,DEFAULT);

 

Для строки столбца, значение по умолчанию пустая строка. Кроме того, обратите внимание, что, когда числовой столбец имеет множество AUTO_INCREMENT, то значение по умолчанию будет следующее значение соответствующей последовательности.

10. Экспрессия в вставки значений

В следующем примере для значения бонуса, мы определили “5000 + идентификатор” в качестве значения. Таким образом, это добавит значение идентификатор служащего к значению бонуса и вставит окончательное значение в колонке бонуса, как показано ниже.

Вы можете использовать “+”, “-“, “*”, или любой другой действующий оператор выражения MySQL в значениях. В следующем примере, он использует “50 * 2” для столбца идентификаторов. Таким образом, идентификатор, который будет вставлен в “100”

Вы можете также обратиться к значениям других столбцов. В следующем примере, он использует “5000 + id” для бонусного столбца. Таким образом, это будет иметь значение столбца идентификаторов (который является 100), и добавить его к 5000. Таким образом, окончательное значение бонуса “5100”, как показано ниже.

mysql> INSERT INTO worker VALUES(50*2,'Andrey','Sales',5000+id);

mysql> select * from worker;
+-----+--------+-------+--------+
| id  | name   | dept  | salary |
+-----+--------+-------+--------+
| 100 | Andrey | Sales |   5100 |
+-----+--------+-------+--------+

 

11. Сделайте приоритет команды Insert ниже или выше

Для движка, которая поддерживает блокировку таблицы (например, MyISAM), вы можете указать приоритет вашей вставки.

Например, команда Insert будет задерживать вставку (сделать его низкий приоритет) до тех пор, пока читают таблицы.

INSERT LOW_PRIORITY INTO worker VALUES(100,'Andrey','Sales',5000);

 

Можно также указать высокий приоритет, как показано ниже, который будет вести себя противоположно низким приоритетом вставки.

INSERT HIGH_PRIORITY INTO worker VALUES(100,'Andrey','Sales',5000);

 

Пожалуйста, имейте в виду, что если ваша база данных интенсивно считывается и если вы укажете LOW_PRIORITY в команде Insert, то ваша вставка может длится в течение очень долгого времени.

Кроме того, обратите внимание, что это немного отличается от “INSERT … DELAYED”, который является устаревшим, начиная с MySQL 5.6.6. Таким образом, не следует больше использовать “insert … delayed”.

12. При найденном дубликате, обновить значение столбца

Во время вставки, если есть дубликат ключа, она не будет выполнена, как показано ниже, в качестве идентификатора “100” уже существует в таблице.

mysql>  INSERT INTO worker VALUES(100,'Andrey','Sales',5000);
ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY'

mysql> select * from worker;
+-----+--------+-------+--------+
| id  | name   | dept  | salary |
+-----+--------+-------+--------+
| 100 | Andrey | Sales |   5000 |
+-----+--------+-------+--------+

 

Тем не менее, вы можете сделать некоторые обновления для этой конкретной записи (если дубликат обнаружен) с помощью “ON DUPLICATE KEY UPDATE”, как показано ниже.

Как показано в следующем примере, когда вставка не удалось (из-за дубликата ключа), мы обновляем столбец заработной платы путем добавления 500 к его стоимости.

mysql> INSERT INTO worker VALUES(100,'Andrey','Sales',5000) on DUPLICATE KEY UPDATE salary=salary+500;

mysql> select * from worker;
+-----+--------+-------+--------+
| id  | name   | dept  | salary |
+-----+--------+-------+--------+
| 100 | Andrey | Sales |   5500 |
+-----+--------+-------+--------+

 

Обратите внимание, что в приведенном выше примере, при вставке, даже если обновляется только одна запись, то выход будет такой: “2 rows affected”.

12 основных примеров команды Insert в MySQL

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Спасибо!

Теперь редакторы в курсе.