撰写时间: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;
|