Set identity_insert (transact-sql)set identity_insert (transact-sql)
Содержание:
- Demo Database
- MySQL INSERT INTO SELECT Examples
- Example — Using INSERT Statement to Insert One Record
- Introduction to the MySQL INSERT statement
- Insert Multiple Rows in One Statement
- Get Inserted ID
- INSERT INTO TABLE example
- INSERT Statement Without Columns
- Insert Multiple Records
- INSERT INTO SELECT
- Часто задаваемые вопросы
- Copy rows from other tables
- SQL INSERT
- SQL References
- Добавление данных. Команда Insert
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the «Customers» table:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
And a selection from the «Suppliers» table:
SupplierID | SupplierName | ContactName | Address | City | Postal Code | Country |
---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
3 | Grandma Kelly’s Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
MySQL INSERT INTO SELECT Examples
The following SQL statement copies «Suppliers» into «Customers» (the columns
that are not filled with data, will contain NULL):
Example
INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
The following SQL statement copies «Suppliers» into «Customers» (fill all
columns):
Example
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode,
Country)SELECT SupplierName, ContactName, Address, City, PostalCode,
Country FROM Suppliers;
The following SQL statement copies only the German suppliers into «Customers»:
Example
INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM SuppliersWHERE Country=’Germany’;
❮ Previous
Next ❯
Example — Using INSERT Statement to Insert One Record
The simplest way use the INSERT statement is to insert one record into a table using the VALUES keyword. Let’s look at an example of how to do this in SQL.
In this example, we have a table called categories with the following data:
category_id | category_name |
---|---|
25 | Deli |
50 | Produce |
75 | Bakery |
100 | General Merchandise |
125 | Technology |
Let’s insert a new category record. Enter the following SQL statement:
Try It
INSERT INTO categories (category_id, category_name) VALUES (150, 'Miscellaneous');
There will be 1 record inserted. Select the data from the categories table again:
SELECT * FROM categories;
These are the results that you should see:
category_id | category_name |
---|---|
25 | Deli |
50 | Produce |
75 | Bakery |
100 | General Merchandise |
125 | Technology |
150 | Miscellaneous |
This example would insert one record into the categories table. This new record would have a category_id of 150 and a category_name of ‘Miscellaneous’.
In this example, because you are providing values for all of the columns in the categories table, you could omit the column names and instead write the INSERT statement like this:
Try It
INSERT INTO categories VALUES (150, 'Miscellaneous');
Introduction to the MySQL INSERT statement
The statement allows you to insert one or more rows into a table. The following illustrates the syntax of the statement:
In this syntax,
- First, specify the table name and a list of comma-separated columns inside parentheses after the clause.
- Then, put a comma-separated list of values of the corresponding columns inside the parentheses following the keyword.
The number of columns and values must be the same. In addition, the positions of columns must be corresponding with the positions of their values.
To insert multiple rows into a table using a single statement, you use the following syntax:
In this syntax, rows are separated by commas in the clause.
Insert Multiple Rows in One Statement
Our examples so far have shown the ability to insert a single value with a statement. What if you wanted to insert multiple values?
You could write separate statements:
This can get a bit “wordy” and repetitive. Also, if you’re inserting hundreds or thousands of rows, it can take a bit of time as each statement is processed individually.
Fortunately, there is a better way.
You can insert multiple records with a single SQL INSERT statement.
The way to do this is different with each database vendor. Let’s take a look.
Oracle: Insert Multiple Records
What if you had a few records you wanted to insert?
You could run several different INSERT statements. But, there’s another way to do it.
You can insert several records at once, with a single statement, using the INSERT ALL keyword.
Why would you want to do this? Generally, running a single statement is better for performance than many statements. It can also be easier to write, especially if there are many records to insert.
So, how do you do this?
Let’s see an example.
This will insert three records in a single statement. You can, of course, have many more than three records.
You need to have the SELECT * FROM dual at the end, because the INSERT ALL expects a SELECT statement., and using the DUAL dummy table will allow you to insert many values manually in one statement.
SQL Server Insert Multiple Rows
Inserting multiple records in a single statement is easier in SQL Server as it requires fewer words. It’s the same as MySQL and PostgreSQL.
You can separate each row with a comma outside the brackets.
For example:
There are a few things to notice here.
The column names are only specified once, after the table name, which is the same as if you were inserting a single record.
Several rows are mentioned after the VALUES keyword, and they are separated by a comma.
Running this statement will cause all three rows to be inserted into the table at once.
Also, you can only INSERT up to 1,000 rows in a single statement. Any more than that and you can either run a second statement or change your approach to loading data.
MySQL Insert Multiple Rows
The way to insert multiple rows is the same as SQL Server and PostgreSQL, where you specify the column names once and separate each row in the VALUES clause with a comma.
For example:
There are a few things to notice here.
The column names are only specified once, after the table name, which is the same as if you were inserting a single record.
Several rows are mentioned after the VALUES keyword, and they are separated by a comma.
Running this statement will cause all three rows to be inserted into the table at once.
What’s the maximum number of rows you can insert in one statement in MySQL? There is no defined limit like SQL Server. However, if the size of the statement is bigger than the property of “max_allowed_packet”, then you’ll get an error.
PostgreSQL Insert Multiple Rows
The way to insert multiple rows is the same as SQL Server and MySQL, where you specify the column names once and separate each row in the VALUES clause with a comma.
For example:
There are a few things to notice here.
The column names are only specified once, after the table name, which is the same as if you were inserting a single record.
Several rows are mentioned after the VALUES keyword, and they are separated by a comma.
Running this statement will cause all three rows to be inserted into the table at once.
Get Inserted ID
For tables with an auto increment id field, you can get the id of the row you
just inserted by asking the result object.
Note: To be able to get the inserted id, only one row can be inserted.
Example
Insert a record in the «customers» table, and return the ID:
var mysql = require(‘mysql’);var con = mysql.createConnection({
host: «localhost», user: «yourusername», password: «yourpassword»,
database: «mydb»
});con.connect(function(err) { if (err) throw err; var sql = «INSERT INTO customers (name, address)
VALUES (‘Michelle’, ‘Blue Village 1’)»;
con.query(sql, function (err, result) { if (err) throw err; console.log(«1 record inserted,
ID: » + result.insertId); });});
Save the code above in a file called «demo_db_insert_id.js», and run the file:
Run «demo_db_insert_id.js»
C:\Users\Your Name>node demo_db_insert_id.js
Which will give you something like this in return:
1 record inserted, ID: 15
❮ Previous
Next ❯
INSERT INTO TABLE example
Before doing anything, let’s check what is stored in our tables. This is the model we have created in the previous article. You can see that we have one table where we’ll store data related to countries and another one for data related to cities. They are also related to each other, but we’ll talk about that in the following article:
In order to check the contents of these two tables, we’ll use two simple SELECT statements:
1 |
SELECT*FROMcountry; SELECT*FROMcity; |
While SELECT is not the topic of this article, it should be mentioned that its’ basic syntax is:
SELECT 1 or more attributes FROM table;
The star (*) after SELECT represents that we want to show the values of all attributes/columns from that table in the query result.
As expected, there is nothing in these two tables, and SQL Server returns the result, as shown in the picture below. Statements return names of the columns from the tables we used in the SELECT query, but there is nothing under these column names. You can look at this as an empty Excel sheet with defined column names (headers). You know what type of data should be there, but there is nothing:
Now, we’ll need to change that.
First, we’ll populate the country table using the following INSERT INTO TABLE statements:
1 |
INSERTINTOcountry (country_name,country_name_eng,country_code)VALUES(‘Deutschland’,’Germany’,’DEU’); INSERTINTOcountry (country_name,country_name_eng,country_code)VALUES(‘Srbija’,’Serbia’,’SRB’); INSERTINTOcountry (country_name,country_name_eng,country_code)VALUES(‘Hrvatska’,’Croatia’,’HRV’); INSERTINTOcountry (country_name,country_name_eng,country_code)VALUES(‘United Stated of America’,’United Stated of America’,’USA’); INSERTINTOcountry (country_name,country_name_eng,country_code)VALUES(‘Polska’,’Poland’,’POL’); |
Data for five countries were successfully inserted. The result is shown in the picture below. Since we had 5 INSERT INTO TABLE statements we have 1 “(1 row affected)” message for each of these five commands in the “Messages” section:
Please note that all values (after VALUES) were ordered in the same manner in which we listed columns (after INSERT INTO country). All three values are texts. The query would work even if we haven’t ordered them in the right manner because all of them have the same data type (text), but the data would be stored in the wrong columns. In that case, we would have a semantic error.
The next thing we need to do is to populate the city table. We’ll do that using the following statements:
1 |
INSERTINTOcity (city_name,lat,long,country_id)VALUES(‘Berlin’,52.520008,13.404954,1); INSERTINTOcity (city_name,lat,long,country_id)VALUES(‘Belgrade’,44.787197,20.457273,2); INSERTINTOcity (city_name,lat,long,country_id)VALUES(‘Zagreb’,45.815399,15.966568,3); INSERTINTOcity (city_name,lat,long,country_id)VALUES(‘New York’,40.73061,-73.935242,4); INSERTINTOcity (city_name,lat,long,country_id)VALUES(‘Los Angeles’,34.052235,-118.243683,4); INSERTINTOcity (city_name,lat,long,country_id)VALUES(‘Warsaw’,52.237049,21.017532,5); |
After executing these statements, this was the result. As expected, 6 rows were added. And once more we have 1 message for each insert in the Messages section:
In this case, we would have a problem if we haven’t listed values in the same manner, we listed columns because their data types are not the same (they are – in order: text, decimal number, decimal number, integer). This type of error is called syntax error and the DBMS itself would prevent the query from running at all.
INSERT Statement Without Columns
What happens if you have an SQL INSERT INTO statement without specifying the columns?
Earlier I mentioned that they were optional, so what happens?
1 row inserted.
STUDENT_ID | FIRST_NAME | LAST_NAME | FEES_REQUIRED | FEES_PAID | ENROLMENT_DATE | GENDER |
1 | John | Smith | 500 | 100 | 01/Feb/15 | M |
2 | Susan | Johnson | 150 | 150 | 12/Jan/15 | F |
3 | Tom | Capper | 350 | 320 | 06/Mar/15 | M |
4 | Mark | Holloway | 500 | 410 | 20/Jan/15 | M |
5 | Steven | Webber | 100 | 80 | 09/Mar/15 | M |
6 | Julie | Armstrong | 100 | 12/Feb/15 | F | |
7 | Michelle | Randall | 250 | 23/Jan/15 | F | |
8 | Andrew | Cooper | 800 | 400 | 04/Mar/15 | M |
9 | Robert | Pickering | 110 | 100 | 30/Jan/15 | M |
10 | Tanya | Hall | 150 | 150 | 28/Jan/15 | F |
11 | Jarrad | Winston | 700 | 300 | (null) | (null) |
12 | Mary | Taylor | 500 | 100 | (null) | F |
We can see that the record was inserted. However, we could have some problems with this:
- What if we alter the table and add or remove columns? The INSERT statement may not work anymore.
- What if we put the values in the wrong order in the INSERT statement? It will also fail.
So, while it could work, it’s generally not a good idea.
Insert Multiple Records
To insert more than one record, make an array containing the values, and
insert a question mark in the sql, which will be replaced by the value array:
Example
Fill the «customers» table with data:
var mysql = require(‘mysql’);var con = mysql.createConnection({
host: «localhost», user: «yourusername»,
password: «yourpassword», database: «mydb»});
con.connect(function(err) { if (err) throw err;
console.log(«Connected!»); var sql = «INSERT INTO customers (name,
address) VALUES ?»; var values = , ,
, ,
, ,
, ,
, ,
, ,
,
]; con.query(sql, , function (err, result)
{ if (err) throw err; console.log(«Number
of records inserted: » + result.affectedRows); });});
Save the code above in a file called «demo_db_insert_multple.js», and run the file:
Run «demo_db_insert_multiple.js»
C:\Users\Your Name>node demo_db_insert_multiple.js
Which will give you this result:
Connected!Number of records inserted: 14
INSERT INTO SELECT
The command copies data
from one table and inserts it into another table.
The following SQL copies «Suppliers» into «Customers» (the columns
that are not filled with data, will contain NULL):
Example
INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM Suppliers;
The following SQL copies «Suppliers» into «Customers» (fill all
columns):
Example
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode,
Country)SELECT SupplierName, ContactName, Address, City, PostalCode,
Country FROM Suppliers;
The following SQL copies only the German suppliers into «Customers»:
Example
INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM SuppliersWHERE Country=’Germany’;
Часто задаваемые вопросы
Вопрос: Я создал базу данных клиентов. Я знаю, что вы используете Oracle оператор INSERT для вставки информации в базу данных, но как я могу убедиться, что не ввел ту же информацию о клиенте снова?
Ответ: Вы можете убедиться, что не вставить повторяющуюся информацию, используя условие EXISTS.
Например, если у вас была таблица с названием clients с первичным ключом client_id, вы можете использовать следующий INSERT:
Oracle PL/SQL
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, ‘advertising’
FROM suppliers
WHERE NOT EXISTS (SELECT *
FROM clients
WHERE clients.client_id = suppliers.supplier_id);
1 |
INSERTINTOclients SELECTsupplier_id,supplier_name,’advertising’ FROMsuppliers WHERENOTEXISTS(SELECT* FROMclients WHEREclients.client_id=suppliers.supplier_id); |
Это Oracle предложение INSERT вставляет несколько записей с подзапросом.
Если вы хотите вставить одну запись, вы можете использовать следующее Oracle предложение INSERT:
Oracle PL/SQL
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345,
‘IBM’,
‘advertising’
FROM dual
WHERE NOT EXISTS (SELECT *
FROM clients
WHERE clients.client_id = 10345);
1 |
INSERTINTOclients SELECT10345, ‘IBM’, ‘advertising’ FROMdual WHERENOTEXISTS(SELECT* FROMclients WHEREclients.client_id=10345); |
Использование таблицы dual позволяет ввести значения в операторе select, даже если значения не хранятся в настоящее время в таблице.
Вопрос: Как я могу вставить несколько строк явных данных в одном предложении INSERT в Oracle?
Ответ: Ниже приведен пример того, как можно вставить 3 строки в таблицу suppliers в Oracle, используя оператор INSERT:
Oracle PL/SQL
INSERT ALL
INTO suppliers (supplier_id, supplier_name) VALUES (1000, ‘IBM’)
INTO suppliers (supplier_id, supplier_name) VALUES (2000, ‘Microsoft’)
INTO suppliers (supplier_id, supplier_name) VALUES (3000, ‘Google’)
SELECT * FROM dual;
1 |
INSERTALL INTOsuppliers(supplier_id,supplier_name)VALUES(1000,’IBM’) INTOsuppliers(supplier_id,supplier_name)VALUES(2000,’Microsoft’) INTOsuppliers(supplier_id,supplier_name)VALUES(3000,’Google’) SELECT*FROMdual; |
Copy rows from other tables
You can use the statement to query data from one or more tables and insert it into another table as follows:
In this syntax, you use a SELECT which is called a subselect instead of the clause . The subselect can contain the joins so that you can combine data from multiple tables. When executing the statement, the database system evaluates the subselect first before inserting data.
Suppose, you have a table named that has the same structure as the table. The following statement copies all rows from the table to the table.
You can verify the insert operation by using the following statement.
Now you should know how to use the SQL INSERT statement to insert one or more rows into a table.
SQL INSERT
Команда INSERT добавляет строки в таблицу или представление основной таблицы.
Синтаксис команды Sql INSERT
Синтаксис команды Insert
Основные ключевые слова и параметры команды INSERT
- schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
- table view — имя таблицы, в которую строки должны быть вставлены; если указано представление, то строки вставляются в основную таблицу представления
- subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
- column — столбец таблицы или представления, в который для каждой вставленной строки вводится значение из фразы VALUES или подзапроса; если один из столбцов таблицы опускается из этого списка, значением столбца для вставленной строки является значение по умолчанию столбца, определенное при создании таблицы. Если полностью опускается список столбца, предложение VALUES или запрос должен определить значения для всех столбцов в таблице
- VALUES — определяет строку значений, которые будут вставлены в таблицу или представление; значение должно быть определено в предложении VALUES для каждого столбца в списке столбцов
- subquery_2 — подзапрос, который возвращает строки, вставляемые в таблицу; выборочный список этого подзапроса должен иметь такое же количество столбцов, как в списке столбцов утверждения INSERT
Утверждение INSERT с фразой VALUES добавляет одиночную строку к таблице. Эта строка содержит значения, определенные фразой VALUES.
Утверждение INSERT с подзапросом вместо фразы VALUES добавляет к таблице все строки, возвращенные подзапросом. Сервер обрабатывает подзапрос и вставляет каждую возвращенную строку в таблицу. Если подзапрос не выбирает никакие строки, сервер не вставляет никакие строки в таблицу.Подзапрос может обратиться к любой таблице или представлению, включая целевую таблицу утверждения INSERT. Сервер назначает значения полям в новых строках, основанных на внутренней позиции столбцов в таблице и порядке значений фразы VALUES или в списке выбора запроса. Если какие-либо столбцы пропущены в списке столбцов, сервер назначает им значения по умолчанию, определенные при создании таблицы. Если любой из этих столбцов имеет NOT NULL ограничение то сервер возвращает ошибку, указывающую, что ограничение было нарушено и отменяет утверждение INSERT.
При выдаче утверждения INSERT включается любой INSERT — триггер, определенный на таблице.
INSERT INTO
INSERT INTO Пример 1
INSERT INTO Пример 2
Нижеприведенная команда копирует данные сотрудников фирмы, комисионные которых превышают 25% от дохода в таблицу bonus:
INSERT INTO Пример 3
Если нужно вставить NULL-значение, необходимо указать его как обычное значение следующим образом:
INSERT INTO Пример 4
Команду INSERT можно применить для того, чтобы извлечь значения из одной таблицы и разместить их в другой, воспользовавшись для этого запросом. Для этого достаточно заменить предложение VALUES на соответствующий запрос:
SQL References
SQL Keywords
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE
MySQL Functions
String Functions
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Date Functions
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Advanced Functions
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION
SQL Server Functions
String Functions
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Numeric Functions
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Date Functions
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Advanced Functions
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME
MS Access Functions
String Functions
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Numeric Functions
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Date Functions
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Other Functions
CurrentUser
Environ
IsDate
IsNull
IsNumeric
SQL Quick Ref
Добавление данных. Команда Insert
Последнее обновление: 13.07.2017
Для добавления данных применяется команда INSERT, которая имеет следующий формальный синтаксис:
INSERT имя_таблицы VALUES (значение1, значение2, ... значениеN)
Вначале идет выражение INSERT INTO, затем в скобках можно указать список столбцов через запятую, в которые надо добавлять данные, и
в конце после слова VALUES скобках перечисляют добавляемые для столбцов значения.
Например, пусть ранее была создана следующая база данных:
CREATE DATABASE productsdb; GO USE productsdb; CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(30) NOT NULL, Manufacturer NVARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price MONEY NOT NULL )
Добавим в нее одну строку с помощью команды INSERT:
INSERT Products VALUES ('iPhone 7', 'Apple', 5, 52000)
После удачного выполнения в SQL Server Management Studio в поле сообщений должно появиться сообщение «1 row(s) affected»:
Стоит учитывать, что значения для столбцов в скобках после ключевого слова VALUES передаются по порядку их объявления. Например, в выражении
CREATE TABLE выше можно увидеть, что первым столбцом идет Id. Но так как для него задан атрибут IDENTITY, то значение этого столбца автоматически генерируется, и его можно не указывать.
Второй столбец представляет ProductName, поэтому первое значение — строка «iPhone 7» будет передано именно этому столбцу.
Второе значение — строка «Apple» будет передана третьему столбцу Manufacturer и так далее. То есть значения передаются столбцам
следующим образом:
-
ProductName: ‘iPhone 7’
-
Manufacturer: ‘Apple’
-
ProductCount: 5
-
Price: 52000
Также при вводе значений можно указать непосредственные столбцы, в которые будут добавляться значения:
INSERT INTO Products (ProductName, Price, Manufacturer) VALUES ('iPhone 6S', 41000, 'Apple')
Здесь значение указывается только для трех столбцов. Причем теперь значения передаются в порядке следования столбцов:
-
ProductName: ‘iPhone 6S’
-
Manufacturer: ‘Apple’
-
Price: 41000
Для неуказанных столбцов (в данном случае ProductCount) будет добавляться значение по умолчанию, если задан атрибут DEFAULT, или
значение NULL. При этом неуказанные столбцы должны допускать значение NULL или иметь атрибут DEFAULT.
Также мы можем добавить сразу несколько строк:
INSERT INTO Products VALUES ('iPhone 6', 'Apple', 3, 36000), ('Galaxy S8', 'Samsung', 2, 46000), ('Galaxy S8 Plus', 'Samsung', 1, 56000)
В данном случае в таблицу будут добавлены три строки.
Также при добавлении мы можем указать, чтобы для столбца использовалось значение по умолчанию с помощью ключевого слова DEFAULT или значение NULL:
INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ('Mi6', 'Xiaomi', DEFAULT, 28000)
В данном случае для столбца ProductCount будет использовано значение по умолчанию (если оно установлено, если его нет — то NULL).
Если все столбцы имеют атрибут DEFAULT, определяющий значение по умолчанию, или допускают значение NULL, то можно для всех столбцов вставить
значения по умолчанию:
INSERT INTO Products DEFAULT VALUES
Но если брать таблицу Products, то подобная команда завершится с ошибкой, так как несколько полей не имеют атрибута DEFAULT и при этом не допускают значение NULL.
НазадВперед