MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
MySQL: Как добавить запись в таблицу
31.03.2013
10:33
Текстовые метки: MySQL, sql, insert, добавление записи
Раздел: Компьютер - Программирование - SQL - MySQL

Команда MySQL INSERT производит вставку новых строк в таблицу.


Пример добавления записи


Есть таблица my_records с тремя полями

  • number — число
  • name — строка
  • date — дата

Нужно добавить 3 записи:

  • 1, Первая запись, 2011-10-01
  • 2, Вторая запись, 2011-10-02
  • 3, Третья запись, 2011-10-03

Добавить запись можно двумя способами.


Способ 1

Выполнение одним запросом


INSERT INTO `my_records` (`number`, `name`, `date`)

VALUES

(1, 'Первая запись', '2011-10-01'),

(2, 'Вторая запись', '2011-10-02'),

(3, 'Третья запись', '2011-10-03');


Способ 2

На каждую запись по одному запросу


INSERT INTO `my_records` (`number`, `name`, `date`) VALUES (1, 'Первая запись', '2011-10-01');

INSERT INTO `my_records` (`number`, `name`, `date`) VALUES (2, 'Вторая запись', '2011-10-02');

INSERT INTO `my_records` (`number`, `name`, `date`) VALUES (3, 'Третья запись', '2011-10-03');



Синтаксис команды INSERT

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name [(col_name,...)]

VALUES (expression,...),(...),...

либо

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name

SET col_name=expression, col_name=expression, ...

либо

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

[INTO] tbl_name [(col_name,...)]

SELECT ...

Общие положения работы команды INSERT:

tbl_name

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

LOW_PRIORITY

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

DELAYED

- Если указан этот параметр, то после выполнения команды INSERT сценарий сразу же получит ответ от БД о успешной вставке новой записи, а запись будет вставлено только после завершения использования данной таблицы другим сценарием. Это может быть удобно, если требуется высокая скорость работы скрипта. Данный параметр работает только с таблицами типа ISAM и MyISAM. Следуем отметить, что если таблица, в которую происходит вставка записи, в данный момент не используется другими запросами, то команда INSERT DELAYED будет работать медленнее, нежели INSER. Так что рекомендуется использовать параметр DELAYED только при большой нагрузке на таблицу.

IGNORE

- Если некоторые поля таблицы имеют ключи PRIMARY или UNIQUE, и производится вставка новой строки, в которой эти поля имеют дублирующее значение, то действие команды аварийно завершается и выдается ошибка №1062 ("Duplicate entry 'val' for key N"). Если в команде INSERT указано ключевое слово IGNORE, то вставка записей не прерывается, а строки с дублирующими значениями просто не вставляются.

Если MySQL был сконфигурирован с использованием опции DONT_USE_DEFAULT_FIELDS, то команда INSERT будет генерировать ошибку, если явно не указать величины для всех столбцов, которые требуют значений не-NULL.

Для того, чтобы узнать значение, присвоенное полю с ключом AUTO_INCREMENT, можно воспользоваться функцией mysql_insert_id().

Для добавления новых записей в существующую таблицу при помощи команды INSERT существует три основных синтаксиса:

INSERT ... VALUES

- В этом случае в команде четко указывается порядок следования устанавливаемых полей и их значений.

Следующая команда вставит в таблицу users новую запись, присвоив полям name, age, country, city значения Evgen, 26, Russia, Ryazan соответственно:


1

INSERT INTO


2

    `users` (`name`, `age`, `country`, `city`)


3

VALUES


4

    ('Evgen', 26, 'Russia', 'Ryazan')

Если для поля или группы полей, присутствующих в таблице, не установить значение, то используется значение, установленное по умолчанию при создании таблицы:


1

INSERT INTO


2

    `users` (`name`, `age`, `city`)


3

VALUES


4

    ('Evgen', 26, 'Ryazan')

После выполнения этой команды поле country получит значение по умолчанию.

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

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


1

DESCRIBE `users`

Результатом этой команды будет таблица примерно следующего содержания:

+---------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+-------------+------+-----+---------+-------+

| name | varchar(50) | YES | | NULL | |

| age | int(3) | YES | | NULL | |

| country | varchar(64) | NO | | | |

| city | varchar(64) | NO | | | |

+---------+-------------+------+-----+---------+-------+

4 rows in set (0.01 sec)

Здесь обработав полученные данные в поле Field можно получить все поля таблицы.

INSERT ... SET

- В этом случае в команде каждому полю, присутствующему в таблице, присваивается значение в виде имя поля='значение'.

Следующий пример по результату идентичен первому примеру для INSERT ... VALUE:


1

INSERT INTO


2

    `users`


3

SET


4

   `name` = 'Evgen',


5

   `age` = 26,


6

   `country` = 'Russia',


7

   `city` = 'Ryazan'

Так же, как и с INSERT ... VALUES, если одному или нескольким полям не задать значение, то установится значение по умолчанию.

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


1

INSERT INTO


2

    `tbl_name`


3

SET


4

   `field1` = 4,


5

   `field2` = `field1`*`field1`

или


1

INSERT INTO


2

    `tbl_name` (`field1`, `field2`)


3

VALUES


4

    (4, `field1`*`field1`)

INSERT ... SELECT

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

Следующий пример запишет в таблицу users_new все записи из таблицы users, в которых поле country равно "Russia".


1

INSERT INTO


2

    `users_new`


3

SELECT


4

    *


5

FROM


6

    `users`


7

WHERE


8

    `country` = 'Russia'

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

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

Особенности синтаксиса INSERT ... SELECT:

  • Имя таблицы, в которую вставляются записи, не должна присутствовать в списке таблиц FROM части SELECT, т.к. это может привести к ошибке вставки (ведь условие WHERE части SELECT может найти записи, которые уже вставлены этой командой ранее).
  • Другим сценариям запрещено производить вставку в таблицы, учавствующие в запросе, во время выполнения этого запроса.
  • Столбцы AUTO_INCREMENT работают, как обычно.
Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования