本文章为 SQL Server 的详细学习大纲 里面的一个子章节的详细介绍,如果了解相关的其他内容,可以从这里面查看,或者查看SQL Server专栏,里面有些文章可能并不在 SQL Server 的详细学习大纲 里面,是一些补充内容。
一、INSERT语句插入单条记录
1. 基本语法
- 最基本的
INSERT
语句用于向表中插入单条记录,语法如下:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...);
- 其中
table_name
是要插入数据的表的名称。column1, column2, column3,...
是表中要插入数据的列名,列名的顺序可以根据需要指定。value1, value2, value3,...
是要插入到对应列中的值,值的顺序和类型必须与列名相对应。
2. 示例
- 假设有一个名为
Students
的表,包含StudentID
(整数类型)、StudentName
(字符类型)和Age
(整数类型)三列。要插入一条学生记录,可以这样写:
INSERT INTO Students (StudentID, StudentName, Age)
VALUES (1, 'John Doe', 20);
- 注意,如果表中的列有非空约束(
NOT NULL
),那么在INSERT
语句中必须为这些列提供值,否则会出现错误。
二、插入多条记录
1. 使用多个INSERT语句
- 一种简单的方法是多次使用
INSERT
语句来插入多条记录。例如,继续以Students
表为例,要插入两条记录:
INSERT INTO Students (StudentID, StudentName, Age)
VALUES (2, 'Jane Smith', 21);
INSERT INTO Students (StudentID, StudentName, Age)
VALUES (3, 'Bob Johnson', 19);
或者
INSERT INTO Students (StudentID, StudentName, Age)
VALUES
(2, 'Jane Smith', 21),
(3, 'Bob Johnson', 19);
- 这种方法适用于插入记录数量较少的情况,但如果要插入大量记录,会比较繁琐。
2. 使用INSERT…SELECT语句
- 语法:
INSERT INTO target_table (column1, column2, column3,...)
SELECT value1, value2, value3,...
FROM source_table;
- 示例:假设还有一个临时表
TempStudents
,它的结构和Students
表相同,现在要将TempStudents
表中的所有记录插入到Students
表中。
INSERT INTO Students (StudentID, StudentName, Age)
SELECT StudentID, StudentName, Age
FROM TempStudents;
- 注意事项:
SELECT
语句返回的列数和类型必须与INSERT
语句中指定的列数和类型相匹配。- 如果
SELECT
语句返回的结果集包含了INSERT
语句中未指定的列,这些列将被忽略。
三、处理默认值
1. 定义默认值
- 在创建表时,可以为列定义默认值。例如,创建一个
Products
表,其中ProductPrice
列有一个默认值:
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100),
ProductPrice DECIMAL(10, 2) DEFAULT 0.00
);
- 这里
ProductPrice
列的默认值被定义为0.00
。
2. 在INSERT语句中使用默认值
- 如果要插入一条记录,并且希望使用默认值来填充某些列,可以在
INSERT
语句中省略这些列。例如:
INSERT INTO Products (ProductID, ProductName)
VALUES (1, 'Widget');
- 在这个例子中,由于没有为
ProductPrice
列提供值,SQL Server会自动使用默认值0.00
来填充该列。
四、处理自增长列
1. 创建自增长列
- 在SQL Server中,可以使用
IDENTITY
属性来创建自增长列。例如,创建一个Orders
表,其中OrderID
是自增长列:
CREATE TABLE Orders (
OrderID INT IDENTITY(1,1) PRIMARY KEY,
CustomerID INT,
OrderDate DATETIME
);
- 这里
IDENTITY(1,1)
表示自增长列的起始值为1
,每次增长的值为1
。
2. 在INSERT语句中处理自增长列
- 当插入记录时,通常不需要为自增长列提供值。例如:
INSERT INTO Orders (CustomerID, OrderDate)
VALUES (1, '2024-01-01');
- SQL Server会自动为
OrderID
列生成一个唯一的值。如果试图为IDENTITY
列提供值,可能会出现错误,除非使用SET IDENTITY_INSERT
命令来显式地指定要插入的值,但这种情况通常很少使用,并且需要谨慎操作,因为可能会破坏自增长列的完整性。