每天一点数据库之-----Day 8 索引与约束
----转载请注明出处:coder-pig
这个SQL中的索引,前面我们也提过了,使用索引可以提高数据的检索速度,
而关于索引还是比较复杂的,一些概念,比如表组织,堆,数据,数据也,B树等,还有两种
类型的索引:"聚集索引"与"非聚集索引"等,鉴于看本文的都是一些初学者,也只是了解
下数据库的一些常用知识,这里只讲解下创建索引与删除索引,有更深层次需求的朋友
可自行百度~
索引是针对字段的,创建索引时需要指定在那个字段上创建索引,
还可以为多个字段创建一个索引,如:
CREATE INDEX idx_person_name ON T_Person(FName)
CREATE INDEX idx_person_union ON T_Person(FName,Fage,FSex)
接下来把之前创建的索引删掉,很简单:
DROP INDEX T_Person.idx_person_name;
DROP INDEX T_Person.idx_person_union;
一般我们在创建数据库表的时候,会为字段定义一个数据类型,虽然规定了一个字段
能存放的数据类型,但是确实远远不够的,例如在录入人员信息时,由于疏忽忘记填写
Name字段,结果就出现了一个没名字的记录,即数据库中的数据遭到污染,为了避免不
正确的数据保存到数据库表中,我们需要在数据库中制定一些约束条件,从而保证数据
的正确性,比如年龄不能为负数等!
就是设置某个字段不允许为空,只需在字段定义后添加:NOT NULL
比如创建一个测试表:
CREATE TABLE T_Test(FOne INTEGER NOT NULl)
INSERT INTO T_Test(FOne)VALUES(NULL);
PS:除了INSERT插入空值会失败外,UPDATE更新 = NULL也是会失败的!
就是字段中的值只能是唯一的,只需在字段定义后添加:UNIQUE
1)单字段唯一
先把前面创建的T_Test表DROP掉!接着执行下述建表语句:
CREATE TABLE T_Test(FOne INTEGER UNIQUE,FTwo VARCHAR(20))
INSERT INTO T_Test(FOne,FTwo)VALUES(1,'测试1');
INSERT INTO T_Test(FOne,FTwo)VALUES(1,'测试2');
2)复合唯一约束:
就是要多个字段同时唯一,在录入员工信息时,可能出现重名现象,比如两个叫Tom的人,但是他们是
不同部门的,这个时候可以使用符合唯一约束,只有两个相同了,才算重复记录!
这个时候就可以使用:
CONSTRAINT复合唯一约束名称 UNIQUE(部门字段,姓名字段)
当括号中的字段都相同,才算重复,即插入和更新时括号中的字段的值都相同就会报错!
至于这个约束名称你想怎么写都可以~
就是写入数据前判断字段是否符合条件,如果不满足条件,那么这个对数据库的修改不会成功!
比如下面一个简单的例子:(先把前面的表DROP掉哦!)
创表SQL:
CREATE TABLE T_Test(FOne INTEGER,FTwo INTEGER CHECK(FTwo > 0))
INSERT INTO T_Test(FOne,FTwo)VALUES(1,-1)
另一个实用的例子:是否为手机号码,即手机位数需要等于11
建表SQL:
CREATE TABLE T_Test(FOne Integer,FNum VARCHAR(20) CHECK(LEN(FNum)=11))
INSERT INTO T_Test (FOne,FNum)VALUES(1,'13765653324');
INSERT INTO T_Test (FOne,FNum)VALUES(1,'137656533245');
主键约束的重要性就不用说了,前面也介绍过了,就是在字段后添加PRIMARY KEY关键字即可!
创建时如何设置主键,这个前面说过很多遍了,就不写了,这里只演示如何为已创建的表设置主键
SQL语句如下:
ALTER TABLE T_Test ADD PRIMARY KEY(FOne)
和主键一样,在Day2创建数据库表就已经介绍了如何创建外键了!
例子:
当然和主键一样,我们可能一开始并没有位表创建外键,也是通过ALTER来为表添加外键:
ALTER TABLE 表名
ADD CONSTRAINT 外键约束名
FOREIGN KEY(列名) REFERENCES 引用外键表(列名)
最后说两句:
关于SQL中的索引与约束的知识点就介绍到这里~