SQL学习笔记——表结构的修改
修改表结构可以使用“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学习笔记——表结构的修改
-
hive建的表丢了?其实它一直在 博客分类: HaDoop学习笔记HIVE derbyhive表找不到了
-
oracle中修改有数据的表的字段类型 博客分类: Oracle学习记录自学记录 oracle表格式的重新定义
-
MySQL复制表结构和内容到另一张表中的SQL语句
-
MySQL复制表结构和内容到另一张表中的SQL语句
-
MySQL中修改表结构时需要注意的一些地方
-
MySQL中修改表结构时需要注意的一些地方
-
数据结构与算法学习笔记(11):图解数据结构与算法-链表(一)&(二)&(三):单链表的概念与结构
-
MySQL笔记之修改表的实现方法
-
嵌入式linux学习笔记--20200222--JZ2440V3 S3C2440 时钟树分析以及修改时钟的代码