第 5章 SQL Server 2000数据库表的创建和管理
5,1 表的创建与修改
5,2添加数据信息
5,3对已有数据进行管理
5,4约束
5.1 表的创建与修改
5.1.1 字段的属性
5.1.2 使用 Enterprise Manager创建表
【 例 5.1】 在 demo数据库中创建一个用户信息表,表名为 users,表结构如表 5.1所示 。
返回目录字段名 数据类型 长度 允许空
Id bigint 8
Username varchar 20 √
Password varchar 20 √
Email varchar 50 √
Resume varchar 1000 √
Phone varchar 20 √
5.1.3 使用 T-SQL语句创建表
其 语法格式如下,
CREATE TABLE
[database_name.[owner.]|owner.]table_name
/*指定表名 */
({<column_definition> /*字段的定义 */
|column_name AS computed_column_expression /*
定义计算字段 */
|<table_constrain>} /*指定表的约束 */
)
[ON{filegroup|DEFAULT}] /*指定存储表的文件组 */
[TEXTIMAGE_ON{filegroup|DEFAULT}] /*指定存储 text,ntext和 image类型数据的文件组 */
以 CREATE TABLE语句 创建用户信息表 users
返回目录
5.1.4 修改表
1,使用 Enterprise Manager修改表
2,使用 ALTER TABLE命令修改表
ALTER TABLE语句的语法格式如下所示,
ALTER TABLE table_name
{[ALTER COLUMN column_name
{new_data_type[(precision[,scale])]
[NULL|NOT NULL]
]}
|ADD{[<column_definition>]}[,…n]
|DROP{[CONSTRATINT]constraint_name|COLUMN}[,…n]
返回目录
table_name:此参数是指定要修改的表的名称 。
ALTER COLUMN子句:是指定要进行修改表中的字段的属性 。 要修改的字段名由 column_name给出 。
new_data_type:为被修改字段的新的数据类型 。
Precision:此参数是指定其数据类型的有效位数 。
Scale:此参数是指定数据类型的小数位数 。
NULL|NOT NULL:此参数是指定其字段是否可接受
NULL。
ADD子句:向表中增加新字段 。 新字段的定义方法与
CREATE TABLE语句中定义字段的方法相同 。
DROP子句:从表中删除字段或约束 。 COLUMN参数中指定的是被删除的字段名,constraint_name是被删除的约束名 。
【 例 5.2】 在用户信息表 users中 增加一个新字段 sex,说明用户的性别,并将 username字段的长度由原来的 20
改为 15。
返回目录
5.1.4 修改表
3,使用 DROP TABLE命令删除表
ALTER TABLE语句的语法格式如下所示:
ALTER TABLE table_name
{[ALTER COLUMN column_name
{new_data_type[(precision[,scale])]
[NULL|NOT NULL]
]}
|ADD{[<column_definition>]}[,…n]
|DROP{[CONSTRATINT]constraint_name|COLUMN}[,…n]
返回目录
3,使用 DROP TABLE命令删除表
DROP TABLE命令可以删除一个表和表中的数据及其与表有关的所有索引,触发器,约束,许可对象 ( 与表相关的视图和存储过程,需要用 DROP VIEW 和
DROP PROCEDURE命令来删除 ) 。
DROP TABLE 命令的语法如下
DROP TABLE table_name
【 例 5.3】 删除 demo数据库中的表 users
drop table demo.dbo.users
返回目录
5.2 添加数据信息
可以通过企业管理器工具和 T-SQL语句来进行添加数据信息 。
5.2.1 通过企业管理器添加数据信息
5.2.2 使用 T-SQL语句添加表数据
INSERT语句通常有两种形式:一种是添加一条记录,另一种是添加子查询的结果;后者可以一次添加多条记录 。
INSERT语句语法格式如下所示:
INSERT [INTO]
{ table_name WITH ( <table_hint_limited> [...n])
| view_name
| rowset_function_limited }
{ [(column_list)]
{ VALUES ( { DEFAULT | NULL | expression }[,...n] )
| derived_table
| execute_statement } }
| DEFAULT VALUES
返回目录
下面说明主要参数与子句的含义:
INTO:用在 INSERT关键字和目标表之间的可选关键字 。
table_name:指目标数据表的表名 。
WITH (<table_hint_limited> [...n]):指定一个或多个目标表允许的表线索,可选 。
view_name:指定视图名称 。
rowset_function_limited:行集合函数限制 即使用 OPENQUERY
或 OPENROWSET函数
column_list:指定要添加数据的字段,字段之间用逗号隔开 。
VALUES:指定对应于 column_list的值
DEFAULT指定 SQL Server 使用为此字段指定的缺省值
Expression:指定一个常数,变量或表达式,表达式中不能含有
SELECT或 EXECUTE语句 。
derived_table:指定一个返回数据行的 SELECT语句 。
execute_statement:指定一个返回 SELECT或 READTEXT语句的
EXECUTE语句,其返回集必须与 column_list 中指定的字段一致或兼容 。
DEFAULT VALUES:让所有的字段使用缺省值作为添加数据。
返回目录
【 例 5.4】 添加数据到用户信息表 users中
use demo
insert users
(id,username,phone)
values(20033506,'zhang’,13022567899)
使用 T-SQL的 INSERT… SELECT语句来添加多条记录 。
【 例 5.5】 将留言簿数据库表 guestbook_admin中的数据添加到 guestbook_users用户信息表 。
use demo
insert guestbook_users
select username,Password
from guestbook_admin
select * from guestbook_users 返回目录
5.3.1修改数据信息
其语法如下,
UPDATE
{ table_name WITH ( <table_hint_limited> [...n])
| view_name
| rowset_function_limited }
SET
{column_name = {expression | DEFAULT | NULL}
| @variable = expression
| @variable = column = expression } [,...n]
{{[FROM {<table_source>} [,...n] ]
[WHERE <search_condition>] }
| [WHERE CURRENT OF
{ { [GLOBAL] cursor_name } | cursor_variable_name} ] }
[OPTION (<query_hint> [,...n] )]
返回目录
5.3 对已有数据进行管理
其中主要参数说明如下:
table_name:此参数是用来指定要进行修改记录的表名 。
WHERE:此参数是用来设置筛选要进行修改记录的条件式 。
SET子句:用于指定更新的方法 。
FROM:此参数是用来指定提供修改作业条件的表名 。
column_name:指定要更新数据的字段 。 IDENTITY字段不能被更新 。
expression:可以是常量,变量,表达式或返回单个值的子查询 。
DEFAULT:指定使用已经定义的缺省值作为字段的值 。
NULL:指定使用 NULL 值作为字段的值 。
@variable:事先定义的变量,用于存储表达式的值。应注意,
SET @variable = column = expression将变量和字段设定为与表达式相同的值,它与 SET @variable = column,column = expression语句不同,后者将字段的值赋给变量后再将表达式的值赋给字段。
【 例 5.6】 将 users表内的性别字段内容,都改为,男,
use demo
UPDATE users
SET sex= ’ 男 ’
where sex= ’ 女 ’
Go
【 例 5.7】 修改 users表内的所有用户的 username后缀为 user。
Use demo
update users
set username = username +user
GO
返回目录
5.3.2 删除数据信息
在 T- SQL语句中,提供了 DELETE 和 TRUNCATE TABLE命令来删除表中的数据信息 。 DELETE语句的语法如下所示:
DELETE [FROM ]
{ table_name WITH ( <table_hint_limited> [...n])
| view_name
| rowset_function_limited }
[ FROM {<table_source>} [,...n] ]
[WHERE
{ <search_condition>
| { [ CURRENT OF
{ [ GLOBAL ] cursor_name }
| cursor_variable_name } ] } ]
[OPTION (<query_hint> [,...n])]
返回目录
其中主要参数说明如下
FROM:此参数为可选选项,用于连接 DELETE关键字和要删除数据的对象名称 。
table_name:指定要删除数据的表名 。
WITH (<table_hint_limited> [...n]):指定一个或多个目标表允许的表提示 。
view_name:指定用于删除数据的视图 。
rowset_function_limited:行集合函数限制。即使用 OPENQUERY
或 OPENROWSET 函数。
FROM <table_source>:指定一个额外的 FROM子句 。
WHERE:指定限制数据删除的条件 。 如果不指定 WHERE子句,
就会删除表中的所有数据 。 在
WHERE子句中指定两种形式的删除操作:一种是搜索删除,即使用搜索条件来限定要删除的数据行。 另一种是定位删除,即使用 CURRENT OF子句来指定一个游标,删除操作会在游标的当前位置产生 定位删除,比搜索删除更精确。
返回目录
【 例 5.8】 删除 users表中 Id为 20033506的用户记录 。
use demo
DELETE
FROM users
where Id = ’20033506’
GO
【 例 5.9】 删除 users表中所有用户的信息记录 。
use demo
DELETE
FROM users
GO 返回目录
5.4 表的约束
约束 (Constraint)是 Microsoft SQL Server 提供的自动保持数据库完整性的一种方法 。 在 SQL Server中创建一个表时,有 5种约束类型:
● 主关键字约束 ( Primary Key Constraint)
● 外关键字约束 ( Foreign Key Constraint)
● 惟一性约束 ( Unique Constraint)
● 检查约束 ( Check Constraint)
● 缺省约束 ( default Constraint)
1.主关键字约束
也称主键约束,能惟一地指定一行记录 。 每一个主键字段的定义不允许为 NULL属性 。 一个表的定义只能有一个主键约束 。
定义主关键字约束的语法如下
CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
column_name1[,column_name2,…,column_name16]
返回目录
各参数说明如下:
constraint_nam:指定约束的名称 。
CLUSTERED|NONCLUSTERED:指定索引类别,CLUSTERED
为缺省值。
column_name:指定组成主关键字的字段名,主关键字最多由 16
个字段组成。
【 例 5.11】 在留言簿数据库 ( 库名为 demo) 中,创建一个留言信息表 guestbook_messages,以留言编号为主关键字 。
CREATE TABLE [dbo].[guestbook_messages] (
[id] [bigint] IDENTITY (1,1) NOT NULL,
[username] [char] (20) COLLATE Chinese_PRC_CI_AS
NULL,
[subject] [char] (100) COLLATE Chinese_PRC_CI_AS
NULL,
[content] [char] (1000) COLLATE Chinese_PRC_CI_AS
NULL,
[date] [datetime] NULL
constraint pk_ id primary key (id)
) ON [PRIMARY]
GO
返回目录
2.外关键字约束当一个表中的一个字段或多个字段的组合和其它表中的主关键字定义相同时,就可以将这些字段或字段的组合定义为外关键字 。
作用,1.在更新字段值时,其它表中有与之相关联的外关键字约束的表中的外关键字字段也将被相应地做相同的更新,
2.插入数据时,如果与之相关联的表的字段中无与插入的外关键字字段值相同的值时,系统会拒绝插入数据,定义外关键字约束的语法如下
CONSTRAINT constraint_name
FOREIGN KEY column_name1[,
column_name2,…,column_name16]
REFERENCES ref_table [ ref_column1[,ref_column2,…,
ref_column16] ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ] ]
[ NOT FOR REPLICATION ]
返回目录
各参数说明如下
REFERENCES:指定要建立关联的表的信息
ref_table:指定要建立关联的表的名称
ref_column指定要建立关联的表中的相关字段的名称
ON DELETE {CASCADE | NO ACTION}:指定在删除表中数据时,对关联表所做的相关操作。
ON UPDATE {CASCADE | NO ACTION}:指定在更新表中数据时,
对关联表所做的相关操作。
NOT FOR REPLICATION:指定字段的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用 。
【 例 5.12】 创建一个留言用户信息表 guestbook_users,与前面创建的留言信息表相关联 。
CREATE TABLE [dbo].[guestbook_users] (
[userid] [[bigint] IDENTITY (1,1) NOT NULL,
[username] [char] (20) COLLATE Chinese_PRC_CI_AS NULL,
[password] [char] (20) COLLATE Chinese_PRC_CI_AS NULL
constraint pk_userid primary key (userid),
foreign key(id) references products(id)
) ON [PRIMARY]
GO 返回目录
3,惟一性约束
惟一性约束指定一个或多个字段的组合的值具有惟一性,以防止在字段中输入重复的值 。 惟一性约束指定的字段可以有 NULL属性 。 由于主关键字值是具有惟一性的,因此主关键字字段不能再设定惟一性约束 。 惟一性约束最多由 16个字段组成,并且一个表最多可有 250个唯一性约束 。
定义惟一性约束的语法如下
CONSTRAINT constraint_name
UNIQUE [CLUSTERED | NONCLUSTERED]
column_name1[,
column_name2,…,column_name16]
返回目录
【 例 5.13】 创建一个用户信息表,其中用户的手机号码具有惟一性 。
CREATE TABLE [dbo].[users]
(
[id] [bigint] IDENTITY (1,1) NOT NULL,
[username] [varchar] (20) COLLATE
Chinese_PRC_CI_AS NULL,
[password] [varchar] (20) COLLATE
Chinese_PRC_CI_AS NULL,
[email] [varchar] (50) COLLATE Chinese_PRC_CI_AS
NULL,
[resume] [varchar] (1000) COLLATE
Chinese_PRC_CI_AS NULL,
[phone] [varchar] (20) COLLATE Chinese_PRC_CI_AS
NULL
constraint pk_id primary key (id),
constraint uk_phone unique (phone)
) ON [PRIMARY]
GO
返回目录
4.检查约束
检查约束对输入字段或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性 。 可以对每个字段设置符合检查 。
定义检查约束的语法如下
CONSTRAINT constraint_name
CHECK [NOT FOR REPLICATION]
(logical_expression)
各参数说明如下
NOT FOR REPLICATION:指定检查约束在把从其它表中复制的数据插入到表中时不发生作用 。
logical_expression:指定逻辑条件表达式,返回值为
TRUE或 FALSE。
返回目录
【 例 5.14】 在例 【 5.11】 中创建的留言信息表,其中留言字数必须不大于 1000。
CREATE TABLE [dbo].[guestbook_messages] (
[id] [bigint] IDENTITY (1,1) NOT NULL,
[username] [char] (20) COLLATE
Chinese_PRC_CI_AS NULL,
[subject] [char] (100) COLLATE
Chinese_PRC_CI_AS NULL,
[content] [char] (1000) COLLATE
Chinese_PRC_CI_AS NULL,
[date] [datetime] NULL
constraint chk_content check (content<=1000),
) ON [PRIMARY]
GO
返回目录
5,缺省约束
缺省约束通过定义字段的缺省值或使用数据库的缺省值对象绑定表的字段,来指定字段的缺省值 。 SQL
Server推荐使用缺省约束,而不使用定义缺省值的方式来指定字段的缺省值 。
定义缺省约束的语法如下
CONSTRAINT constraint_name
DEFAULT constant_expression [FOR column_name]
返回目录