图6.9 更新教师表的数据
6.2 相关知识
6.2.1 创建基本表的T-SQL语句
(1)对象命名规则
表、视图、规则等都是数据库中的对象,每个数据库对象都有自己的名称。在SQL Server中对象的完整名称包括4个部分:
[[[服务器名.][数据库名].][所有者名].]对象名
在引用一个对象时可省略服务器名、数据库名和所有者名,而只使用对象名。
(2)Create Table语句
基本表的概念是指本身独立存在的表,它就是存储数据的数据库对象,是与视图这种虚表不同的。本书中若未明确说明,则均指基本表。
关系数据库中的表是由若干行、列组成的二维表。表的每列称为一个字段或列。定义表的结构就是定义表的名称以及表中每个字段(列)的名称、数据类型、数据长度以及对该列数据的约束等属性。新建表和修改表的结构都属于定义表结构的操作。
可以在图形界面下用可视化操作方法(已在任务3中学习、使用过)或使用T-SQL语句来定义表的结构。前者的特点是操作可视化、直观简便;后者要求熟悉语句,但语句可嵌入在程序中且执行效率高。
表定义的基本语句格式如下:
CREATE TABLE<表名> //基本表命名
(
<列名> //列的名称,也称字段名。同一张表中列名不得重复
<数据类型> //列(字段)的数据类型。各行在同一列的数据其类型相同
[{DEFAULT常量表达式 //预设列的默认值
|[IDENTITY[(种子,增量)]]}] //设为标识列
[列级完整性约束] //对当前列定义数据完整性约束
[,...n] //定义其他更多的列(如果有的话)
[,<表级完整性约束>] //定义表级约束
)
[ON{文件组}] //指定存放表数据的文件组
其中:
<列级约束>::=
{[NULL|NOT NULL] //允许空或非空
|[PRIMARY KEY|UNIQUE] //设为主键或唯一约束
|[CHECK(逻辑表达式)] //设置检查约束
|REFERENCES参照表[(参照列)//设为外键
|CLUSTERED|NONCLUSTERED] //建立聚集或非聚集索引
<表级约束>::=
[CONSTRAINT约束名] //给约束命名
{[{PRIMARY KEY|UNIQUE}{(列名[,...n])}]//设置为主键或唯一约束
|FOREIGN KEY(列名[,...n])REFERENCES参照表[(参照列[,...n])] //设置外键
|[CHECK(逻辑表达式)] //设置检查约束}
可将上述语法格式总结为以下简洁的形式:
CREATE TABLE<表名>
(
<列名> <数据类型>[<列约束>[,…n]]
[<表级约束>]
)
6.2.2 完整性约束
(1)SQL Server中实现完整性的途径
创建表的过程中很重要的工作就是标识列的有效值和确定如何强制列中的数据完整性。
在SQL Server中,实现完整性的途径主要是通过定义和使用数据类型、约束、标识列、规则、默认值、触发器及存储过程等。
如果在定义表的时候,定义与该表相关的完整性约束,则这些约束会与表一起存储在数据库中。当用户操作表时,DBMS就会自动检查该项操作是否违背了预先所设定的约束条件。所有违背完整性约束的操作都将会被SQL Server拒绝执行。
(2)定义基本表时可定义的表完整性
基本表上定义的完整性约束分为两种:列级完整性约束和表级完整性约束。如果某个约束是作用在两个及两个以上的列,则该约束应该定义为表级,只作用在一个列的约束可定义在列级,也可定义为表级。列级约束是指在定义一个列的字段名、数据类型、字段宽度的同时就定义对它的约束。表级约束是独立定义约束,不和任何列的定义放在一起。
SQL Server中与表结构同时定义的完整性约束如下:
1)主键(Prinmary Key)
主键约束,是实现实体完整性的约束,用于唯一地标识表的每一行。主键可以定义在表的一列或者多个列的组合。被定义为主键的列既不能取重复值、也不能取空值(NULL)。若主键是组合列则这些组合列的值整体来看也不能有重复,而组合中独立列的值可以重复。以表Course(sno,cno,score)为例,同一学号可以重复,这表示该学生选修了多门课程;同一课程号也可以重复,这表示该课程有许多学生选择;但是同一学号同一课程号只允许存在一次,这表示同一学生只能选修某一课程一次。
一旦主键值出现重复,SQL Server就会阻止并反馈信息,如图6.10所示。(注:图中使用的语句是添加记录的,任务7将详细学习和使用)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。