五、SQL—索引/约束①

作者: 小小一颗卤蛋 | 来源:发表于2020-04-20 18:42 被阅读0次

    在数据库系统中解决问题的技术就是索引与约束。
    索引用来提高数据的检索速度
    约束则用来保证数据的完整性

    索引

    索引是建立在数据表上的,因此需要首先创建一张记录人员信息的数据表,创建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.外键约束。

    相关文章

      网友评论

        本文标题:五、SQL—索引/约束①

        本文链接:https://www.haomeiwen.com/subject/bfuwbhtx.html