欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL学习笔记——表结构的修改

程序员文章站 2024-03-21 08:50:10
...

修改表结构可以使用“ALTER TABLE”语句

语法格式:

ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name 
  {  
	[ ALTER COLUMN  column_name     /*修改已有列的属性*/  
	 	{ new_data_type [ ( precision [ , scale ] ) ]    
		 [ NULL | NOT NULL ]   
		 }
	]   
	| [ WITH { CHECK | NOCHECK } ] ADD    /*添加列*/  
	  {   <column_definition>   | column_name AS computed_column_expression 			
	  [PERSISTED [NOT NULL]]    | <table_constraint>   
	  } [ ,...n ]  
	| DROP           /*删除列、约束等*/  
	  { [ CONSTRAINT ] constraint_name     | COLUMN column_name   
  	  } [ ,...n ]   
        | [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
	  { ALL | constraint_name [ ,...n ] }  
        | { ENABLE |DISABLE } TRIGGER     
	  { ALL | trigger_name [ ,...n ] } 
  } 
  [; ]

参数说明

ALTER COLUMN:指定要更改命名列。
column_name:要更改、添加或删除的列的名称。

new_data_type:新的数据类型。

NULL | NOT NULL:指定列是否可接受空值。

WITH CHECK | WITH NOCHECK:指定表中的数据是否用新添加的或重新启用的 FOREIGN KEY 或 CHECK约束进行验证。如果未指定,对于新约束,假定为 WITH CHECK,对于重新启用的约束,假定为 WITH NOCHECK。

ADD:指定添加一个或多个列定义、计算列定义或者表约束。

DROP { [ CONSTRAINT ] constraint_name | COLUMN column_name }:指定从表中删 除 constraint_name 或 column_name。可以列出多个列或约束。

{ CHECK | NOCHECK} CONSTRAINT:指定启用或禁用 constraint_name。此选项只 能与 FOREIGN KEY 和 CHECK 约束一起使用。如果指定了 NOCHECK,则将禁用约束,从而在将来插入或更新列时,不根据约束条件进行验证。无法禁用DEFAULT、 PRIMARY KEY 和 UNIQUE 约束。

ALL:指定使用 NOCHECK 选项禁用所有约束,或者使用 CHECK 选项启用所有约束。
{ENABLE | DISABLE}TRIGGER:指定启用或禁用 trigger_name。禁用触发器时, 仍会为表定义该触发器;但是,当对表执行 INSERT、UPDATE或 DELETE 语句时, 除非重新启用触发器,否则不会执行触发器中的操作。
ALL:指定启用或禁用表中的所有触发器。 —

trigger_name:指定要启用或禁用的触发器的名称。

表结构修改语句

----在创建的数据库DB001中,创建另一张学习信息表StuInfo
use DB001
go
create table StuInfo
(
 SID  char(10) not null primary key,
 Sname char(8) not null,
 Sage int not null,
 sex char(2) check(sex='男' or sex='女') default '男',
 remark varchar(50) null
)
go

--在StuInfo表中添加一列学生的兴趣字段,然后再删除该字段
alter table StuInfo 
 add hobby varchar(20) not null
go

--将姓名长度由8改到10
alter table StuInfo
  alter column Sname char(10)
go

--删除StuInfo表
drop table StuInfo

心得:在表的结构修改过程中,使用的的较多的是表字段的修改和添加,以及表的删除。但修改表的过程中需要注意以下几点:
1、表中尚未有记录时,可以修改表的结构,如更改列名、列的数据类型、长度和是否允许为空值等属性。
2、如果表中有了记录,不能随意更改表的结构,尤其数据类型,以免出错。
3、主表的主键和附表的外键是具有同样的字段和属性值得,所有改的时候一定要注意。
4、具有以下特性的列不能被修改:

	a.具有text、ntext、image 或 timestamp 数据类型的列
	b.计算列
	c.全局标识符列
	d.复制列
	f.用于索引的列(但若用于索引的列为 varchar、nvarchar 或 varbinary 数据类型时,可 以增加列的长度)
	g.用于由“CREATE STATISTICS”生成统计的列。若需修改这样的列,必须先用“DROP STATISTICS”;语句删除统计
	h.用于主键或外键约束的列
	i.用于 CHECK 或 UNIQUE 约束的列
	j.关联有默认值的列

5、 当改变列的数据类型时,要求满足下列条件:

	原数据类型必须能够转换为新数据类型。
 	新类型不能为timestamp 类型。
	如果被修改列属性中有“标识规范”,则新数据类型必须是有效的“标识规范”数据类型。
相关标签: SQL 表结构修改