使用 T-SQL 命令创建表创建表使用“CREATE TABLE”语句。
语法格式:
create table [ database_name . [ schema_name ] . |schema_name . ] table_name
(
{ <column_definition> /*列的定义*/
| column_name AS computed_column_expression [PERSISTED [NOT NULL]] /*定义计算列*/ }
[ <table_constraint> ] [ ,...n ] /*指定表的约束*/ )
[ ; ]
其中
<column_definition> ::=
column_name data_type /*指定列名、类型*/
[ NULL | NOT NULL ] /*指定是否为空*/
[
[ CONSTRAINT constraint_name ] /*指定约束名*/
[ DEFAULT constant_expression ] /*指定默认值*/ |
[ IDENTITY [ ( seed , increment )] [ NOT FOR REPLICATION ] /*指定为标识列*/ ]
[ <column_constraint> [ ...n ]
] /*指定列的约束*/
参数说明
<column_constraint> 、<table_constraint >
两类约束
database_name
:在其中创建表的数据库的名称。database_name 必须指定现有数据库 的名称。如果未指定,则database_name 默认为当前数据库
。
schema_name
:新表所属架构的名称。
table_name
:新表的名称。表名必须遵循标识符规则
。
column_name
:表中列的名称。列名必须遵循标识符规则,并在表中唯一
。如果未指定column_name,则timestamp列的名称将默认为 timestamp。
computed_column_expression
:定义计算列的值的表达式。计算列并不是物理地存储在表中的虚拟列,除非此列标记为PERSISTED。该列由同一表中的其他列通过表达式计算得到
。例如,计算列可以定义为 cost AS price *qty。表达式可以是非计算列 的列名、常量、函数、变量
,也可以是用一个或多个运算符连接的上述元素的任意组合
。表达式不能是子查询,也不能包含别名数据类型
。
计算列可用于选择列表、WHERE 子句、ORDER BY 子句或任何其他可使用正则表达式的位置
,
但下列情况除外:计算列不能用作DEFAULT或FOREIGN KEY 约束定义,也不能与NOT NULL约束定义一起使用。但是,如果计算列的值由具有确定性的表达式定义,并且 索引列中允许计算结果的数据类型,则可将该列用作索引中的键列,或用作PRIMARY KEY 或 UNIQUE 约束的一部分。例如, z 如果表中含有整数列 a 和 b,则可以对计算列 a+b创建索引,但不能对计算 列 a + DATEPART(dd, GETDATE())创建索引,因在以后的调用中,其值可能发 生改变。计算列不能作为 INSERT 或 UPDATE 语句的目标。
PERSISTED
:指定 SQL Server Database Engine 将在表中物理存储计算值,而且,当计算列依赖的任何其他列发生更新时对这些计算值进行更新。将计算列标记为PERSISTED,可允许您对具有确定性、但不精确的计算列创建索引。用作已分区表 的分区依据列的所有计算列都必须显式标记为PERSISTED。指定 PERSISTED computed_column_expression 必须具
创建表操作
:
基于前面学习练习创建的数据库DB001进行操作,创建常做例题的四表:Student(学习信息表)、Teacher(教师信息表)、Course(课程信息表)、SC(成绩表)
--在创建的数据库DB001中,创建学生信息表
use DB001
go
create table Student
(
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
--在创建的数据库DB001中,创建教师信息表
use DB001
go
create table Teacher
(
TID char(10) primary key,
Tname varchar(10) not null,
Tdepart varchar(15)
)
--在创建的数据库DB001中,创建课程信息表
use DB001
go
create table Course
(
CID char(10) primary key,
TID char(10) foreign key references Teacher(TID),
Cname char(15) not null
)
--在创建的数据库DB001中,创建成绩表
use DB001
go
create table SC
(
SID char(10) foreign key(SID) references Student(SID),
CID char(10) foreign key references Course(CID),
Score int not null
)
心得
:在表的创建过程中,一定要避免拿到表需求就直接创建,先捋顺各个表之间的关联和关联字段(主键和外键),然后先创建主表再创建附表(含有外键)。捋顺表与表之间的关联,确定好主键和外键后,接着便是弄清字段及字段的属性以及对字段的约束等。