Как добавить новую запись в таблицу sql
Для добавления новых записей в таблицу предназначен оператор INSERT . Рассмотрим его общую структуру.
MySQLINSERT INTO имя_таблицы [(поле_таблицы, ...)] VALUES (значение_поля_таблицы, ...) | SELECT поле_таблицы, ... FROM имя_таблицы ...
Значения можно вставлять перечислением с помощью слова VALUES , перечислив их в круглых скобках через запятую или c помощью оператора SELECT .
Таким образом, добавить новые записи можно следующими способами:
MySQLINSERT INTO Goods (good_id, good_name, type) VALUES (20, 'Table', 2);
MySQLINSERT INTO Goods (good_id, good_name, type) VALUES (20, 'Table', 2); -- и сразу же проверим результат SELECT * FROM Goods;
good_id good_name type 1 apartment fee 1 2 phone fee 1 3 bread 2 4 milk 2 5 red caviar 3 6 cinema 4 7 black caviar 3 8 cough tablets 5 9 potato 2 10 pineapples 3 11 television 8 12 vacuum cleaner 8 13 jacket 7 14 fur coat 7 15 music school fee 6 16 english school fee 6 20 Table 2 Следует помнить, что первичный ключ таблицы является уникальным значением и добавление уже существующего значения приведёт к ошибке.
При добавлении новой записи с уникальными индексами выбор такого уникального значения может оказаться непростой задачей. Решением может быть дополнительный запрос, направленный на выявление максимального значения первичного ключа для генерации нового уникального значения.
MySQLINSERT INTO Goods SELECT COUNT(*) + 1, 'Table', 2 FROM Goods;
В MySQL введён механизм его автоматической генерации. Для этого достаточно снабдить первичный ключ good_id атрибутом AUTO_INCREMENT . Тогда при создании новой записи в качестве значения good_id достаточно передать NULL или 0 — поле автоматически получит значение, равное максимальному значению столбца good_id , плюс единица.
MySQLCREATE TABLE Goods ( good_id INT NOT NULL AUTO_INCREMENT ... );
MySQLINSERT INTO Goods VALUES (NULL, 'Table', 2);
В PostgreSQL есть схожий механизм для автоматической генерации уникального идентификатора. Для этого он имеет типы SMALLSERIAL , SERIAL , BIGSERIAL , которые не являются настоящими типами, а скорее просто удобством записи столбцов с уникальным идентификатором. Столбец с одним из вышеперечисленных типов будет являться целочисленным и автоматически увеличиваться при добавление новой записи.
MySQLCREATE TABLE Goods ( good_id SERIAL ... );
MySQLINSERT INTO Goods (good_name, type) VALUES ('Table', 2);
Как добавить новую запись в таблицу sql
Команда MySQL INSERT производит вставку новых строк в таблицу.
Пример добавления записи
Есть таблица my_records с тремя полями
- number — число
- name — строка
- date — дата
Нужно добавить 3 записи:
- 1, Первая запись, 2011-10-01
- 2, Вторая запись, 2011-10-02
- 3, Третья запись, 2011-10-03
Добавить запись можно двумя способами.
Выполнение одним запросом
INSERT INTO `my_records` (`number`, `name`, `date`)
(1, 'Первая запись', '2011-10-01'),
(2, 'Вторая запись', '2011-10-02'),
(3, 'Третья запись', '2011-10-03');
На каждую запись по одному запросу
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. )]
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
SET col_name=expression, col_name=expression, .
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name. )]
Общие положения работы команды INSERT:
- Задает имя таблицы, в которую будет вставлена новая строка. На момент запуска команды INSERT таблица с таким именем должна существовать в базе данных.
- Если указан этот параметр, то вставка новой записи будет отложена до тех пор, пока другие сценарии не закончат чтение из этой таблицы. Надо отметить, что если таблица часто используется, то при указании этого параметра может пройти достаточно много времени, прежде чем данная команда будет выполнена.
- Если указан этот параметр, то после выполнения команды INSERT сценарий сразу же получит ответ от БД о успешной вставке новой записи, а запись будет вставлено только после завершения использования данной таблицы другим сценарием. Это может быть удобно, если требуется высокая скорость работы скрипта. Данный параметр работает только с таблицами типа ISAM и MyISAM . Следуем отметить, что если таблица, в которую происходит вставка записи, в данный момент не используется другими запросами, то команда INSERT DELAYED будет работать медленнее, нежели INSER . Так что рекомендуется использовать параметр DELAYED только при большой нагрузке на таблицу.
- Если некоторые поля таблицы имеют ключи PRIMARY или UNIQUE, и производится вставка новой строки, в которой эти поля имеют дублирующее значение, то действие команды аварийно завершается и выдается ошибка №1062 ( "Duplicate entry 'val' for key N" ). Если в команде INSERT указано ключевое слово IGNORE, то вставка записей не прерывается, а строки с дублирующими значениями просто не вставляются.
Если MySQL был сконфигурирован с использованием опции DONT_USE_DEFAULT_FIELDS, то команда INSERT будет генерировать ошибку, если явно не указать величины для всех столбцов, которые требуют значений не-NULL.
Для того, чтобы узнать значение, присвоенное полю с ключом AUTO_INCREMENT, можно воспользоваться функцией mysql_insert_id().
Для добавления новых записей в существующую таблицу при помощи команды INSERT существует три основных синтаксиса:
- В этом случае в команде четко указывается порядок следования устанавливаемых полей и их значений.
Следующая команда вставит в таблицу users новую запись, присвоив полям name , age , country , city значения Evgen , 26 , Russia , Ryazan соответственно:
`users` (`name`, `age`, `country`, `city`)
('Evgen', 26, 'Russia', 'Ryazan')
Если для поля или группы полей, присутствующих в таблице, не установить значение, то используется значение, установленное по умолчанию при создании таблицы:
`users` (`name`, `age`, `city`)
('Evgen', 26, 'Ryazan')
После выполнения этой команды поле country получит значение по умолчанию.
Если при выполнении команды INSERT не были указаны названия полей, то в VALUES() должны быть указаны значения для всех полей таблицы.
Если список полей таблицы заранее не известен, то его можно узнать при помощи команды:
Результатом этой команды будет таблица примерно следующего содержания:
| 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 . VALUE :
Так же, как и с INSERT . VALUES , если одному или нескольким полям не задать значение, то установится значение по умолчанию.
В качестве значений полям можно присваивать не только значения, но и выражения. В выражениях разрешено использовать значения полей таблицы, которые уже были установлены в этой команде:
`tbl_name` (`field1`, `field2`)
- Такой синтаксис позволяет внести в таблицу большое количество записей за один раз, причем из разных таблиц.
Следующий пример запишет в таблицу users_new все записи из таблицы users , в которых поле country равно " Russia ".
Если для таблицы, в которую происходит вставка записей, не указан список полей, то значения для всех полей будут определены на основании результата работы SELECT .
Если некоторые поля не определены, то для них будут принято значение по умолчанию.
Особенности синтаксиса INSERT . SELECT:
- Имя таблицы, в которую вставляются записи, не должна присутствовать в списке таблиц FROM части SELECT , т.к. это может привести к ошибке вставки (ведь условие WHERE части SELECT может найти записи, которые уже вставлены этой командой ранее).
- Другим сценариям запрещено производить вставку в таблицы, учавствующие в запросе, во время выполнения этого запроса.
- Столбцы AUTO_INCREMENT работают, как обычно.
- Триггеры в MySql
- Триггеры в MySQL, краткое введение
- Пример создания таблицы в MySQL
- Импорт и экспорт базы данных MySQL
- Как сделать дамп базы данных mysql? Экспорт/Импорт.
- Flyway: управление миграциями баз данных SQL (версионирование, изменение структуры)
- Удаление дубликатов в MySQL
- Автоматическое преобразование строки в число в MySQL
- MySQL: Как добавить запись в таблицу
- MySQL-тюнинг. Настраиваем по-взрослому. (Тонкая настройка)
- Оптимизация MySQL на Linux своими руками
- Как выбрать те записи, которых нет в другой таблице на языке SQL
- Задание пароля SQL-пользователя root для MariaDB (MySQL) в Debian 9
- Первичная настройка MariaDB (MySQL) после установки
- Как создать нового пользователя в MySql (MariaDB)
- Как увеличить время сессии в PhpMyAdmin
SQL запрос для создания таблицы базы данных — оператор CREATE TABLE
Продолжим изучение SQL запросов к базе данных. Сегодня, один из простых SQL запросов, SQL запрос для создания таблицы базы данных. Работает запрос на основе оператора CREATE TABLE.
Создание таблицы базы данных
Есть оператор sql, который используется для создания таблиц баз данных. Оператор: CREATE TABLE.
Вспоминаем, что реляционная таблица базы данных должна иметь уникальные:
- Уникальное имя;
- Столбцы (атрибуты);
- Первичный ключ.
- Строки (записи);
Для начала, мы создаем, только таблицу и не заполняем её данными.
Статьи по теме: SQL ALTER TABLE — sql запрос на модификацию таблицы базы данных
По-хорошему, общий вид таблицы с уникальными именами строк и столбцов задается при создании концептуальной модели БД. Мы для примера создадим простенькую таблицу БД и обойдемся без концептуальной модели.
В этой статье создадим таблицу БД с покупателями. Покупатели взяты для примера.
Чем идентифицируется покупатель? Решаем, что каждый покупатель идентифицируется следующими данными:
Помним, что в таблице обязательно нужно задать первичный ключ.
Чтобы создать таблицу базы данных, используем оператор sql CREATE TABLE.
Синтаксис оператора такой:
CREATE TABLE имя таблицы (столбец 1, тип столбца (пробел) параметр столбца (пробел), столбец 2, тип столбца (пробел) параметр столбца (пробел), столбец 3, тип столбца (пробел) параметр столбца (пробел), и т.д.)
В нашем варианте, имя таблицы: clients. Даем данным покупателей обозначения столбцов:
- Имя: пусть будет client_customer;
- Фамилия: client_subclient;
- Логин: client_login;
- Пароль: client_password;
- eMail: client_mail;
- Телефон: client_telefon.
Думаем, какой тип данных будет храниться в этих столбцах, и выбираем типы данных CHAR(длина поля постоянно) или VARCHAR(длинна поля переменное). В нашем случае подходит тип данных VARCHAR.
Особое внимание уделяем первичному ключу. Делаем первичным ключом id покупателя. В параметрах ключа задаем, что это первичный ключ, он не может быть нулём и что для следующей записи увеличивается на единицу. Последнее свойство называется автоинкремент. Смотрим подсказку в справочнике (ссылка выше) и получаем столбец с первичным ключом:
client_id integer not null auto_increment primary keyПишем SQL запрос для создания таблицы базы данных
Суммируем все исходные данные и получаем такой SQL запрос:
/*Таблица пользователей clients*/ create table clients ( /*client_id будет первичный ключ (обязательно целое число) с автоинкрементом (+1), который никогда не будет равен нулю*/ client_id integer not null auto_increment primary key, client_customer varchar(13), /*имя */ client_surclient varchar(22), /*фамилия */ client_login varchar(21), /*логин*/ client_passwd varchar(7), /*пароль*/ client_email varchar(44) /*email*/ client_telefon varchar(26) /*телефон*/ );Примечание: SQL запрос для создания таблицы создаем в текстовом редакторе типа Notepad++. В скобках ограничиваем длину поля, может быть от 1 до 255.
Создание новой записи идентичной предыдущей
Есть запись у которого в Table_1, которая имеет вложение из Table_2 и Table_3, как создать например новую запись идентичной записи Table_1 с со всеми его вложениями?(Банально скопировать запись с Table_1 со всеми вложениями из Table_2 и Table_3, и вставить т.е создать).
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:Создание новой записи
Здравствуйте! Такой вопрос-есть таблица Checkinout ,в которую необходимо добавить новую строку.Присвоение значения новой записи по значению предыдущей (при условии)
Добрый день. Есть форма для заполнения справочника (внесение по одной записи за раз). При.Создание новой учетной записи
Доброго времени суток, товарищи! Ситуация следующая: установил Oracle Database Express Edition.Создание новой записи в таблицу
если создавать новую форму на основе таблицы, то при открытии формы будет показана вся инфа этой.5314 / 4251 / 1049
Регистрация: 29.08.2013
Сообщений: 26,764
Записей в блоге: 3Сообщение было отмечено Salim_Destroyer как решение
Решение
Сообщение от Salim_Destroyer
как создать например новую запись идентичной записи Table_1 с со всеми его вложениями?
сделать 3 запроса INSERT
INSERT table1 SELECT * FROM table1 WHERE id=1INSERT table2 SELECT t2.* FROM table1 t1 JOIN table2 t2 ON t2.t1_id=t1.id WHERE t1.id=1INSERT table3 SELECT t3.* FROM table1 t1 JOIN table2 t2 ON t2.t1_id=t1.id JOIN table3 t3 ON t3.t2_id=t2.id WHERE t1.id=1Регистрация: 20.05.2016
Сообщений: 84
qwertehok, Спасибо, но я уже разобрался, а как удалить тему не знаю
5314 / 4251 / 1049
Регистрация: 29.08.2013
Сообщений: 26,764
Записей в блоге: 3Сообщение от Salim_Destroyer
а как удалить тему не знаю
темы не удаляются
1) ради потомков
2) ради объема
Регистрация: 20.05.2016
Сообщений: 84qwertehok, мне интересно есть ли методы копирования, ветки hierarchyid типа например есть такая ветка:
/
/1/
/1/1/
/1/1/1/
/1/1/2/
/1/2/
/1/2/1/
/1/2/2/
/2/
/2/1/
/2/1/1/
/2/1/2/я хочу скопировать ветку /2/1/ и вставить под /1/1/ и в итоге должно получиться:
/
/1/
/1/1/
/1/1/1/
/1/1/2/
/*скопированная ветка */
/1/1/3/
/1/1/3/1/
/1/1/3/2/
/*скопированная ветка */
/1/2/
/1/2/1/
/1/2/2/
/2/
/2/1/
/2/1/1/
/2/1/2/5314 / 4251 / 1049
Регистрация: 29.08.2013
Сообщений: 26,764
Записей в блоге: 3
это сообщение в теме по БД
не знаю какие вы там ветки собрались копировать, озвучьте в терминах БД
Регистрация: 20.05.2016
Сообщений: 84
qwertehok, тип данных "hierarchyid" вам знакомо?
5314 / 4251 / 1049
Регистрация: 29.08.2013
Сообщений: 26,764
Записей в блоге: 3
нет, не работал
Регистрация: 20.05.2016
Сообщений: 84
qwertehok, хорошо, спасибо.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесьСоздание новой записи в подчиненной форме
Приветствую Вас программисты. Помогите реализовать такое дело: Имеется форма "Прием сотрудников".Создание новой записи в незакреплённой таблице из табличной формы
Доброго времени суток, уважаемые форумчане. Снова возникли затруднения с решением поставленных.Выборка из нескольких таблиц и создание новой записи через Delphi
Здравствуйте! Имеется БД в MS Access, делаю для нее программу в Deplhi. Через DBGrid и ADOQuery.Создание папки при создании новой записи в форме Access
Здравствуйте, уважаемые форумчане! Прошу помощи, т.к. сам не владею достаточным объемом знаний в.Создание новой записи формой + программное заполнение одного из полей формы
Всем привет! И с прошедшим праздником! Вопрос довольно банален. Есть форма "Информация о.Создание новой записи в таблицу
Всем здравствуйте! На листе "Форма" вписываются данные, при нажатии кнопки "Создать акт".