1¥)表相关的几个基本概念
1.数据完整性:
数据完整性是要求数据库中的数据具有准确性,
准确性是通过数据库表的设计和约束来实现的。
实现完整性,数据库需要做以下两方面工作:
检验每行数据是否符合要求。
检验每列数据是否符合要求。
实现完整性的4种约束类型(Constraint)
1¥ 实体完整性约束:
要求表中的每一行数据都反映不同的实体,不能存在相同的数据行。(例如表的主键约束)
2¥ 域完整性约束
是指给定列的输入有效性(例如检查约束)
3¥ 引用完整性约束
在输入或删除数据行时,引用完整性约束用来保持表之间已定义的关系。(例如表间主外键约束,主表、相关标、关联记录、相关记录)
当主表没有关联记录时,不能将记录添加到相关表中。
不能更改主表中的值从而导致相关表中的记录孤立
不能从主表中删除记录,但仍存在与该记录匹配的相关记录
引用完整性通过主键和外键之间的引用关系来实现
4¥ 自定义完整性约束
用来定义特定的规则
5¥ 强制引用完整性时,禁止的操作:
--(在建立表关系时,谁被引用谁就是主键表--主键表也可以拥有自己的主键--;引用的一方,表中引用来的那一列称为自己表中的一个外键。)
--(手动设置表间关系时,即不用关系图设置时,应在外键表中进行设置和相应的选择。)
当主键表(被引用)中没有关联记录时,不能将记录添加到外键表中。----添加数据
不能更改主键表(被引用)并导致外键表中的记录孤立。
----修改数据
不能在引用关系存在时,从主键表(被引用)中删除数据。
----删除数据
2.外键(Primary Key)和主键(Foreign Key)
1)为了判断表中没有重复的数据行,需要有一个列,这个列中不同
的值能够表示这一行数据属于不同的实体。
2)表中有一列或几列组合的值能用来唯一地标识表中的每一行,这
样的一列或者多列的组合叫做表的主键。
主键不允许为空
主键的列中禁止相同的数据。
一个表只能有一个主键,主键约束确保了表中行是唯一的。
如果两列或多列组合起来唯一地标识表中的每一行,则该主键也叫“组合键”。
在同一张表中,有多个列可做主键,选择时考虑以下两个原则:
最少性:指组成主键的列数最少
稳定性:指列中数据的特征,主键数据不要经常更新,理想状况下,应该永远不改变。
3)外键:
通过建立外键表指向主键表的一列或多列的“引用”关系,确保“外键表”中的某个数据项在主键表中必须存在。
对应于主键表(有主键的表)而言,外键就是本表中对应于“主键表”(被引用的表)的引用而来的那一列;
在外键表中称为外键或引用键;它的值要求与主键表的主键或者
唯一键相对应。
外键是用来强制实现“引用完整性”
创建数据库表实际就是实施不同的约束、实现完整性规则的过程
一个表可以有多个外键。
另外:小结一下各种完整性的实现(注意比较其含义和作用的不同)
实体完整性:目前所知,是通过表自身的主键实现的。
引用完整性:目前所知,是通过表间的主外键关系实现的。
域完整性:目前所知,是通过每列中的各种检查约束实现的。
2¥)建立数据库表
数据库表也分为系统表和用户表
系统表:是创建数据库的时候自动生成的,用来保存数据库自身信息
用户表:由用户创建,存储用户自定义的数据
1$ 确定列的数据类型
二进制数据类型
文本数据类型
日期和时间
数字数据
货币数据类型
Bit数据类型
另外:
Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案,它通过两字节来进行编码,使得不同语言在不同的计算机上的编码方式都是一样的,因此都能够被编译和识别。
在表设计的时候,选择数据类型经常会看到|“varchar(50)”这样的数据类型;实际上该数据类型是varchar,长度是50,并且长度是可以手动修改的。
Varchar和char数据类型的区别
如:varchar(10),当数据字符数不足10时,不用空格补齐,
只要求不超出规定长度10。
如:char(10),当数据字符数不足10时,须用空格补齐所余
位数,直到字符数为10。
带有n的数据类型的含义
如:text类型中存储的数据每个汉字占用两个字节
ntext类型中存储的数据每个汉字只占用一个字节。
可见带n数据类型主要解决汉字字符占据空间大的问题。
货币类型数据默认精确的小数点后4位
Int型数据类型默认为4位(8个二进制位)
Bit数据类型只有向表中手动输入数据时,必须填写true或false。
其他一切情况,如SQL语句控制输入数据时,须填写0或1。
2$ 确定是否允许为空
数据库的列是否为空也是一项约束。
如果该列允许为空,则在输入数据行时,这一项可以不输入。
3$ 建立主键
首先选择要建立主键的列,单击右键,选择“设置主键”
设置该列为主键后,该列上有个钥匙型图案
4$ 设置列的默认值
表的默认值设置能够定义一个值,当用户没有在某一列输入值时,则将所定义的值提供给这一列。
该功能在表设计器下方的常规选项中“默认值或绑定”中实现。
5$ 设置标识列
SQL Server提供了一个“标识列”,特意对列进行区分
标识列本身没有具体意义,只是用来区别不同的实体行
标识列的实现方式如下:
1.。如果一列的数据属于数字类型(例如整形),则可以把该列
定义为标识列。
2.。定义成标识列之后,还需要分别指定“标识种子”和“标识
递增量”,默认值都是1。
3.。定义了标识列后,在以后每次输入数据时,该列随数据行的
增加而自动增加数字,并且不会重复。
第一次的数字就是“标识种子”值
以后每次按照“标识增加量”增加数值
4.。标识列通常也被定义为主键,通常说的“自动编号”就是指
标识列的数字自动增加。
另外:该功能在表设计器中“标识规范”中实现
注意:
1% 标识列中的数据是自动生成的,不能在该列上输入数据,
2% 使用SQL语句插入数据行时,也不许给标识列指定值。
3% 设定为标识列的数据列不允许为字符型或其他,只能
int型
4% 如果删除了带有标识列的表中的数据行,再次进行插入
数据时,已经用过的标识增量就不能再用了,会在原有
基础上继续增加啊!!!!
如:删除最后两行,其标识列为4,5;
插入新的两行,新标识列不再是4,5;而是6,7。
3¥)建立表间关系
实际上就是实施引用完整性约束,建立主键表和外键表的关系。
--(在建立表关系时,谁被引用谁就是主键表--主键表也可以拥有自己的主键--;引用的一方,表中引用来的那一列称为自己表中的一个外键。)
--(手动设置表间关系时,即不用关系图设置时,应在外键表中进行设置和相应的选择。)
当主键表(被引用)中没有关联记录时,不能将记录添加到外键表中。----添加数据
不能更改主键表(被引用)并导致外键表中的记录孤立。
----修改数据
不能在引用关系存在时,从主键表中删除数据。
----删除数据
特别注意:即使外键表中没有数据,如果要删除主键表,因为主外健关系
的存在,也必须先删除外键表(或取消关系),然后再删除主
键表。
4¥)建立检查约束
检查约束也叫做CHECK约束,用于定义列中可接受的数据值或者格式。
1$ 建立步骤
在需要建立的列上点击右键,选择“CHECK约束”
需要在对话框中编写检查约束代码来实现检查约束
检查约束代码的编写(详见第三章)
另外:
经常使用“like”关键字
%的意思是任意多个字符
5¥)导入和导出数据 ?????????
把存储在数据库中的数据导出保存成文本文件或者Excel文件中,或者文本文件、Excel文件导入到数据库中。
此功能也可以实现数据库之间的数据传输。
1$ 在数据库右键菜单中选择“任务”-“导出数据”
2$ 选择要从何处取得数据,确定把数据导出到什么位置
3$ 选择是否用一条查询语句进行复制
4$ 选择表名并设置文本文件的格式
5$ 确定是否立即运行,是否保存该转换设置
6¥)删除表
如果要删除表,首先要删除表间关系(即解除引用完整性)
删除表中数据
delete from student 删除所有数据,结构和约束还在
删除数据库
drop database accp 删除整个数据库
删除表
drop table Student 删除整个表,包括所有数据、结构和约束
7¥)其他
保证身份证号码为18位的检查约束语句
len(NUM)=18 len(列名)函数,确保该列数据的长度为指定值
性别男或女
sex = ‘男’ or sex = ‘女’ SQL中的逻辑运算符:and/or/ not
执行优先级为:非、与、或
明确SQL中存在的针对域(列)的5种约束
主键约束(实体完整性,列中没有相同值)
外键约束(引用完整性,表间关系)
默认约束(单元格的默认值)
检查约束(只接受强制执行的符合条件的输入)
唯一性约束(后面讲)
on
(
name = Test_data, --逻辑名称
filename = 'd:\Test.mdf', --物理名称
size = 3, --初始大小
filegrowth = 1, --增长率
)
log on
(
name = Test_ldf, --逻辑名称
filename = 'd:\Test.ldf', --物理名称
size = 1, -- 初始大小
filegrowth = 1 --增长率
)