实验 2 :数据库的建立和维护实验本实验需要 2 学时。
一、实验目的要求学生熟练掌握使用SQL 、Transact-SQL 和SQL Server 企业管理器建立数据库、表、修改数据库、表和删除数据库和表的操作。
二、实验内容和步骤1.创建数据库1)在企业管理器中创建数据库student_学号:要求:●数据库STUDENT_学号初始大小为10MB,最大大小为50MB,数据库自动增长,增长方式是按5%比例增长;●日志文件初始大小为2MB,最大可增长到5MB,按1MB增长;●数据库的逻辑文件名和物理文件名均采用默认值;●(分别为STUDENT_学号_data和e: \sql\data\MSSQL\STUDENT_学号.MDF)●事务日志的逻辑文件名和物理文件名也采用默认值。
●(分别为STUDENT_学号_LOG和e: \sql\data\MSSQL\STUDENT_学号_LOG.ldf)2)②使用T-SQL语句创建数据库STUDENT_学号,要求同1;Create database STUDENT_01On(name=STUDENT_01_data,filename='e:\STUDENT_01.MDF',size=10,maxsize=unlimited,filegrowth=10%)log on(name=student1_log,filename='e:\STUDENT_01.LDF',size=2,maxsize=5,filegrowth=1)2. 创建表以上面创建的数据库为例,创建表。
创建表实际上就是创建表结构,再向表中输入数据。
既可以使用企业管理器创建表,也可以用Transact-SQL 命令创建表。
(1). 使用企业管理器创建表利用企业管理器提供的图形界面来创建表,步骤如下:(1)在树形目录中展开【服务器组】→【服务器】→【数据库】→【STUDENT_学号】。
(2)选择【表】,单击鼠标右键,在弹出的快捷菜单中选择【新建表...】命令, 打开设计表对话框。
(3)如图5-10所示,设计表对话框的上半部分有一个表格,在这个表格中输入列的列名、数据类型、长度(有的数据类型不需要指定长度,如datetime 类型的长度为固定值8)、是否可以为空,在允许空域中单击鼠标左键,可以切换是否允许为空值的状态,打勾说明允许为空值,空白说明不允许为空值,默认状态是允许为空值的。
(4) 图5-10所示的设计表对话框的下半部分是特定列的详细属性,包括是否是标识列、是否使用默认值等。
(5)用图5-10所示的方法逐个定义好表中的列。
(6)设置主键约束:选中要作为主键的列,单击工具条上的【设置主键】按钮,主键列的前上方将显示钥匙标记,如图5-11所示。
(7)鼠标右键单击表中的任意一行(即任意一个列的定义),在弹出的快捷菜单中选择【属性】命令,可以打开如图5-12所示的表属性对话框,在该对话框中选择表选项卡,可以指定表的属性,比如表名、所有者、表的标识列等。
图5-12中将表的名称设置为Readers , 所有者设置为dbo 。
(8)在属性对话框中选择【关系】选项卡,可以设置列上的外键约束。
选择【索引/键】选项卡,可以设置列上的索引,以及主键约束和惟一性约束。
选择【check约束】选项卡,可以设置列上的检查约束。
这些操作的详细步骤将在后面介绍。
(9)定义好所有列后,单击图5-11工具栏上的【】按钮,表就创建完成了。
图5-12 指定表的属性●●创建惟一性约束的步骤如下:(1)在如图5-12所示的属性对话框的【索引/键】选项卡中,单击【新建】按钮。
(2)在列名列表中选择要定义惟一性约束。
(3)选中【创建UNIQUE】复选框,表示创建惟一性约束。
(4)在索引名框中输入惟一性约束的名字,或接受默认的名字。
●●创建外键约束的步骤如下:(1)在图5-12所示的属性对话框的【关系】选项卡中,单击【新建】按钮。
(2)在【外键表】下拉列表框中选择要定义外健约束的表,并在其下的列表中选择表中要定义外键约束的列。
(3)在【主键表】下拉列表框中选择外键引用的表,并在其下的列表中选择表中外键引用的列。
(4)在【关系名】框中输入约束的名称,或接受默认的名称。
(5)选择【级联更新相关的字段】复选框可以指定使用级联修改。
(6)选择【级联删除相关的记录】复选框可以指定使用级联删除。
●●创建检查约束的步骤如下:(1)(1)在如图5-12所示的属性对话框的【check约束】选项卡中,单击【新建】按钮。
(2)(2)在【约束表达式】框中输入检查表达式。
(3)(3)在【约束名】框中输入约束的名称,或接受默认的名称。
(2). 使用Transact-SQL命令创建表在Transact-SQL中,使用CREATE TABLE命令创建表。
语法格式如下:CREATE TABLE[database_name.[owner].|owner.] Table_name({ <column_definition> --列定义|column_name AS computed_column_expression --计算列定义|<table_contraint>} [,…n])[ON {filegroup|DEFAULT}][TEXTIMAGE_ON {filegroup|DEFAULT}]其中,更详尽的解释参见联机丛书,下面结合示例,说明主要选项的作用。
【例1】创建图书信息表Books。
CREATE TABLE books(编号 char(15) CONSTRAINT PK_Books PRIMARY KEY,书名 varchar(42) NULL ,作者varchar(8) NULL ,出版社 varchar(28)NULL ,定价real NULL CONSTRAINT CK_Books CHECK(定价>0))上面例子创建了一个包含5个列的books表,记录了图书的编号、书名、作者、出版社、定价等基本信息。
在编号列上定义了一个主键约束,约束命名为PK_Books;列定价上定义了检查约束,命名为CK_Books,使定价的值不能是0或负数。
【例2】创建图书借阅信息表Borrowinf。
C REATE TABLE borrowinf(读者编号 char(10) NOT NULL REFERENCES Readers(编号) ON DELETE CASCADE ,图书编号char (15) NOT NULLFOREIGN KEY (图书编号) REFERENCES Books(编号) ON DELETE NO ACTION,借期 datetime NULL DEFAULT (getdate()) ,还期 datetime NULL)上面例子创建了一个包含5个列的borrowinf表,记录了读者借阅图书的情况,包含读者编号、图书编号、借期、还期等基本信息。
列读者编号通过REFERENCE关键字定义了一个外键,它引用Readers表编号列的值。
在图书编号列上定义外键的时候使用了“FOREIGN KEY”子句,也可以象读者编号列那样不使用这一子句。
在借期列上定义了默认值,用到了系统函数getdate(),用于获得当前日期。
定义了这一默认值后,当向表中插入记录时,如果指明了借书日期,则使用该日期填充借期列,否则,为借期列上添上通过系统函数得到的当前日期。
在这个例子中ON DELETE子句特别值得注意,在有关章节将要介绍SQL Server 2000的参照完整性实现了级联修改和级联删除的功能,ON DELETE子句就是用于指定当删除表中被其他表外键引用的行时采取什么动作,ON DELETE子句有两个选项。
● NO ACTION:被其他表处键引用的行不能被删除,这是SQL Server 7.0以前版本的做法。
● CASCADE:被其他表外键引用的行可以被删除,而且其他表中通过外键引用了该行的行都将被删除,读者编号列上的外键引用了readers表的编号列,ON DELETE子句的值为CASCADE,所以在readers表中删除一个读者记录时,如果这个读者在Borrowinf表中已有借阅记录,则borrowinf表中的这些记录也都将一同被删除。
图书编号列上的外键引用了books表的编号列,ON DELETE子句的值为NO ACTION,这说明在books表中删除一个图书记录时,如果在borrowinf表中已有该书的借阅记录,则这一删除操作不能被执行。
【例3】创建读者信息表readers。
CREATE TABLE readers(编号char (10) NOT NULL PRIMARY KEY,姓名char (8) NULL ,读者类型 int NULL ,限借阅数量 int NULL ,借阅期限 int NULL )上面例子创建了一个包含5个列的readers表,用来记录读者的信息,包含编号、姓名、读者类型、限借阅数量、借阅期限等基本信息,主键是编号。
3 修改表表创建后,难免要对其进行修改。
可以使用ALTER TABLE 语句或企业管理器进行表的修改。
使用企业管理器修改表,可以用鼠标右键单击要修改的表,在弹出的快捷菜单中选择【设计表】命令,将弹出入图5-10所示的设计对话框,此时可以与新建表时一样,向表中加入列、从表中删除列或修改列的属性,修改完毕后单击【保存】按扭即可。
使用属性对话框可以修改检查、外键或主键约束及索引等。
这里重点介绍使用ALTER TABLE语句来对表进行修改。
1)ALTER TABLE命令格式使用ALTER TABLE命令修改表,其语法格式如下:ALTER TABLE table_name{ [ ALTER COLUMN column_name{new_data_type [ ( precision [, scale ] ) ][ NULL | NOT NULL ]| {ADD | DROP } ROWGUIDCOL }]| ADD{ [ < column_definition > ]| column_name AS computed_column_expression} [ ,...n ]| [ WITH CHECK | WITH NOCHECK ] ADD{ < table_constraint > } [ ,...n ]| DROP{ [ CONSTRAINT ] constraint_name| COLUMN column} [ ,...n ]| { CHECK | NOCHECK } CONSTRAINT{ ALL | constraint_name [ ,...n ] }| { ENABLE | DISABLE } TRIGGER{ ALL | trigger_name [ ,...n ] }}下面结合要修改的内容,具体使用讲解。