SQL Server掌握如何使用ALTER TABLE语句修改表结构,如添加列、删除列、修改列的数据类型和约束等。
本文章为 SQL Server 的详细学习大纲 里面的一个子章节的详细介绍,如果了解相关的其他内容,可以从这里面查看,或者查看SQL Server专栏,里面有些文章可能并不在 SQL Server 的详细学习大纲 里面,是一些补充内容。
1. 添加列
- 基本语法:ALTER TABLE [table_name] ADD [column_name] [data_type] [column_constraint];
- 示例:
- 假设已经有一个名为Employees的表,包含EmployeeID、EmployeeName和Department列。现在要添加一个新列HireDate,数据类型为date,可以使用以下语句:
-
ALTER TABLE Employees ADD HireDate date;
- 如果要添加带有约束条件的列,例如添加一个Email列,数据类型为varchar(100),并且要求该列的值唯一,可以使用以下语句:
-
ALTER TABLE Employees ADD Email varchar(100) UNIQUE;
2. 删除列
- 基本语法:ALTER TABLE [table_name] DROP COLUMN [column_name];
- 示例:
- 若要从Employees表中删除Email列,可以使用以下语句:
-
ALTER TABLE Employees DROP COLUMN Email;
- 注意,在删除列之前,需要确保没有其他对象(如视图、存储过程等)依赖于该列,否则可能会导致相关对象的操作出现错误。
3. 修改列的数据类型
- 基本语法:ALTER TABLE [table_name] ALTER COLUMN [column_name] [new_data_type];
- 示例:
- 假设Employees表中的EmployeeID列最初的数据类型为int,现在要将其修改为bigint,可以使用以下语句:
-
ALTER TABLE Employees ALTER COLUMN EmployeeID bigint;
- 有些数据类型的转换可能会导致数据丢失或者出现错误。例如,将一个包含较大数值的int列转换为tinyint(范围是0 - 255)可能会导致数据溢出问题。在进行数据类型修改时,需要谨慎考虑数据的兼容性。
4. 修改列的约束条件
- 添加约束
- 基本语法(以添加主键约束为例):ALTER TABLE [table_name] ADD CONSTRAINT [constraint_name] PRIMARY KEY ([column_name]);
- 示例:
- 如果Employees表最初没有定义EmployeeID为主键,现在要添加主键约束,可以使用以下语句:
-
ALTER TABLE Employees ADD CONSTRAINT PK_Employees_EmployeeID PRIMARY KEY (EmployeeID);
- 删除约束
- 基本语法(以删除主键约束为例):ALTER TABLE [table_name] DROP CONSTRAINT [constraint_name];
- 示例:
- 假设Employees表中的EmployeeID有主键约束,约束名称为PK_Employees_EmployeeID,要删除该主键约束,可以使用以下语句:
-
ALTER TABLE Employees DROP CONSTRAINT PK_Employees_EmployeeID;
- 修改约束(以修改列的非空约束为例)
- 若要将Employees表中EmployeeName列的非空约束修改为允许为空,可以先删除原有的非空约束,再根据需要重新添加约束。
- 删除非空约束:
-
ALTER TABLE Employees ALTER COLUMN EmployeeName varchar(100) NULL;
- 重新添加非空约束(如果需要):
-
ALTER TABLE Employees ALTER COLUMN EmployeeName varchar(100) NOT NULL;
- 查看表的所有约束
SELECT OBJECT_SCHEMA_NAME(kc.parent_object_id) AS SchemaName, -- 表所属架构名 OBJECT_NAME(kc.parent_object_id) AS TableName, -- 表名 c.name AS ColumnName, -- 列名 kc.name AS ConstraintName -- 主键约束名称 FROM sys.key_constraints kc JOIN sys.index_columns ic ON kc.parent_object_id = ic.object_id AND kc.unique_index_id = ic.index_id JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
5. 注意事项
- 备份数据:在对表结构进行修改之前,特别是涉及到可能会影响数据的操作(如修改数据类型、删除列等),最好先备份表中的数据,以防数据丢失或损坏。
- 影响其他对象:修改表结构可能会对依赖该表的其他数据库对象(如视图、存储过程、函数等)产生影响。例如,删除列可能会导致引用该列的视图或存储过程出现错误,需要对这些对象进行相应的修改。
- 性能考虑:某些表结构的修改操作(如添加或删除索引相关的约束)可能会对数据库的性能产生较大的影响。在生产环境中进行此类操作时,需要考虑在适当的时间(如系统负载较低的时候)进行。
(图片来源网络,侵删)(图片来源网络,侵删)(图片来源网络,侵删)
-
-
-
- 假设Employees表中的EmployeeID有主键约束,约束名称为PK_Employees_EmployeeID,要删除该主键约束,可以使用以下语句:
-
- 如果Employees表最初没有定义EmployeeID为主键,现在要添加主键约束,可以使用以下语句:
- 添加约束
-
- 假设Employees表中的EmployeeID列最初的数据类型为int,现在要将其修改为bigint,可以使用以下语句:
-
- 若要从Employees表中删除Email列,可以使用以下语句:
-
-
- 假设已经有一个名为Employees的表,包含EmployeeID、EmployeeName和Department列。现在要添加一个新列HireDate,数据类型为date,可以使用以下语句:
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。