MySQL INSERT оператор
ВСТАВИТЬ заявление
Оператор MySQL INSERT используется для вставки записи или строк в таблицу. Вставка записей или строк в таблицу может быть выполнена двумя способами: вставка одной строки за раз и вставка нескольких строк за раз.
Версия: MySQL 5.6
Синтаксис:
INSERT [LOW_PRIORITY | ЗАДЕРЖАНО | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (имя_раздела, ...)] [(Col_name, ...)] {ЦЕННОСТИ | VALUE} ({expr | DEFAULT}, ...), (...), ... [ON DUPLICATE KEY UPDATE имя_столбец = выражение [, col_name = expr] ...]
или же:
INSERT [LOW_PRIORITY | ЗАДЕРЖАНО | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (имя_раздела, ...)] SET col_name = {expr | ДЕФОЛТ}, ... [ON DUPLICATE KEY UPDATE имя_столбец = выражение [, col_name = expr] ...]
или же:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (имя_раздела, ...)] [(Col_name, ...)] ВЫБРАТЬ ... [ON DUPLICATE KEY UPDATE имя_столбец = выражение [, col_name = expr] ...]
Аргументы:
название | Описания |
---|---|
ВСТАВИТЬ | Вставляет новые строки в существующую таблицу. |
НИЗКИЙ ПРИОРИТЕТ | Используя ключевое слово LOW_PRIORITY, выполнение INSERT задерживается до тех пор, пока другие клиенты не будут читать из таблицы. Это включает в себя других клиентов, которые начали читать, в то время как существующие клиенты читают. Следовательно, для клиента, который выдает инструкцию INSERT LOW_PRIORITY, можно ожидать очень долго (или даже вечно) в среде с интенсивным чтением. |
ЗАДЕРЖИВАЕТСЯ | Используя ключевое слово DELAYED, сервер помещает строку или строки для вставки в буфер, и оператор INSERT DELAYED (выданный клиентом) может затем немедленно продолжить. Сервер хранит строки, если таблица используется. Когда таблица свободна, сервер начинает вставлять строки, периодически проверяя, есть ли новые запросы на чтение для таблицы. Если есть какие-либо новые запросы на чтение, отложенная очередь строк приостанавливается до тех пор, пока таблица снова не станет свободной. |
ВЫСОКИЙ ПРИОРИТЕТ | Используя HIGH_PRIORITY, он переопределяет эффект опции --low-priority-updates, если сервер был запущен с этой опцией. Это также приводит к тому, что одновременные вставки не используются. LOW_PRIORITY и HIGH_PRIORITY влияют только на механизмы хранения, которые используют только блокировку на уровне таблицы, такие как MyISAM, MEMORY и MERGE. |
ИГНОРИРУЙТЕ | При использовании ключевого слова IGNORE ошибки, возникающие при выполнении оператора INSERT, игнорируются. |
В | Вставляет новые строки в существующую таблицу. |
tbl_name | Имя таблицы, в которую будут вставлены строки. |
PARTITION | В MySQL 5.6.2 и более поздних версиях вы можете контролировать, какие разделы и подразделы принимают новые строки при вставке в многораздельную таблицу. Параметр PARTITION принимает разделенный запятыми список имен одного или нескольких разделов или подразделов (или обоих) таблицы. Если какая-либо из строк, которые готовы к вставке, с помощью данного оператора INSERT не соответствуют ни одному из перечисленных разделов, инструкция INSERT завершается ошибкой. Обнаружена строка, не соответствующая данному набору разделов . |
partition_name | Имя секционированной таблицы. |
col_name | Разделенный запятыми список имен столбцов.
|
ЦЕННОСТИ | ЗНАЧЕНИЕ |
|
ВСТАВИТЬ ... ВЫБРАТЬ
Чтобы быстро вставить много строк в таблицу из одной или нескольких таблиц, вы можете использовать оператор INSERT ... SELECT. Вот синтаксис:
Синтаксис:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [PARTITION (имя_раздела, ...)] [(Col_name, ...)] ВЫБРАТЬ ... [ON DUPLICATE KEY UPDATE col_name = expr, ...]
Для операторов INSERT ... SELECT выполняются следующие условия:
- Используя ключевое слово IGNORE, игнорируйте строки, которые могут привести к нарушениям дубликата ключа.
- Ключевое слово DELAYED игнорируется командой INSERT ... SELECT.
- Таблица назначения оператора INSERT может появиться в предложении FROM части запроса SELECT.
- Столбцы AUTO_INCREMENT работают как обычно.
- Чтобы избежать неоднозначных проблем со ссылками на столбцы, когда SELECT и INSERT ссылаются на одну таблицу.
- В MySQL 5.6.2 и более поздних версиях вы можете контролировать, какие разделы и подразделы принимают новые строки при вставке в многораздельную таблицу.
Пример:
INSERT INTO tb2 (fld_id) ВЫБЕРИТЕ tbl.fld_order_id ОТ tbl ГДЕ tbl.fld_order_id> 200;
INSERT DELAYED
Параметр DELAYED для оператора INSERT является расширением MySQL для стандартного SQL, который можно использовать для определенных типов таблиц (таких как MyISAM). Когда клиент использует INSERT DELAYED, он сразу получает одобрение от сервера, и строка ставится в очередь для вставки, когда таблица не используется каким-либо другим потоком.
Синтаксис:
Вставить с задержкой ...
ВСТАВИТЬ ... НА ДУБЛИКОВАТЬ КЛЮЧЕВОЕ ОБНОВЛЕНИЕ
Если вы укажете ON DUPLICATE KEY UPDATE, и будет вставлена строка, которая приведет к дублированию значения в индексе UNIQUE или PRIMARY KEY, MySQL выполнит UPDATE старой строки. Например, если столбец x объявлен как UNIQUE и содержит значение 1, следующие два оператора имеют аналогичный эффект:
INSERT INTO table (x, y, z) ЗНАЧЕНИЯ (1,2,3) ОБНОВЛЕНИЕ КЛЮЧЕВЫХ КЛЮЧЕЙ z = z + 1; ОБНОВЛЕНИЕ таблицы SET z = z + 1 ГДЕ x = 1;
Примечание. Эффекты не идентичны для таблицы InnoDB, где a - это столбец с автоинкрементом. Для столбца с автоинкрементом оператор INSERT увеличивает значение автоинкремента, а для UPDATE - нет.
Примеры:
Оператор MySQL INSERT INTO используется для вставки записи или строк в таблицу.
Синтаксис:
INSERT INTO table_name ([column_name], [... column_name], ...) ЗНАЧЕНИЯ ([column_value], [.. column_value]);
Пример с PHP-кодом для вставки данных в таблицу MySQL
HTML-код (скажем, form.html) :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>form to insert data</title>
</head>
<body>
<form method="post" action="insert.php">
<input type="text" name="name" />
<input type="text" name="email" />
<input type="text" name="address" />
<input type="submit" value="Submit">
</form>
</body>
</html>
PHP-код (скажем, insert.php):
<?php
$host="localhost"; //yout host name
$username="root"; //yout user name
$password=""; // your password
$db_name="test"; // your database name
$con=MySQL_connect("$host", "$username", "$password")or die("cannot connect"); //MySQL connection
MySQL_select_db("$db_name")or die("can not select DB"); //select your database
$name = $_POST['name'];
$email = $_POST['email'];
$address = $_POST['address'];
$query ="INSERT INTO test (name,email,address) VALUES ('$name', '$email', '$address')";
MySQL_query($query) or die('Query "' . $query . '" failed: ' . MySQL_error());
// name, email and address are fields of your fields; test your table. $name, $email and $address are values collected from the form
?>
MySQL: вставьте одну строку в таблицу
Следующий оператор вставляет одну строку в таблицу, используя оператор MySQL INSERT INTO.
Код:
INSERT INTO newcate
VALUES ("CA006","Sports");
Вышеприведенный оператор вставит одну строку в таблицу 'newcate'. Мы не упомянули здесь ни одного названия столбца. Вот почему все столбцы будут затронуты.
mysql> select * from newcate; + --------- + -------------- + | cate_id | cate_descrip | + --------- + -------------- + | CA001 | Наука | | CA002 | Технологии | | CA003 | Компьютеры | | CA004 | Природа | | CA005 | Медицинский | | CA006 | Спорт | + --------- + -------------- + 6 рядов в наборе (0,00 сек)
MySQL: значения INSERT для определенных столбцов
Следующий оператор вставляет значения для определенных столбцов, используя оператор MySQL INSERT INTO.
Пример таблицы: новая покупка
Код:
INSERT INTO newpurchase (invoice_no,ord_no,book_name)
VALUES ("INV001","ORD006",”An advance book of Computer”);
Вышеприведенный оператор вставит одну (1) строку в таблицу «newpurchase» для столбцов «invoice_no», «ord_no» и «book_name».
MySQL: INSERT NULL значения
Следующий оператор вставляет значения NULL в один или несколько столбцов, используя оператор MySQL INSERT INTO.
Пример таблицы: новая покупка
Код:
INSERT INTO newpurchase (invoice_no,ord_no,book_name)
VALUES ("INV002","ORD007",NULL);
Приведенный выше оператор вставит одну (1) строку в таблицу «newpurchase». Столбцы 'invoice_no', 'ord_no' и 'book_name' заполняются значениями, а столбец 'book_name' заполняется значением NULL.
Вставка нескольких строк в одном запросе SQL
В MySQL вы можете вставить несколько строк в один запрос SQL. Вот синтаксис:
INSERT INTO Таблица (Столбец1, Столбец2) ЗНАЧЕНИЯ (Значение1, Значение2), (Значение1, Значение2);
MySQL INSERT строки с оператором SELECT
Следующий оператор вставляет значения в таблицу, используя оператор MySQL INSERT INTO, когда имена и значения столбцов собираются из другой идентичной таблицы, используя оператор MySQL SELECT. Таким образом, вы можете вставить значения одной таблицы в другую, если таблицы идентичны.
Пример таблицы: покупка
Код:
INSERT INTO testpurchase
SELECT *
FROM purchase;
MySQL INSERT строки с оператором SELECT и WHERE
Следующий оператор вставляет значения в таблицу, используя оператор MySQL INSERT INTO, когда имена и значения столбцов собираются из другой идентичной таблицы, используя MySQL SELECT и WHERE. Таким образом, вы можете вставлять значения, основанные на некоторых условиях одной таблицы, в другую, когда таблицы идентичны.
Пример таблицы: покупка
Код:
INSERT INTO testpurchase
SELECT *
FROM purchase
WHERE YEAR(invoice_dt)='2008';
Приведенный выше оператор выполняет следующие операции -
- вставить строки в таблицу «testpurchase» из идентичной таблицы «покупка»,
- год таблицы invoice_date таблицы покупки должен быть 2008.
Предыдущая: MySQL Partitioning
Далее: INSERT записи с GROUP BY и ORDER BY
Новый контент: Composer: менеджер зависимостей для PHP , R программирования