1
表操作
创建表
增加, 删除和修改字段
创建, 删除和修改约束
查看表格
2
创建表
? 在 SQL Server 2000中,每个数据库中最多可
以创建 200万个表,用户创建数据库表时,最
多可以定义 1024列,也就是可以定义 1024个字
段。
? SQL Server 2000提供了两种方法创建数据库
表,第一种方法是利用企业管理器
( Enterprise Manager) 创建表;另一种方法
是利用 Transact-SQL语句中的 create命令创建
表。
3
利用企业管理创建表
? 在 Enterprise Manager中,展开指定的服务器和
数据库,打开想要创建新表的数据库,用右键单
击表对象,从弹出的快捷菜单中选择新建表选项,
或者在工具栏中选择图标,就会出现新建表对话
框,在该对话框中,可以定义列的以下属性:列
名称、数据类型、长度、精度、小数位数、是否
允许为空、缺省值、标识列、标识列的初始值、
标识列的增量值和是否有行的标识。 然后根据提
示进行设置,并且保存表。
4
常用属性说明
? 长度:指定字段的长度,即字段所占用
的字节数。字段的长度并非越打越好。
? 允许空:指定该字段在表中是否允许空
值。空值表示没有输入,并不等于零或
零长度的字符串。若指定一列不允许空
值,则在相表中写数据时必须在列中输
入一个值,否则该行不被接收如数据库。
? 描述:指定字段的注释文本描述。
? 默认值:指定字段的默认值,指在插入
记录时,没有指定字段值的情况下,自
动使用的默认值。
5
? 精度:指定该字段的位数。对于 decimal和
numeric类型的字段,可以设置精度属性。
? 小数位数:显示该列值小数点右边能出现的最多
数字个数。
? 标识:指定一个字段是否为标识字段。只有
bigint,int,smallint,tinyint,decimal和
numeric可以设置该属性。可能的值是,
1、否:不设置该字段为标识字段。
2、是:指定该字段为标识字段。表示在插入一个
新的数据行时,不必为字段指定数值,系统会根
据标识种子和标识递增量自动生成一个字段值。
3、是(不适用于复制):类似于第二个,但是若
以复制的方式象表中输入数据,系统将不自动生
成字段值。
6
? 标识种子:指定标识字段的初始值。
? 标识递增量:指定标识字段的递增值。该
选项只使用于其“标识”属性设置为“是”
或“是(不适用于复制)”的字段。在一
个表中,只能定义一个标识字段。
? 公式:指定用于计算字段的公式
? 排序规则:指定当字段值用于对查询结果
的记录进行排序时的排序规则,默认情况
下使用数据库默认设置。
7
向表中添加数据
? 步骤如下,
? 1、选择要添加数据的表
? 2、选择菜单“操作-打开表-返回所有
行”命令,打开数据输入窗口。
? 3、输入新记录,同时可以修改和删除操
作。
? 4、保存输入。
8
表操作 —— 创建表
? 同一用户不能建立同一个表名的表,
同一表名的表可有多个拥有者。但在
使用时,需要在这些表上加上所有者
的表名。
9
利用 create命令创建表
?其语法形式如下,
?CREATE TABLE
[ database_name.[ owner ],| owner.] table_name
( { < column_definition >| column_name AS
computed_column_expression|
?< table_constraint >} [,…n])
[ ON { filegroup | DEFAULT } ]
?[TEXTIMAGE_ON {filegroup | DEFAULT} ]
?<column_definition>,:= { column_name data_type }
?[ [ DEFAULT constant_expression ]
?| [ IDENTITY [(seed,increment )] ]
?[ <column_constraint>] [,..n]
10
? database_name,用于指定在其中创建表的数据
库名称。
? owner,用于指定新建表的所有者的用户名 。
? table_name,用于指定新建的表的名称。
? column_name, 用于指定新建表的列的名称。
? computed_column_expression,用于指定计算列
的列值的表达式。
? ON {filegroup | DEFAULT},用于指定存储表的
文件组名。如果指定 filegroup,则数据表将存储
在指定的文件组中。若指定 default,或未指定
on参数,则数据表将存储在默认文件组中。
11
? TEXTIMAGE_ON,用于指定 text,ntext
和 image 列的数据存储的文件组。
? data_type,用于指定列的数据类型 。
? DEFAULT,用于指定列的缺省值。
? constant_expression,用于指定列的缺省值的常
量表达式 。
? IDENTITY,用于指定列为标识列。
? Seed,用于指定标识列的初始值。
? Increment,用于指定标识列的增量值。
? column_constraint和 table_constraint,用于指定
列约束和表约束。
12
例:创建一个雇员信息表
?其 SQL语句的程序清单如下,
?CREATE TABLE employee
?( number int not null,
? name varchar(20) NOT NULL,
? sex char(2) NULL,
? birthday datetime null,
? hire_date datetime NOT NULL
? DEFAULT (getdate())
? professional_title varchar(10)
null,
? salary money null,
? memo ntext null
?)
13
约束
? 主键约束
? 唯一性约束
? 外键约束
? 核查约束
? Null约束和 default约束
14
在企业管理器中设置主键约束
? 主键可以用来强制一个字段或多个字段组合值
的唯一性,且不允许该字段值为空值。
? 具体步骤如下,
? 1、选中需要设置的表节点。
? 2、在该表节点处,点击右键,并选择“设计表”
选项。
? 3、选中需要设置主键的字段,然后点击菜单上
的设置主键按钮,即可。
? 在一个表中只能设置一个主键约束,但可以将
包含多个字段的字段组合设置为主键,设置时
需要按住 ctrl键将多个字段选中,然后按照和设
置单字段主键相同的方法设置即可。
? 取消方法与设置类似。
15
在 T-SQL中设置主键约束
? 为数据表创建主键约束的句法如下,
? [constraint constraint_name]
? Primary key [clustered|not clustered]
? [(字段名 [,…n ])]
? 其中,constraint_name 约束名称。若缺省,系统
将会自动为创建的约束命名。
? CLUSTERED|NONCLUSTERED,用于指定约束
的类型,即聚集约束或非聚集约束,
CLUSTERED为默认值。
? column_name,用于指定主键的列名。主键最多
由 16个列组成。
16
? 主键约束分为字段级约束和表级约束。
? 字段级约束:为某一个字段设置约束。在设置
字段级约束时,只需将创建主键约束的语句添
加到该字段的定义子句后面。例,
? Create table project
? (
– 项目编号 int constraint pk_pno primary key,
– 项目名称 varchar(40)
? )
17
? 表级约束:指将包含多个字段的字段组合设置
为主键。
? 设置表级约束时,需要将创建主键约束的语句
添加到各个字段定义语句的后面,并在该语句
后面的括号中写入字段组合包含的所有字段,
字段之间用逗号分隔。例如,
? Create table project
? (
– 项目编号 int,
– 项目名称 varchar(40),
– Constraint pk_pno_pname primary key(项目编号,
项目名称 )
? )
18
唯一性约束
? 在一个表中只能设置一个主键约束,如何
限制非主键字段输入值的唯一性呢?
? 唯一性约束的设置可以确保在非主关键字
段或字段组合中不输入重复值。
? 唯一性约束和主键约束的区别,
? 1、在一个表中只能定义一个主键约束,但
可以定义多个唯一性约束。
? 2、允许空值的字段上不能定义主键约束,
但可以定义唯一性约束。
19
在企业管理器中设置唯一性约束
? 步骤如下,
? 1、为设置唯一性约束的表打开表设计器,选择工具栏中的
“表和索引属性”按钮,打开表的属性窗口。
? 2、选择“索引 /键”选项。
? 3、选择“新建”命令。为该表创建新的索引,此时系统分
配的名称出现在“索引名”框中。
? 4、在“列名”下展开字段的列表,选择需要附加约束的字
段。若要将约束附加到多个字段,在后续行中选择其它的
字段。
? 5、选择“创建 unique”复选项。
? 6、选择“约束选项”,将在该字段上同时创建一个唯一
性索引。
? 7、保存表
20
唯一性约束的删除
? 若想删除唯一性约束,可以在“索引 /键”
选项中选择索引名,然后选择“删除”
命令。
21
在 T-SQL中设置唯一性约束
? 设置唯一性约束的句法如下,
?[CONSTRAINT constraint_name]
? UNIQUE
[CLUSTERED|NONCLUSTERED]
?[( 字段名 [,…n]) ]
22
? 例如:创建一个名为 project 的表,该表包含二
个字段“项目编号”和“项目名称”,将字段
“项目编号”设置为主键,主键约束名为
pk_Pno,为字段“项目名称”设置唯一性约束,
约束名为 UN_pname,
? Create table project
? (
? 项目编号 int constraint pk_pno primary key,
? 项目名称 char(20) constraint un_pname unique
? )
23
? 例:创建一个名为 project的表,该表包含 3个字段
“项目编号”、“项目名称”和“项目负责人”,
将字段“项目编号”设置为主键,主键约束名为
pk_pno,为包含字段“项目名称”和“项目负责
人”的组合字段设置唯一性约束,约束名为
un_pname_pm。 下面是用来完成这一任务的语句,
? Create table project
? (
– 项目编号 int
– Constraint pk_pno primary key,
– 项目名称 char(20),
– 项目负责人 char(20),
– Constraint un_pname_pm unique(项目名称,项目负责
人 )
? )
24
外键约束
? 外关键字约束定义了表之间的关系 。 当一
个表中的一个列或多个列的组合和其它表
中的主关键字定义相同时, 就可以将这些
列或列的组合定义为外关键字, 并设定它
是和哪个表中哪些列相关联。这样,当在
定义主关键字约束的表中更新列值时,其
它表中有与之相关联的外关键字约束的表
中的外关键字列也将被相应地做相同的更
新。外关键字约束的作用还体现在,当向
含有外关键字的表插入数据时,如果与之
相关联的表的列中没有与插入的外关键字
列值相同的值时,系统会拒绝插入数据。
25
? 步骤如下,
? 1、打开企业管理器,展开数据库 company节点。
? 2、在数据库 company的下一级中,右击“关系
图”,在弹出菜单中选择“新建数据库关系图”
命令。
? 3、关闭创建数据库关系图向导,进入数据库关
系图创建窗口。
? 4、在数据库关系图创建窗口的工具栏中单击按
钮“在关系图上加表”按钮。打开“添加表”
窗口。
? 5、在“添加表”窗口中选择主键表 employee,
并单击“添加”按钮,再选择外键表 project,
单击“添加”按钮,然后关闭“添加表”窗口。
26
? 6,将鼠标指针移动到 employee表中主关键字段
“编号”左边的选择栏,按下鼠标左键,并将
鼠标指针拖动到 project表中字段“负责人编号”
上。
? 7、松开鼠标左键,此时弹出“创建关系”对话
框。根据需要决定是否选择对话框中的如下选
项,
? 8、设置完这些选项以后,单击“确定”按钮,
关闭“创建关系”对话框。此时创建数据库关
系图窗口中的二个表之间出现一条连接线,表
示已经建立了这个关系。
? 9、单击“保存”按钮,在“另存为”窗口中输
入关系名,单击“确定”按钮。
? 10、在“保存”对话框中,单击“是”按钮确
认对主键表和外键表所作的修改。
27
删除外键约束
? 若想删除该外键约束,可以在关系图中,
删除代表要删除的外键约束的关系线。
? 注意:若不删除数据库图中的关系线,
即使删除了该关系图,也不会影响设置
好的外键约束,因为删除关系图并不对
表作相应的修改。
28
在 T-SQL中设置外键约束
? 定义外关键字约束的语法如下,
? [CONSTRAINT constraint_name]
? [FOREIGN KEY ]
? REFERENCES ref_table [ (ref_column)]
? [ ON DELETE { CASCADE | NO ACTION } ]
? [ ON UPDATE { CASCADE | NO ACTION } ]
? [ NOT FOR REPLICATION ]
? 各参数说明如下,
? REFERENCES,指定要建立关联的表的信息
? ref_table,指定要建立关联的表的名称
? ref_column,指定要建立关联的表中的相关列的名
称
29
? ON DELETE {CASCADE | NO ACTION},指定在删除表中数
据时, 对关联表所做的相关操作 。 在子表中有数据行与
父表中的对应数据行相关联的情况下, 如果指定了值
CASCADE,则在删除父表数据行时, 会将子表中对应的
数据行删除 。 如果指定的是 NO ACTION,则 SQL Server
会产生一个错误, 并将父表中的删除操作回滚 。 NO
ACTION 是缺省值
? ON UPDATE {CASCADE | NO ACTION},指定在更新表中数
据时, 对关联表所做的相关操作 。 在子表中有数据行与
父表中的对应数据行相关联的情况下, 如果指定了值
CASCADE,则在更新父表数据行时会将子表中对应的数
据行更新 ; 如果指定的是 NO ACTION, 则 SQL Server 会
产生一个错误并将父表中的更新操作回滚 。 NO ACTION
是缺省值 。
? NOT FOR REPLICATION,指定列的外关键字约束在把从其
它表中复制的数据插入到表中时不发生作用 。
30
? 例,1)创建一个数据表 employees,包含两
个字段“员工编号”和“员工姓名”,要
求将字段“员工编号”设置为主键,并为
字段“员工姓名”设置唯一性约束。
? 2)创建另一个数据表 project,该表包含三
个字段“项目编号”、“项目名称”和
“项目负责人”,将字段“项目编号”设
置为主键,将字段“项目负责人”设置为
外键,其参照字段是表 employees中的字段
“员工姓名”。并设置当删除数据表
employees中被引用的记录时,数据表
project中的引用记录也随之删除。
31
? -- 创建数据表 employees
? Create table employees (
? 员工编号 int primary key,
? 员工姓名 char(20) unique )
? Go
? --创建数据表 project
? Create table project (
? 项目编号 int primary key,
? 项目名称 char(20),
? 项目负责人 char(20) foreign key
? References employees(员工姓名 )
? On delete cascade )
? go
32
核查约束
? 核查约束通过检查一个或多个字段的输
入值是否符合设定的检查条件来强制数
据的完整性。如输入数据不符合核查条
件,系统将拒绝这条记录。
? 外键约束与核查约束的区别:外键约束
是从另一个表中获得有效数值的列表,
而核查约束基于逻辑表达式进行判断。
33
利用企业管理器设置核查约束
? 步骤如下,
? 1、打开企业管理器,展开 employee表所在的
数据库,并选中表 employee。
? 2,单击鼠标右键,在弹出菜单中选择“设计
表”,选择工具栏中的“表和索引属性”按钮,
打开表的属性窗口。
? 3、在属性窗口选择,Check约束”标签,单
击标签中“新建”按钮。
? 4、在约束表达式文本窗口中输入一个条件表
达式。
? 5、在约束名对话框中输入所建核查约束名。
34
? 6,根据需要决定是否选择下列选项,
? 创建中检查现存数据:将确保根据约束对表中
所有创建该约束前存在的数据进行验证。
? 对 insert,update强制约束:在将数据插入表
中或更新表中的数据时,强制该约束。
? 对复制强制约束:在将表复制到另一个数据库
中时强制该约束。
? 7、设置完上述选项,关闭“属性”对话框。
新建的核查约束将在保存表时予以保存。
35
删除核查约束
? 若想删除一个核查约束,可在,check约束”
中选定该约束,然后单击“删除”按钮即
可。
36
在 T-SQL中设置核查约束
? 其语法形式如下,
?CONSTRAINT constraint_name
? CHECK (logical_expression)
其中,logical_expression是用于
核查的逻辑表达式。
37
? 例:创建一个数据表 employees,包含 3个字段
“员工编号”、“员工姓名”和“工资”,要
求将字段“员工编号”设置为主键,为字段
“员工姓名”设置唯一性约束,并使“工资”
字段的取值范围限定在 1000~ 20000之间,核查
约束名为 ck_es。
? Create table employees (
? 员工编号 int not null primary key,
? 员工姓名 char(20) unique
? 工资 int not null
? Constraint ck_es
? Check (工资 >=1000 and 工资 <=20000)
? )
38
Null约束和 default约束
? 用企业管理器设置:在表设计里进行设
置。
39
用 T-SQL设置 NULL约束
? 在使用 create table语句创建表时,若没
有定义 NULL|Not NULL约束,则系统默
认允许空值。
? 设置方法是:在定义好字段属性后,直
接在后面加上 NULL或 NOT Null即可。
? 例如,
? Create table student
? ( 学号 int not null,
? 姓名 char(8)
? )
40
用 T-SQL设置 default约束
? 定义缺省约束的语法如下
? CONSTRAINT constraint_name
? DEFAULT constant_expression [FOR
column_name]
? 例,constraint de_order_quantity
default 100 for order_quantity
41
规则
? 规则是绑定到字段或用户自定义数据类
型,并指定字段可接受哪些数据值的数
据库对象,它通常用于执行一些与 check
约束相同的功能。
? 一个字段可以应用多个 check约束,但是
却只能应用一个规则。
? 规则以单独的对象创建,然后绑定到字
段上。
42
利用企业管理器创建规则
? 步骤如下,
? 1、在企业管理器中展开 employee表所在的数据库
节点,然后选中该数据库节点下一级菜单中的“规
则,节点,并单击鼠标右键,在弹出对话框内选择
菜单命令“新建规则”。
? 2、在弹出的“规则属性”对话框中的“文本”框
中输入正确的条件表达式。注意:规则中不能引用
表中的数据字段名以及别的数据对象。在条件表达
式中包含一个局部变量,该变量必须以 @开始。
? 3、输入完成后,单击“规则属性”对话框中“绑
定列”按钮,这时将弹出“将规则绑定到列”对话
框。
43
? 4,在“表”下拉列表中选择表 employee,
然后在“未绑定的列”列表中选择字段
“职位”,单击“添加”按钮,此时在
“绑定列”列表中添加了“职位字段”
? 5、设置完绑定字段后,单击“确定”按
钮关闭“将规则绑定到列”对话框,然
后再单击“确定”按钮关闭“规则属性”
对话框。
44
在 T-SQL中设置规则
? 句法如下,
? Create rule rule_name as condition_expression
? 其中,rule_name,指定新规则的名称。
? Condition_expression,定义规则的条件表达式。
规则创建后,就执行 sp_bindrule来将规则绑定到字
段或用户定义数据类型。执行该过程的句法如下,
? Exec sp_bindrule [@rulename=]’rule_name’,
? [@objname=]’object_name’
? 其中,[@rulename=]’rule_name’由 create语句创
建的规则名称
? [@objname=]’object_name’规则将要绑定到的数
据表和字段或是用户定义的数据类型。
45
? 例:创建一个数据表 employees,包含 3个字段, 员工编号,,
,员工姓名, 和, 工资,,要求将字段, 员工编号, 设置为
主键,创建一个规则,规则名为 ru_salary,将该规则绑定
到表 employees的字段, 工资, 上,限定该字段的值为
1000~ 20000之间 。
? Create table employees (
? 员工编号 int not null primary key,
? 员工姓名 char(20)
? 工资 int not null )
? Create rule ru_salary
? As @salary>=1000 and @salary<=20000
? Go
? Exec sp_bindrule ‘ru_alary’,‘ employees.工资 ’
? go
46
默认值
? 默认值可以帮助处理不包含全部数据表
字段的 insert操作。若在插入记录时没有
指定字段的值,则默认值将指定字段中
所使用的值。
? 默认值的使用与规则类似,首先需要创
建一个默认值,然后将默认值与特定的
表字段或用户自定义数据类型进行绑定。
47
用企业管理器设置默认值
? 步骤如下,
? 1、在企业管理器中展开 employee表所在的数据库
节点,然后选中该数据库节点下一级菜单中的
“默认”节点,并单击鼠标右键,在弹出对话框
中选择菜单命令“新建默认”。
? 2、在“名称”文本框中输入默认名,在“值”文
本框中输入默认取值。
? 3、输入完成后,单击对话框中“绑定列”按钮,
这时弹出“将默认值绑定到列”对话框。
? 4、选择表 employee,添加字段“职位”到“绑定
列”列表中。
? 5、单击“确定”按钮关闭“将默认绑定到列”对
话框,然后再单击“确定”按钮关闭“默认属性”
对话框。
48
在 T-SQL中设置默认值
? 语法为,
? Create DEFAULT default As constant_expression
? 其中,default是默认值的名称。
? Constrant_expression为只包含常量值的表达式,该
表达式中不能包含任何字段或其它数据库对象的名称。
? 创建默认值后,可以使用 sp_bindefault将其绑定到字
段或用户定义数据类型。执行该操作的 sp_bindefault
句法为,Sp_bindefault [@defname=]’default’,
? [@objname=]’object_name’
? 其中,[@defname=]’default’由 create default语句
创建的默认值名称。
? [@objname=]’object_name’,默认值将要绑定到的数据
表和字段的名称或用户定义的数据类型。
49
? 例如:创建规则。将上例中的“工资”字
段的默认值设置为 1000,规则为 de_salary,
? Create default de_alary as 1000
? Go
? Exec sp_bindefault ‘de_salary’,
? ‘ employees.工资’
50
在企业管理器中修改表
? 重新命名
? 修改数据表结构
? 修改表属性
51
重新命名
? 步骤如下,
? 1、在企业管理器中展开重新命名的表。
? 2、在希望重新命名的表上单击鼠标右键,
在弹出菜单上选择命令“重命名”,输
入新的表名称。
? 3、按回车键,在弹出的对话框内单击
“确定”按钮。
52
修改数据表结构
? 打开希望修改表结构的表设计窗口,可以执行
下列操作,
? 1、修改数据表中字段的定义:包括重新设置字
段名、字段类型、长度、允许空、描述、默认
值、精度、小数位数、标识、公式、排序规则
等字段属性,也可以设置和取消一个字段的主
键约束。
? 2、插入新字段:在末尾添加和在字段中间插入
新字段。
? 3、调整字段顺序
? 4、删除现有字段。
53
修改表属性
? 在表设计窗口中单击“表和索引属性”按钮,
打开表属性窗口,在该窗口中可以设置与整
个表相关的重要属性。
? 属性窗口包含 4个标签,分别是“表”、关
系、索引 /键和 check约束选项。下面是表标
签中的选项设置。
54
? 选定的表:显示选定的表明。如果在关系图中选定的表
不止一个,则只有第一个选定表的名称是可见的。可以
展开列表选择其它要检查或修改属性的表。
? 所有者:显示表所有者的名称。所有者名称是 SQL
Server角色或 SQL Server用户。
? 表的标识列:显示由 SQL Server用作表标识列的字段。
若要更改标识列,从下拉列表中选择即可。
? 表的 ROWGUID( 行标识符)列:显示由 SQL Server
用作表的 ROWGUID列的字段。若要更改,可从下拉列
表中选择。
? 表文件组:指定数据表的数据存放的文件组。默认文件
组最初是主文件组。
? 文本文件组:选择要在其中存储选定表的 TEXT和
image类型的字段的文件组名。默认文件组是主文件组。
? 描述:可以在该字段中输入有关数据表的一些说明文字。
55
在 T-SQL中修改表
? 修改字段定义
? 添加字段
? 删除字段
? 添加约束
? 删除约束
56
修改字段定义
? 格式,ALTER TABLE table
ALTER COLUMN column_name
new_data_type [(precision[,scale])]
[null|not null]
其中,table,需要修改的数据表名称
Column_name:需要修改的字段名称
New_data_type,修改后将要使用的新的数据类
型
Precision:字段将要使用的新的精度定义。
Scale:字段将要使用的新的小数位数。
57
? 例:创建一个名为 project的表,该表包含两个
字段“项目名称”和“项目编号”,将字段
“项目名称”从原来的数据类型 char(20)更改为
varchar(25),再将原来的不可为空属性更改为
可以为空。
? Create table project
? ( 项目编号 int primary key,
? 项目名称 char(20) not null)
? --使用 sp_help查看数据表的定义
? Exec sp_help project
? Alter table project
? Alter column 项目名称 varchar(25) null
? Exec sp_help project
? go
58
添加字段
? 格式,ALTER TABLE table
ADD {[column_definition] |
[column_name as
computed_column_expression]}
其中,table,需要添加字段的数据表名称
Column_definition,有关添加的字段的定义
Column_name,添加字段的名称
Computed_column_expression,计算字段表达
式。
59
? 例:向刚创建的 project表中添加 3个字段,
分别为“项目负责人”、“项目难度级
别,和“预计工期,。要求字段“预计
工期,的取值为字段“项目难度级别,
的值乘以 20。
? Alter table project
? Add 项目负责人 varchar(15),
? 项目难度级别 int default 1,
? 预计工期 as 项目难度级别 *20
? Exec sp_help project
60
删除字段
? 格式,ALTER TABLE table
DROP COLUMN column_name[,…n]
其中,table需要删除字段的数据表名称
Column_name,需要删除的字段名称
例:删除上面例子中的数据表 project中的字
段“项目负责人”和“预计工期”
Alter table project
Drop column 项目负责人,预计工期
61
添加约束
? 利用 alter table命令中的 add constraint 子句,可以添
加一个或多个约束。语法如下,
? Alter TABLE table
? [with check|with nocheck]
? Add constraint constraint_name
? Constraint_definition[,…n]
? 其中,table,需要添加约束的数据表名称。
? constraint_name,需要添加的约束名称。
? Constraint_definition,添加约束的定义。
? with check|with nocheck,若选择前者,表示将使用
新建的数据表约束对数据表中原有的数据进行检查;
若选择后者,表示新建的数据表约束追溯应用于数
据表中原有的记录。默认值为前者。
62
? 例:使用数据库 company,在该数据库中创建 2
个数据表。一个是数据表 employee,该数据表
中包含两个字段,“员工编号”和“员工姓
名”。另一个数据表 project,包含 3个字段,分
别是“项目编号”、“项目负责人”和“项目
难度系数”,然后再使用 alter table add
constraint 语句向数据表中添加 3个约束,1、主
键约束:将数据表 project中的字段“项目编号”
设置为主键。
? 2、外键约束:将数据表 project中的字段“项目
负责人”设置为外键。其参照字段是数据表
employees中的字段“员工编号”
? 3、核查约束:为数据表 project中的字段“项目
难度系数”创建核查约束,使它的取值范围在
0~ 5之间。
63
? Use company
? --创建数据表 employee
? Create table employee
? ( 员工编号 int primary key,
? 员工姓名 char(20) unique )
? Go
? --创建数据表 project
? Create table project
? ( 项目编号 int not null,
? 项目负责人 Char(20),
? 项目难度级别 int)
? go
64
? --向 project数据表中添加约束
? Alter table project
? Add constraint pk_pno
? Primary key(项目编号 ),
? Constraint fk_pm
? Foreign key(项目负责人 )
? Reference employee(员工编号 ),
? Constraint ck_p1
? Check (项目难度级别 >=1 and 项目难度
级别 <=5)
? go
65
? 利用 alter table命令中的 drop constraint 子句,
可以删除一个或多个约束。语法如下,
? Alter TABLE table
? drop constraint constraint_name[,…n]
? 其中,table,需要删除约束的数据表名称。
? constraint_name,需要删除的约束名称。
? 例如:删除上例中创建的外键约束和核查约束。
? Alter table project
? Drop constraint fk_pm,ck_p1
删除约束
66
删除表
? 步骤如下,
? 1、选择希望删除的数据表所在的数据库节点。
? 2、选择该库下的表节点,并选中希望删除的表,
单击鼠标右键,在弹出菜单中选择命令“删
除”,此时弹出“除去对象”对话框,单击按
钮“全部除去”,完成数据表的删除。
? 注意:如果希望删除的表是外键参照的数据表,
除非先删除该数据表的关联性,否则系统将拒
绝删除该表。另外,删除数据表时要非常小心,
以免误删除。
67
在 T-SQL中删除表
? 利用 DROP TABLE语句删除表 。 DROP TABLE
语句的语法形式如下,
? DROP TABLE table_name
? 其中,table是将要删除的数据表名称 。
? 注意:若删除当前数据库中的数据表, 只需直接
输入数据表名 。 若希望删除另外一个数据库中的
数据表, 则需要指定数据库名称和所有者 。
? 只有表的拥有者才有权利删除该数据库, 而且不
能使用 drop table语句删除系统数据表 。
表操作
创建表
增加, 删除和修改字段
创建, 删除和修改约束
查看表格
2
创建表
? 在 SQL Server 2000中,每个数据库中最多可
以创建 200万个表,用户创建数据库表时,最
多可以定义 1024列,也就是可以定义 1024个字
段。
? SQL Server 2000提供了两种方法创建数据库
表,第一种方法是利用企业管理器
( Enterprise Manager) 创建表;另一种方法
是利用 Transact-SQL语句中的 create命令创建
表。
3
利用企业管理创建表
? 在 Enterprise Manager中,展开指定的服务器和
数据库,打开想要创建新表的数据库,用右键单
击表对象,从弹出的快捷菜单中选择新建表选项,
或者在工具栏中选择图标,就会出现新建表对话
框,在该对话框中,可以定义列的以下属性:列
名称、数据类型、长度、精度、小数位数、是否
允许为空、缺省值、标识列、标识列的初始值、
标识列的增量值和是否有行的标识。 然后根据提
示进行设置,并且保存表。
4
常用属性说明
? 长度:指定字段的长度,即字段所占用
的字节数。字段的长度并非越打越好。
? 允许空:指定该字段在表中是否允许空
值。空值表示没有输入,并不等于零或
零长度的字符串。若指定一列不允许空
值,则在相表中写数据时必须在列中输
入一个值,否则该行不被接收如数据库。
? 描述:指定字段的注释文本描述。
? 默认值:指定字段的默认值,指在插入
记录时,没有指定字段值的情况下,自
动使用的默认值。
5
? 精度:指定该字段的位数。对于 decimal和
numeric类型的字段,可以设置精度属性。
? 小数位数:显示该列值小数点右边能出现的最多
数字个数。
? 标识:指定一个字段是否为标识字段。只有
bigint,int,smallint,tinyint,decimal和
numeric可以设置该属性。可能的值是,
1、否:不设置该字段为标识字段。
2、是:指定该字段为标识字段。表示在插入一个
新的数据行时,不必为字段指定数值,系统会根
据标识种子和标识递增量自动生成一个字段值。
3、是(不适用于复制):类似于第二个,但是若
以复制的方式象表中输入数据,系统将不自动生
成字段值。
6
? 标识种子:指定标识字段的初始值。
? 标识递增量:指定标识字段的递增值。该
选项只使用于其“标识”属性设置为“是”
或“是(不适用于复制)”的字段。在一
个表中,只能定义一个标识字段。
? 公式:指定用于计算字段的公式
? 排序规则:指定当字段值用于对查询结果
的记录进行排序时的排序规则,默认情况
下使用数据库默认设置。
7
向表中添加数据
? 步骤如下,
? 1、选择要添加数据的表
? 2、选择菜单“操作-打开表-返回所有
行”命令,打开数据输入窗口。
? 3、输入新记录,同时可以修改和删除操
作。
? 4、保存输入。
8
表操作 —— 创建表
? 同一用户不能建立同一个表名的表,
同一表名的表可有多个拥有者。但在
使用时,需要在这些表上加上所有者
的表名。
9
利用 create命令创建表
?其语法形式如下,
?CREATE TABLE
[ database_name.[ owner ],| owner.] table_name
( { < column_definition >| column_name AS
computed_column_expression|
?< table_constraint >} [,…n])
[ ON { filegroup | DEFAULT } ]
?[TEXTIMAGE_ON {filegroup | DEFAULT} ]
?<column_definition>,:= { column_name data_type }
?[ [ DEFAULT constant_expression ]
?| [ IDENTITY [(seed,increment )] ]
?[ <column_constraint>] [,..n]
10
? database_name,用于指定在其中创建表的数据
库名称。
? owner,用于指定新建表的所有者的用户名 。
? table_name,用于指定新建的表的名称。
? column_name, 用于指定新建表的列的名称。
? computed_column_expression,用于指定计算列
的列值的表达式。
? ON {filegroup | DEFAULT},用于指定存储表的
文件组名。如果指定 filegroup,则数据表将存储
在指定的文件组中。若指定 default,或未指定
on参数,则数据表将存储在默认文件组中。
11
? TEXTIMAGE_ON,用于指定 text,ntext
和 image 列的数据存储的文件组。
? data_type,用于指定列的数据类型 。
? DEFAULT,用于指定列的缺省值。
? constant_expression,用于指定列的缺省值的常
量表达式 。
? IDENTITY,用于指定列为标识列。
? Seed,用于指定标识列的初始值。
? Increment,用于指定标识列的增量值。
? column_constraint和 table_constraint,用于指定
列约束和表约束。
12
例:创建一个雇员信息表
?其 SQL语句的程序清单如下,
?CREATE TABLE employee
?( number int not null,
? name varchar(20) NOT NULL,
? sex char(2) NULL,
? birthday datetime null,
? hire_date datetime NOT NULL
? DEFAULT (getdate())
? professional_title varchar(10)
null,
? salary money null,
? memo ntext null
?)
13
约束
? 主键约束
? 唯一性约束
? 外键约束
? 核查约束
? Null约束和 default约束
14
在企业管理器中设置主键约束
? 主键可以用来强制一个字段或多个字段组合值
的唯一性,且不允许该字段值为空值。
? 具体步骤如下,
? 1、选中需要设置的表节点。
? 2、在该表节点处,点击右键,并选择“设计表”
选项。
? 3、选中需要设置主键的字段,然后点击菜单上
的设置主键按钮,即可。
? 在一个表中只能设置一个主键约束,但可以将
包含多个字段的字段组合设置为主键,设置时
需要按住 ctrl键将多个字段选中,然后按照和设
置单字段主键相同的方法设置即可。
? 取消方法与设置类似。
15
在 T-SQL中设置主键约束
? 为数据表创建主键约束的句法如下,
? [constraint constraint_name]
? Primary key [clustered|not clustered]
? [(字段名 [,…n ])]
? 其中,constraint_name 约束名称。若缺省,系统
将会自动为创建的约束命名。
? CLUSTERED|NONCLUSTERED,用于指定约束
的类型,即聚集约束或非聚集约束,
CLUSTERED为默认值。
? column_name,用于指定主键的列名。主键最多
由 16个列组成。
16
? 主键约束分为字段级约束和表级约束。
? 字段级约束:为某一个字段设置约束。在设置
字段级约束时,只需将创建主键约束的语句添
加到该字段的定义子句后面。例,
? Create table project
? (
– 项目编号 int constraint pk_pno primary key,
– 项目名称 varchar(40)
? )
17
? 表级约束:指将包含多个字段的字段组合设置
为主键。
? 设置表级约束时,需要将创建主键约束的语句
添加到各个字段定义语句的后面,并在该语句
后面的括号中写入字段组合包含的所有字段,
字段之间用逗号分隔。例如,
? Create table project
? (
– 项目编号 int,
– 项目名称 varchar(40),
– Constraint pk_pno_pname primary key(项目编号,
项目名称 )
? )
18
唯一性约束
? 在一个表中只能设置一个主键约束,如何
限制非主键字段输入值的唯一性呢?
? 唯一性约束的设置可以确保在非主关键字
段或字段组合中不输入重复值。
? 唯一性约束和主键约束的区别,
? 1、在一个表中只能定义一个主键约束,但
可以定义多个唯一性约束。
? 2、允许空值的字段上不能定义主键约束,
但可以定义唯一性约束。
19
在企业管理器中设置唯一性约束
? 步骤如下,
? 1、为设置唯一性约束的表打开表设计器,选择工具栏中的
“表和索引属性”按钮,打开表的属性窗口。
? 2、选择“索引 /键”选项。
? 3、选择“新建”命令。为该表创建新的索引,此时系统分
配的名称出现在“索引名”框中。
? 4、在“列名”下展开字段的列表,选择需要附加约束的字
段。若要将约束附加到多个字段,在后续行中选择其它的
字段。
? 5、选择“创建 unique”复选项。
? 6、选择“约束选项”,将在该字段上同时创建一个唯一
性索引。
? 7、保存表
20
唯一性约束的删除
? 若想删除唯一性约束,可以在“索引 /键”
选项中选择索引名,然后选择“删除”
命令。
21
在 T-SQL中设置唯一性约束
? 设置唯一性约束的句法如下,
?[CONSTRAINT constraint_name]
? UNIQUE
[CLUSTERED|NONCLUSTERED]
?[( 字段名 [,…n]) ]
22
? 例如:创建一个名为 project 的表,该表包含二
个字段“项目编号”和“项目名称”,将字段
“项目编号”设置为主键,主键约束名为
pk_Pno,为字段“项目名称”设置唯一性约束,
约束名为 UN_pname,
? Create table project
? (
? 项目编号 int constraint pk_pno primary key,
? 项目名称 char(20) constraint un_pname unique
? )
23
? 例:创建一个名为 project的表,该表包含 3个字段
“项目编号”、“项目名称”和“项目负责人”,
将字段“项目编号”设置为主键,主键约束名为
pk_pno,为包含字段“项目名称”和“项目负责
人”的组合字段设置唯一性约束,约束名为
un_pname_pm。 下面是用来完成这一任务的语句,
? Create table project
? (
– 项目编号 int
– Constraint pk_pno primary key,
– 项目名称 char(20),
– 项目负责人 char(20),
– Constraint un_pname_pm unique(项目名称,项目负责
人 )
? )
24
外键约束
? 外关键字约束定义了表之间的关系 。 当一
个表中的一个列或多个列的组合和其它表
中的主关键字定义相同时, 就可以将这些
列或列的组合定义为外关键字, 并设定它
是和哪个表中哪些列相关联。这样,当在
定义主关键字约束的表中更新列值时,其
它表中有与之相关联的外关键字约束的表
中的外关键字列也将被相应地做相同的更
新。外关键字约束的作用还体现在,当向
含有外关键字的表插入数据时,如果与之
相关联的表的列中没有与插入的外关键字
列值相同的值时,系统会拒绝插入数据。
25
? 步骤如下,
? 1、打开企业管理器,展开数据库 company节点。
? 2、在数据库 company的下一级中,右击“关系
图”,在弹出菜单中选择“新建数据库关系图”
命令。
? 3、关闭创建数据库关系图向导,进入数据库关
系图创建窗口。
? 4、在数据库关系图创建窗口的工具栏中单击按
钮“在关系图上加表”按钮。打开“添加表”
窗口。
? 5、在“添加表”窗口中选择主键表 employee,
并单击“添加”按钮,再选择外键表 project,
单击“添加”按钮,然后关闭“添加表”窗口。
26
? 6,将鼠标指针移动到 employee表中主关键字段
“编号”左边的选择栏,按下鼠标左键,并将
鼠标指针拖动到 project表中字段“负责人编号”
上。
? 7、松开鼠标左键,此时弹出“创建关系”对话
框。根据需要决定是否选择对话框中的如下选
项,
? 8、设置完这些选项以后,单击“确定”按钮,
关闭“创建关系”对话框。此时创建数据库关
系图窗口中的二个表之间出现一条连接线,表
示已经建立了这个关系。
? 9、单击“保存”按钮,在“另存为”窗口中输
入关系名,单击“确定”按钮。
? 10、在“保存”对话框中,单击“是”按钮确
认对主键表和外键表所作的修改。
27
删除外键约束
? 若想删除该外键约束,可以在关系图中,
删除代表要删除的外键约束的关系线。
? 注意:若不删除数据库图中的关系线,
即使删除了该关系图,也不会影响设置
好的外键约束,因为删除关系图并不对
表作相应的修改。
28
在 T-SQL中设置外键约束
? 定义外关键字约束的语法如下,
? [CONSTRAINT constraint_name]
? [FOREIGN KEY ]
? REFERENCES ref_table [ (ref_column)]
? [ ON DELETE { CASCADE | NO ACTION } ]
? [ ON UPDATE { CASCADE | NO ACTION } ]
? [ NOT FOR REPLICATION ]
? 各参数说明如下,
? REFERENCES,指定要建立关联的表的信息
? ref_table,指定要建立关联的表的名称
? ref_column,指定要建立关联的表中的相关列的名
称
29
? ON DELETE {CASCADE | NO ACTION},指定在删除表中数
据时, 对关联表所做的相关操作 。 在子表中有数据行与
父表中的对应数据行相关联的情况下, 如果指定了值
CASCADE,则在删除父表数据行时, 会将子表中对应的
数据行删除 。 如果指定的是 NO ACTION,则 SQL Server
会产生一个错误, 并将父表中的删除操作回滚 。 NO
ACTION 是缺省值
? ON UPDATE {CASCADE | NO ACTION},指定在更新表中数
据时, 对关联表所做的相关操作 。 在子表中有数据行与
父表中的对应数据行相关联的情况下, 如果指定了值
CASCADE,则在更新父表数据行时会将子表中对应的数
据行更新 ; 如果指定的是 NO ACTION, 则 SQL Server 会
产生一个错误并将父表中的更新操作回滚 。 NO ACTION
是缺省值 。
? NOT FOR REPLICATION,指定列的外关键字约束在把从其
它表中复制的数据插入到表中时不发生作用 。
30
? 例,1)创建一个数据表 employees,包含两
个字段“员工编号”和“员工姓名”,要
求将字段“员工编号”设置为主键,并为
字段“员工姓名”设置唯一性约束。
? 2)创建另一个数据表 project,该表包含三
个字段“项目编号”、“项目名称”和
“项目负责人”,将字段“项目编号”设
置为主键,将字段“项目负责人”设置为
外键,其参照字段是表 employees中的字段
“员工姓名”。并设置当删除数据表
employees中被引用的记录时,数据表
project中的引用记录也随之删除。
31
? -- 创建数据表 employees
? Create table employees (
? 员工编号 int primary key,
? 员工姓名 char(20) unique )
? Go
? --创建数据表 project
? Create table project (
? 项目编号 int primary key,
? 项目名称 char(20),
? 项目负责人 char(20) foreign key
? References employees(员工姓名 )
? On delete cascade )
? go
32
核查约束
? 核查约束通过检查一个或多个字段的输
入值是否符合设定的检查条件来强制数
据的完整性。如输入数据不符合核查条
件,系统将拒绝这条记录。
? 外键约束与核查约束的区别:外键约束
是从另一个表中获得有效数值的列表,
而核查约束基于逻辑表达式进行判断。
33
利用企业管理器设置核查约束
? 步骤如下,
? 1、打开企业管理器,展开 employee表所在的
数据库,并选中表 employee。
? 2,单击鼠标右键,在弹出菜单中选择“设计
表”,选择工具栏中的“表和索引属性”按钮,
打开表的属性窗口。
? 3、在属性窗口选择,Check约束”标签,单
击标签中“新建”按钮。
? 4、在约束表达式文本窗口中输入一个条件表
达式。
? 5、在约束名对话框中输入所建核查约束名。
34
? 6,根据需要决定是否选择下列选项,
? 创建中检查现存数据:将确保根据约束对表中
所有创建该约束前存在的数据进行验证。
? 对 insert,update强制约束:在将数据插入表
中或更新表中的数据时,强制该约束。
? 对复制强制约束:在将表复制到另一个数据库
中时强制该约束。
? 7、设置完上述选项,关闭“属性”对话框。
新建的核查约束将在保存表时予以保存。
35
删除核查约束
? 若想删除一个核查约束,可在,check约束”
中选定该约束,然后单击“删除”按钮即
可。
36
在 T-SQL中设置核查约束
? 其语法形式如下,
?CONSTRAINT constraint_name
? CHECK (logical_expression)
其中,logical_expression是用于
核查的逻辑表达式。
37
? 例:创建一个数据表 employees,包含 3个字段
“员工编号”、“员工姓名”和“工资”,要
求将字段“员工编号”设置为主键,为字段
“员工姓名”设置唯一性约束,并使“工资”
字段的取值范围限定在 1000~ 20000之间,核查
约束名为 ck_es。
? Create table employees (
? 员工编号 int not null primary key,
? 员工姓名 char(20) unique
? 工资 int not null
? Constraint ck_es
? Check (工资 >=1000 and 工资 <=20000)
? )
38
Null约束和 default约束
? 用企业管理器设置:在表设计里进行设
置。
39
用 T-SQL设置 NULL约束
? 在使用 create table语句创建表时,若没
有定义 NULL|Not NULL约束,则系统默
认允许空值。
? 设置方法是:在定义好字段属性后,直
接在后面加上 NULL或 NOT Null即可。
? 例如,
? Create table student
? ( 学号 int not null,
? 姓名 char(8)
? )
40
用 T-SQL设置 default约束
? 定义缺省约束的语法如下
? CONSTRAINT constraint_name
? DEFAULT constant_expression [FOR
column_name]
? 例,constraint de_order_quantity
default 100 for order_quantity
41
规则
? 规则是绑定到字段或用户自定义数据类
型,并指定字段可接受哪些数据值的数
据库对象,它通常用于执行一些与 check
约束相同的功能。
? 一个字段可以应用多个 check约束,但是
却只能应用一个规则。
? 规则以单独的对象创建,然后绑定到字
段上。
42
利用企业管理器创建规则
? 步骤如下,
? 1、在企业管理器中展开 employee表所在的数据库
节点,然后选中该数据库节点下一级菜单中的“规
则,节点,并单击鼠标右键,在弹出对话框内选择
菜单命令“新建规则”。
? 2、在弹出的“规则属性”对话框中的“文本”框
中输入正确的条件表达式。注意:规则中不能引用
表中的数据字段名以及别的数据对象。在条件表达
式中包含一个局部变量,该变量必须以 @开始。
? 3、输入完成后,单击“规则属性”对话框中“绑
定列”按钮,这时将弹出“将规则绑定到列”对话
框。
43
? 4,在“表”下拉列表中选择表 employee,
然后在“未绑定的列”列表中选择字段
“职位”,单击“添加”按钮,此时在
“绑定列”列表中添加了“职位字段”
? 5、设置完绑定字段后,单击“确定”按
钮关闭“将规则绑定到列”对话框,然
后再单击“确定”按钮关闭“规则属性”
对话框。
44
在 T-SQL中设置规则
? 句法如下,
? Create rule rule_name as condition_expression
? 其中,rule_name,指定新规则的名称。
? Condition_expression,定义规则的条件表达式。
规则创建后,就执行 sp_bindrule来将规则绑定到字
段或用户定义数据类型。执行该过程的句法如下,
? Exec sp_bindrule [@rulename=]’rule_name’,
? [@objname=]’object_name’
? 其中,[@rulename=]’rule_name’由 create语句创
建的规则名称
? [@objname=]’object_name’规则将要绑定到的数
据表和字段或是用户定义的数据类型。
45
? 例:创建一个数据表 employees,包含 3个字段, 员工编号,,
,员工姓名, 和, 工资,,要求将字段, 员工编号, 设置为
主键,创建一个规则,规则名为 ru_salary,将该规则绑定
到表 employees的字段, 工资, 上,限定该字段的值为
1000~ 20000之间 。
? Create table employees (
? 员工编号 int not null primary key,
? 员工姓名 char(20)
? 工资 int not null )
? Create rule ru_salary
? As @salary>=1000 and @salary<=20000
? Go
? Exec sp_bindrule ‘ru_alary’,‘ employees.工资 ’
? go
46
默认值
? 默认值可以帮助处理不包含全部数据表
字段的 insert操作。若在插入记录时没有
指定字段的值,则默认值将指定字段中
所使用的值。
? 默认值的使用与规则类似,首先需要创
建一个默认值,然后将默认值与特定的
表字段或用户自定义数据类型进行绑定。
47
用企业管理器设置默认值
? 步骤如下,
? 1、在企业管理器中展开 employee表所在的数据库
节点,然后选中该数据库节点下一级菜单中的
“默认”节点,并单击鼠标右键,在弹出对话框
中选择菜单命令“新建默认”。
? 2、在“名称”文本框中输入默认名,在“值”文
本框中输入默认取值。
? 3、输入完成后,单击对话框中“绑定列”按钮,
这时弹出“将默认值绑定到列”对话框。
? 4、选择表 employee,添加字段“职位”到“绑定
列”列表中。
? 5、单击“确定”按钮关闭“将默认绑定到列”对
话框,然后再单击“确定”按钮关闭“默认属性”
对话框。
48
在 T-SQL中设置默认值
? 语法为,
? Create DEFAULT default As constant_expression
? 其中,default是默认值的名称。
? Constrant_expression为只包含常量值的表达式,该
表达式中不能包含任何字段或其它数据库对象的名称。
? 创建默认值后,可以使用 sp_bindefault将其绑定到字
段或用户定义数据类型。执行该操作的 sp_bindefault
句法为,Sp_bindefault [@defname=]’default’,
? [@objname=]’object_name’
? 其中,[@defname=]’default’由 create default语句
创建的默认值名称。
? [@objname=]’object_name’,默认值将要绑定到的数据
表和字段的名称或用户定义的数据类型。
49
? 例如:创建规则。将上例中的“工资”字
段的默认值设置为 1000,规则为 de_salary,
? Create default de_alary as 1000
? Go
? Exec sp_bindefault ‘de_salary’,
? ‘ employees.工资’
50
在企业管理器中修改表
? 重新命名
? 修改数据表结构
? 修改表属性
51
重新命名
? 步骤如下,
? 1、在企业管理器中展开重新命名的表。
? 2、在希望重新命名的表上单击鼠标右键,
在弹出菜单上选择命令“重命名”,输
入新的表名称。
? 3、按回车键,在弹出的对话框内单击
“确定”按钮。
52
修改数据表结构
? 打开希望修改表结构的表设计窗口,可以执行
下列操作,
? 1、修改数据表中字段的定义:包括重新设置字
段名、字段类型、长度、允许空、描述、默认
值、精度、小数位数、标识、公式、排序规则
等字段属性,也可以设置和取消一个字段的主
键约束。
? 2、插入新字段:在末尾添加和在字段中间插入
新字段。
? 3、调整字段顺序
? 4、删除现有字段。
53
修改表属性
? 在表设计窗口中单击“表和索引属性”按钮,
打开表属性窗口,在该窗口中可以设置与整
个表相关的重要属性。
? 属性窗口包含 4个标签,分别是“表”、关
系、索引 /键和 check约束选项。下面是表标
签中的选项设置。
54
? 选定的表:显示选定的表明。如果在关系图中选定的表
不止一个,则只有第一个选定表的名称是可见的。可以
展开列表选择其它要检查或修改属性的表。
? 所有者:显示表所有者的名称。所有者名称是 SQL
Server角色或 SQL Server用户。
? 表的标识列:显示由 SQL Server用作表标识列的字段。
若要更改标识列,从下拉列表中选择即可。
? 表的 ROWGUID( 行标识符)列:显示由 SQL Server
用作表的 ROWGUID列的字段。若要更改,可从下拉列
表中选择。
? 表文件组:指定数据表的数据存放的文件组。默认文件
组最初是主文件组。
? 文本文件组:选择要在其中存储选定表的 TEXT和
image类型的字段的文件组名。默认文件组是主文件组。
? 描述:可以在该字段中输入有关数据表的一些说明文字。
55
在 T-SQL中修改表
? 修改字段定义
? 添加字段
? 删除字段
? 添加约束
? 删除约束
56
修改字段定义
? 格式,ALTER TABLE table
ALTER COLUMN column_name
new_data_type [(precision[,scale])]
[null|not null]
其中,table,需要修改的数据表名称
Column_name:需要修改的字段名称
New_data_type,修改后将要使用的新的数据类
型
Precision:字段将要使用的新的精度定义。
Scale:字段将要使用的新的小数位数。
57
? 例:创建一个名为 project的表,该表包含两个
字段“项目名称”和“项目编号”,将字段
“项目名称”从原来的数据类型 char(20)更改为
varchar(25),再将原来的不可为空属性更改为
可以为空。
? Create table project
? ( 项目编号 int primary key,
? 项目名称 char(20) not null)
? --使用 sp_help查看数据表的定义
? Exec sp_help project
? Alter table project
? Alter column 项目名称 varchar(25) null
? Exec sp_help project
? go
58
添加字段
? 格式,ALTER TABLE table
ADD {[column_definition] |
[column_name as
computed_column_expression]}
其中,table,需要添加字段的数据表名称
Column_definition,有关添加的字段的定义
Column_name,添加字段的名称
Computed_column_expression,计算字段表达
式。
59
? 例:向刚创建的 project表中添加 3个字段,
分别为“项目负责人”、“项目难度级
别,和“预计工期,。要求字段“预计
工期,的取值为字段“项目难度级别,
的值乘以 20。
? Alter table project
? Add 项目负责人 varchar(15),
? 项目难度级别 int default 1,
? 预计工期 as 项目难度级别 *20
? Exec sp_help project
60
删除字段
? 格式,ALTER TABLE table
DROP COLUMN column_name[,…n]
其中,table需要删除字段的数据表名称
Column_name,需要删除的字段名称
例:删除上面例子中的数据表 project中的字
段“项目负责人”和“预计工期”
Alter table project
Drop column 项目负责人,预计工期
61
添加约束
? 利用 alter table命令中的 add constraint 子句,可以添
加一个或多个约束。语法如下,
? Alter TABLE table
? [with check|with nocheck]
? Add constraint constraint_name
? Constraint_definition[,…n]
? 其中,table,需要添加约束的数据表名称。
? constraint_name,需要添加的约束名称。
? Constraint_definition,添加约束的定义。
? with check|with nocheck,若选择前者,表示将使用
新建的数据表约束对数据表中原有的数据进行检查;
若选择后者,表示新建的数据表约束追溯应用于数
据表中原有的记录。默认值为前者。
62
? 例:使用数据库 company,在该数据库中创建 2
个数据表。一个是数据表 employee,该数据表
中包含两个字段,“员工编号”和“员工姓
名”。另一个数据表 project,包含 3个字段,分
别是“项目编号”、“项目负责人”和“项目
难度系数”,然后再使用 alter table add
constraint 语句向数据表中添加 3个约束,1、主
键约束:将数据表 project中的字段“项目编号”
设置为主键。
? 2、外键约束:将数据表 project中的字段“项目
负责人”设置为外键。其参照字段是数据表
employees中的字段“员工编号”
? 3、核查约束:为数据表 project中的字段“项目
难度系数”创建核查约束,使它的取值范围在
0~ 5之间。
63
? Use company
? --创建数据表 employee
? Create table employee
? ( 员工编号 int primary key,
? 员工姓名 char(20) unique )
? Go
? --创建数据表 project
? Create table project
? ( 项目编号 int not null,
? 项目负责人 Char(20),
? 项目难度级别 int)
? go
64
? --向 project数据表中添加约束
? Alter table project
? Add constraint pk_pno
? Primary key(项目编号 ),
? Constraint fk_pm
? Foreign key(项目负责人 )
? Reference employee(员工编号 ),
? Constraint ck_p1
? Check (项目难度级别 >=1 and 项目难度
级别 <=5)
? go
65
? 利用 alter table命令中的 drop constraint 子句,
可以删除一个或多个约束。语法如下,
? Alter TABLE table
? drop constraint constraint_name[,…n]
? 其中,table,需要删除约束的数据表名称。
? constraint_name,需要删除的约束名称。
? 例如:删除上例中创建的外键约束和核查约束。
? Alter table project
? Drop constraint fk_pm,ck_p1
删除约束
66
删除表
? 步骤如下,
? 1、选择希望删除的数据表所在的数据库节点。
? 2、选择该库下的表节点,并选中希望删除的表,
单击鼠标右键,在弹出菜单中选择命令“删
除”,此时弹出“除去对象”对话框,单击按
钮“全部除去”,完成数据表的删除。
? 注意:如果希望删除的表是外键参照的数据表,
除非先删除该数据表的关联性,否则系统将拒
绝删除该表。另外,删除数据表时要非常小心,
以免误删除。
67
在 T-SQL中删除表
? 利用 DROP TABLE语句删除表 。 DROP TABLE
语句的语法形式如下,
? DROP TABLE table_name
? 其中,table是将要删除的数据表名称 。
? 注意:若删除当前数据库中的数据表, 只需直接
输入数据表名 。 若希望删除另外一个数据库中的
数据表, 则需要指定数据库名称和所有者 。
? 只有表的拥有者才有权利删除该数据库, 而且不
能使用 drop table语句删除系统数据表 。