在数据库系统中解决问题的技术就是索引与约束。
索引用来提高数据的检索速度
约束则用来保证数据的完整性
索引
索引是建立在数据表上的,因此需要首先创建一张记录人员信息的数据表,创建SQL语句如下:
MYSQL、MSSQLServer、DB2:
CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT)
Oracle:
CREATE TABLE T_Person (FNumber VARCHAR2(20),FName VARCHAR2(20),FAge NUMBER (10))
索引是针对字段的,因此创建索引时需要指定要在哪个字段上创建索引,还可以为多个字段创建一个索引,这样还可以指定索引相关的字段列表。
创建索引的SQL语句:CREATE INDEX,语法如下:
CREATE INDEX 索引名ON 表名(字段1, 字段2,……字段n)
其中【索引名】为被创建的索引的名称,这个名称必须是唯一的;【表名】为要创建索引的表;【字段1,字段2,……字段n】为组成这个索引的字段列表,允许一到多个。
如:在T_Person表的FName字段上创建索引,索引名为idx_person_name:
CREATE INDEX idx_person_name ON T_Person(FName)
如:在T_Person 表的FName 和FAge 字段上创建索引,索引名为idx_person_nameage:
CREATE INDEX idx_person_nameage ON T_Person(FName,FAge)
索引创建后是可以被删除的,删除索引:DROP INDEX。
不同的数据库系统的DROP INDEX 语法是不同的,下面分别介绍:
MYSQL中的DROP INDEX 语法如下:
DROP INDEX 索引名ON 表名
如:来删除刚才我们创建了两个索引:
DROP INDEX idx_person_name ON T_Person;
DROP INDEX idx_person_nameage ON T_Person;
MSSQLServer 中的DROP INDEX 语法如下:
DROP INDEX 表名.索引名
如:删除刚才我们创建了两个索引:
DROP INDEX T_Person.idx_person_name;
DROP INDEX T_Person.idx_person_nameage;
Oracle和DB2中的DROP INDEX 语句不要求指定表名,只要指定索引名即可,语法如下:
DROP INDEX 索引名
如:删除刚才我们创建了两个索引:
DROP INDEX idx_person_name;
DROP INDEX idx_person_nameage;
约束
使用CREATE TABLE语句创建数据表的时候,通过定义一个字段的类型,我们规范了一个字段所能存储的数据类型,但是在有的情况下这种类型的约束是远远不够的。如:向T_Person表中加入一个用户录入数据,但录入的数据中,有一条记录中的FName字段忘记了填入数据,这就造成了一个没有名字的人员的出现,即数据库中的数据遭到了污染。
可在宿主程序中通过应用逻辑来保证数据的正确性。如:在用户点击【保存】按钮时,去校验是否录入了“人员名称”,若没有录入则提示用户“人员名称不能为空!”。
这样可保证绝大多数情况下的数据的正确性,但是在如下几种情况下仍然无法保证数据的正确性:宿主程序中存在Bug,导致不正确的数据被保存到了数据表中;有一定技术条件的用户跳过宿主程序,直接修改数据库破坏数据的正确性。因此需要数据库系统提供指定数据表中数据约束条件的机制,这样校验在数据库系统这一最终层面来完成,保证了数据万无一失的正确性,且在数据库系统中比在宿主程序中的校验更加高效。
数据库系统中主要提供了如下几种约束:
1.非空约束;
2.唯一约束;
3.CHECK 约束;
4.主键约束;
5.外键约束。
网友评论