建立好了名为TEST的数据库后,需要建立相应数据表和进行相关的一些操作,下面以选课表为例。
- 新建数据表和键的设置
CREATE TABLE tablename
(
列名 数据类型(长度) 列级约束
……
……
表级约束
)
下面为几个建立表的例子:

CREATE TABLE Student
(
    Sno int PRIMARY KEY, 
    Sname varchar(30) NULL,
    Ssex char(2) NULL CHECK(Ssex in ('男','女')),
    Sage int NULL,
    Sdep varchar(20) NULL
)

CREATE TABLE Course
(
    Cno char(3) PRIMARY KEY,
    Cname varchar(20) NULL,
    Teacher char(6) NULL 
)

上面建立一个名为Student和Course的数据表,分别设定Sno和Cno为主键,其他列后面的NULL表示该项数据可以为空,而Ssex后的CHECK表示Ssex的列级约束,限定Ssex只能是’男’或者是’女’。

有时所建立的数据表的主键为多个键合成的,此时对于主键的设定不能直接在列后面添加PRIMARY KEY关键字,而是采用如下形式:

CREATE TABLE SC
(
    Sno int REFERENCES Student(Sno),
    Cno char(3) REFERENCES Course(Cno),
    Grade int NULL,
    PRIMARY KEY(Sno,Cno)
)

在表的最后添加PRIMARY KEY(…),括号内为组合的主键。在此表中,Sno和Cno分别为前面Student和Course表格的主键,在SC表中作为外键,因而需要设定其与原主键表的关系,通过关键字REFERENCES 主键表名(键名) 来设定其响应的主键表。

同样的,有时会外键为合成外键,此时也不能在列级约束中表示其与主键表的关系:

CREATE TABLE BK
(
    Sno int,
    Cno char(3),
    Grade int NULL,
    DateIn smalldatetime,
    PRIMARY KEY(Sno,Cno,DateIn),
    FOREIGN KEY(Sno,Cno) REFERENCES SC(Sno,Cno)    
)

在本段代码中,Sno和Cno为BK表的合成外键,其依赖于主键表SC,其关系在本表中表示为:FORENGN KEY(Sno,Cno) REFERENCE SC(Sno,Cno),表示Sno和Cno为其联合外键,其对应参考的主键表为SC。
小结:
当主键为单列时,设置列级约束,直接在相应列后面天剑关键字PRIMARY KEY进行设置。
当主键为合成主键时,为表级约束,在数据表的最后进行主键设置:PRIMARY KEY(列名1,列名2……)
当外键为单列时,设置列级约束,在相应的列后面添加关键字REFERENCES 表名(列名)
当外键为合成外键时,为表级约束,在数据表最后进行外键设置:FOREIGN KEY(列名1,列名2) REFERENCE 表名(列名1,列名2)

数据表内容修改
在建立完数据表后,如果发现出错或者一些其他原因,可能需要对数据表进行修改,则可以使用ALTER TABLE 命令进行相应操作:

  1. 表名和列名的修改:
    对于已建立好的数据表,若要修改表名和列名,需要用到系统存储过程sp_rename来进行:
    sp_rename ‘原对象名’,’新对象名’ ,如果该语句不是在批处理的第一句,那么需要在该语句前加上EXEC命令。
    另一种修改列名的方法是通过下面命令:
    ALTER TABLE 表名 COLUMBN RENAME 旧列名 TO 新列名
  2. 表格中列的增加:
    使用:
    ALTER TABLE 表名 ADD 列名 列相关属性 列级约束,
    基本与正常创建表的时候新建列是一样的。
    如:
    ALTER TABLE Student ADD testcolumn2 char(2) NULL CHECK(testcolumn2 < 20)
    创建名为testcolumn2的新列,类型为char,数据长度为2,允许非空,设定CHECK约束该列的值小于20。
  3. 表格列属性的修改:
    修改列属性:如数据类型、长度等;
    使用:
    ALTER TABLE 表名 ALTER COLUMN 列名 新数据类型(长度) [NULL | NOT NULL](可选)
ALTER TABLE Student ALTER COLUMN testcolumn2 char(4)

将上面建立的testcolumn2的数据长度改为了4,注意此处后面的列级约束NULL和NOT NULL,如果要单独修改该约束,修改的时候命令也应该为:
ALTER TABLE 表名ALTER COLUMN 列名 数据类型 NULL|NOT NULL,
而不是:
ALTER TABLE 表名ALTER COLUMN 列名 NULL|NOT NULL,即数据类型应该写上。
4. 增加列级约束
增加CHECK
可以通过:
ALTER TABLE 表名 ADD CHECK (…..)
或者
ALTER TABLE 表名 CONSTRAINT 逻辑名 CHECK (……)
前者由系统自动分别逻辑名,后者可以自定义逻辑名:

ALTER TABLE Student ADD CONSTRAINT CHKTEST CHECK (testcolumn2 >30)

定义了逻辑名为CHKTEST的CHECK 约束,此方法方便约束的删除操作。
同样的,如果需要增加其他列级约束如PRIMARY KEY,REFERENCES,FOREIGN KEY等,也是直接使用
ALTER TABLE Student ADD ……命令来添加。
5. 删除列或列约束
ALTER TABLE DROP COLUMN 列名

ALTER TABLE DROP 约束的逻辑名
如:

ALTER TABLE Student DROP CHKTEST

删除前面定义的逻辑名为CHKTEST的CHECK约束。

ALTER TABLE Student DROP COLUMN testcolumn2

删除前面定义的testcolumn2列,注意,列可以删除的前提是该列没有被依赖关系或者相关约束。

小结:

ALTER TABLE table_name ALTER COLUMN column_name type_name(size) [NULL or NOT NULL]    --修改已存在列的属性
ALTER TABLE table_name ADD new_column_definition --添加新列

ALTER TABLE table_name ADD constraint_name   ---添加CHECK、PRIMARITY KEY,REFERENCES、FOREIGN KEY等约束

ALTER TABLE table_name ADD CONSTRAINT check_name  CHECK(...)
--建立自定义逻辑名称的CHECK约束
ALTER TABLE table_name DROP CONSTRAINT constraint_name --用于删除CHECK或者其他约束

ALTER TABLE table_name DROP COLUMN column_name --删除列

查看数据表属性
使用系统存储过程查看数据表相关属性
EXEC sp_help 表名 or ‘表名’
返回结果包括表 中各个列名称、类型、大小、约束等相关信息。

删除数据表

DROP TABLE table_name    --删除数据表

需要注意的是,所删除的表不能正被其他表的外键约束参考,如果有这种情况需要先解除约束关系,或者先删除引用该表的表,另外,系统表不能删除。