撰写时间:2022 年 4 月 27日
SQLServer创建表和添加列
SQL Server创建表:
表用于在数据库中存储数据;表在数据库和模式中唯一命名。每个表包含一个或多个列。每列都有一个相关的数据类型,用于定义它可以存储的数据类型,例如:数字,字符串和日期。要创建新表,请使用create table 语句,如下所示:
Create table [database_name.][schema_name.]table_name (
pk_column data_type primary key,
column_1 data_type not null,
column_2 data_type,
…,
Table_constraints
);
在上面的语法中,首先,指定创建表的数据库名称。database_name必须是现有数据库的名称。如果未指定,则database_name默认为当前数据库。其次,schema_name指定新表所属的模式。第三table_name指定新表的名称。第四,每个表应该有一个由一个列或多个列组成的主键。通常,首先列出主键列,然后列出其他列。如果主键只包含一列,则可以在列名后使用 primary key 关键字。 如果主键由两列或更多列组成,则需要将 primary key约束指定为表约束。 每个列都在语句中的名称后面指定了关联的数据类型。 列可能具有一个或多个列约束,例如: not null 和 unique 。第五,表可能在表约束部分中指定了一些约束,例如: foreign key, primary key , unique 和 check。
SQL Server CREATE TABLE示例
以下语句创建一个名为 visits 的新表来跟踪客户的店内访问:
CREATE TABLE sales.visits (
visit_id INT PRIMARY KEY IDENTITY (1, 1),
first_name VARCHAR (50) NOT NULL,
last_name VARCHAR (50) NOT NULL,
visited_at DATETIME, phone VARCHAR(20),
store_id INT NOT NULL,
FOREIGN KEY (store_id) REFERENCES sales.stores (store_id)
);
在这个示例中:
因为没有明确指定创建表的数据库名称,所以在 bb_stores 数据库中创建了 visits 表。但是已经明确指定模式,因此,在 sales 模式中创建了 visits 表。
visits 表中定义了 6 列,下面来看每一列的简介描述:
1、visit_id 列是表的主键列。 IDENTITY(1,1) 指示SQL Server自动生成从 1 开始的列的整数,并为每个新行递增 1 。2、 first_name 和 last_name 列是 VARCHAR 类型的字符串列。 这些列最多可以存储 50 个字符。3、visited_at 是 DATETIME 数据类型的列,记录客户访问商店的日期和时间。4、phone 列是一个接受 NULL 的 VARCHAR 字符串列。5、store_id 列存储标识客户访问商店的标识号。6、表定义的末尾是 FOREIGN KEY 约束。 此外键确保 visit 表的 store_id 列中的值必须在 stores表的 store_id 列中可用。可在后续教程中了解有关 FOREIGN KEY 约束的更多信息。
SQL Server标识列:
要为表创建标识列,请使用 IDENTITY 属性,如下所示:
IDENTITY[(seed,increment)]
在上面语法中,
seed 是表中的第一行的值(第一条记录标识列使用的值)。 increment 是添加到上一行标识值的增量值。seed 和 increment 的默认值是 1 ,即 (1,1) 。表示加载到表中的第一行的值为: 1 ,第二行的值为:2 (在上一行: 1 的基础上加 1 ),依此类推。
假设,希望第一行的标识列的值为 10 ,增量值为 2 ,可使用以下语法:
IDENTITY (10,2)
注:第一条记录标识列的值是:10,第二条记录标识列的值是:12,第三条记录标识列的值为:14,依此类推。
SQL Server允许每个表只有一个标识列。
创建一个名为 hr 的新模式用来练习:
CREATE SCHEMA hr;
以下语句在个人标识号( person_id )列上使用 IDENTITY 属性创建新表:
CREATE TABLE hr.person (
person_id INT IDENTITY(1,1) PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender CHAR(1) NOT NULL
);
重用标识值
SQL Server不能重用标识值。 如果在标识列中插入行并且执行 insert 语句失败或回滚,则标识值将丢失,并且不会再次生成。这会导致标识列中出现空白。
方法一:
使用Truncate
TRUNCATE TABLE name 可以删除表内所有值并重置标识值 ,但是表内的数据将丢失。
方法二:
你想要重置标识值(不删除数据)采用下面方法即可:
- DBCC CHECKIDENT (‘表名’, RESEED, new_value)(重置新的标识值,new_value为新值) 2. select IDENT_CURRENT(‘a’) 当前表标识列的最大值
- select @@IDENTITY 当前标识列的最大值
SQL Server向表添加列:
ALTER TABLE ADD 语句将一个或多个列添加到表中。
以下 ALTER TABLE ADD 语句将新列添加到表中:
ALTER TABLE table_name ADD column_name data_type column_constraint;
在上面语句中:
首先, table_name 指定要添加新列的表的名称。其次, column_name 指定列的名称, data_type 表示数据类型, column_constraint 表示约束(如果适用)。
如果要使用单个 ALTER TABLE 语句一次向表中添加多个列,请使用以下语法:
ALTER TABLE table_name
ADD
column_name_1 data_type_1 column_constraint_1,
column_name_2 data_type_2 column_constraint_2,
…,
column_name_n data_type_n column_constraint_n;
在此语法中,指定要在 ADD 子句之后添加到表中,以逗号分隔的列列表。
SQL Server ALTER TABLE ADD列示例
以下语句创建一个名为 sales.quotations 的新表:
CREATE TABLE sales.quotations (
quotation_no INT IDENTITY PRIMARY KEY,
valid_from DATE NOT NULL,
valid_to DATE NOT NULL
);
要将名为 description 的新列添加到 sales.quotations 表,请使用以下语句:
ALTER TABLE sales.quotations
ADD description VARCHAR (255) NOT NULL;
以下语句将两个名为 amount 和 customer_name 的新列添加到 sales.quotations 表中:
ALTER TABLE sales.quotations
ADD
amount DECIMAL (10, 2) NOT NULL,
customer_name VARCHAR (50) NOT NULL;