面向考试数据库—索引与数据完整性

在这里插入图片描述
面向考试数据库系列博客以笔者的思维脑图为主线,博文内容为笔者对导图的具体分支所作的详细阐述,本篇博文,主要内容为索引与数据完整性其中不足,望读者多加指正。

引言

 不知不觉,数据库的网课已经学到了索引的部分,赶紧总结,汇总成这篇博文笔记,不足之处,望多加指正。

索引知识点

 索引在数据库中的存在就好像书中的目录一样,存在的优点就是让“读者”可以更快更方便的找到想要的内容,但是存在其并不是多多益善的,就像书,如果把它的所有图、表、公式、生僻字……目录都在书中安排,那这个目录未免显得太过于冗长。

索引分类

  • 普通索引(index)
    没有唯一性限制
  • 唯一性索引(unique)
    有唯一性限制。
  • 主键(primary key)
    具有唯一性,每个表只有一个
  • 全文索引(fulltext)
    只能在varchar或text类型的列上创建,并且只能在myisam表中创建

索引创建

  • 通过create语句形式创建
CREATE [UNIQUE | FULLTEXT] INDEX 索引名
ON 表名(列名[(length)] [ASC | DESC],...)
  • 通过Alter语句创建
使用ALTER TABLE语句
使用ALTER TABLE语句修改表,其中也包括向表中添加索引。
语法格式如下:
   ALTER TABLE 表名
       ADD INDEX [索引名] (列名,...)           /*添加索引*/
      | ADD PRIMARY KEY [索引方式] (列名,...)  /*添加主键*/
      | ADD UNIQUE [索引名] (列名,...)   /*添加唯一性索引*/
      | ADD FULLTEXT [索引名] (列名,...)   /*添加全文索引*/
  • 在建表的同时创建
建表时建索引
语法格式:
     CREATE TABLE 表名 ( 列名, ... | [索引项])
其中,索引项语法格式如下:
       PRIMARY KEY (列名,...)                   /*主键*/
     | {INDEX | KEY} [索引名] (列名,...)       /*索引*/
     | UNIQUE [INDEX] [索引名] (列名,...)     /*唯一性索引*/
     | [FULLTEXT] [INDEX] [索引名] (列名,...)  /*全文索引*/

索引删除

  • 通过drop语句
语法格式:
           DROP INDEX索引名 ON 表名
  • 通过ALTER语句
 -  使用ALTER TABLE语句删除索引 
语法格式:
    ALTER [IGNORE] TABLE 表名
        | DROP PRIMARY KEY   	    /*删除主键*/
        | DROP INDEX 索引名		   /*删除索引*/

索引对查询的影响

 提高查询的速度,但是索引太多会降低数据增删改的速率

数据完整性约束知识点

  • 主键约束
     表中的一列或多个列的一组,其值能唯一地标志表中的每一行,不为空,在MySQL中主键唯一或没有。
  • 替代建约束
     性质与主键一样,是没有作为主键的候补键(unique)
  • 参照完整性约束
     利用外键实现的完整性约束目前只能用在InnoDB储存引擎中
  • check完整性约束
     一些专用的约束(如月份、性别)

易混淆

 主键、唯一性索引、唯一键区别
(1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除;

(2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空;

(3)相同字段序列不允许重复创建索引;

练习

 主要来之上课的实验指导的习题部分,练习作业做出省略。

(1)在列级定义主码
                
              CREATE TABLE Student
                (Sno  CHAR(9)  PRIMARY KEY,
                 Sname  CHAR(20) NOT NULL,     
                 Ssex  CHAR(2) ,
                 Sage  SMALLINT,
                 Sdept  CHAR(20));
(2)在表级定义主码
    CREATE TABLE Student
        (Sno  CHAR(9),  
         Sname  CHAR(20) NOT NULL,
         Ssex  CHAR(2) ,
         Sage  SMALLINT,
         Sdept  CHAR(20)PRIMARY KEY (Sno)
      ); 
[例2]将SC表中的Sno,Cno属性组定义为码
      CREATE TABLE SC
           (Sno   CHAR(9)  NOT NULL, 
            Cno  CHAR(4)  NOT NULL,  
            Grade    SMALLINTPRIMARY KEY (Sno,Cno)     /*只能在表级定义主码*/
          ); 
[例3]  定义SC中的参照完整性
      CREATE TABLE SC
         (Sno    CHAR(9)  NOT NULL, 
          Cno     CHAR(4)  NOT NULL,  
          Grade    SMALLINTPRIMARY KEY (Sno, Cno)/*在表级定义实体完整性*/
          FOREIGN KEY (Sno) REFERENCES Student(Sno)/*在表级定义参照完整性*/
          FOREIGN KEY (Cno) REFERENCES Course(Cno)    
          /*在表级定义参照完整性*/
      );
[例4]  显式说明参照完整性的违约处理示例

   CREATE TABLE SC
        (Sno   CHAR(9)  NOT NULL,
         Cno   CHAR(4)  NOT NULL,
         Grade  SMALLINTPRIMARY KEY(Sno,Cno), 				
         FOREIGN KEY (Sno) REFERENCES Student(Sno) 
		ON DELETE CASCADE     /*级联删除SC表中相应的元组*/
                ON UPDATE CASCADE/*级联更新SC表中相应的元组*/
         FOREIGN KEY (Cno) REFERENCES Course(Cno) 	                    
               ON DELETE NO ACTION 	
               /*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/
               ON UPDATE CASCADE   
      	/*当更新course表中的cno时,级联更新SC表中相应的元组*/
        );
[例10]  建立学生登记表Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。
    CREATE TABLE Studenttt
      (Sno  NUMERIC(6),
        CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
        Sname  varCHAR(20) not null,  
        Sage  NUMERIC(3),
        CONSTRAINT C3 CHECK (Sage < 30),
        Ssex  CHAR(2),
        CONSTRAINT C4 CHECK (Ssex IN ( '男','女')),
        CONSTRAINT StudentKey PRIMARY KEY(Sno)
      )
在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。

[例13]  修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40
可以先删除原来的约束条件,再增加新的约束条件
      ALTER TABLE Student
        DROP CONSTRAINT C1;
        ALTER TABLE Student
        ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999)ALTER TABLE Student
        DROP CONSTRAINT C3;
        ALTER TABLE Student
        ADD CONSTRAINT C3 CHECK (Sage < 40)

总结

 该处知识主要浮与理论,相关实践做的不够多,仍需要加强练习。

发布了38 篇原创文章 · 获赞 87 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Zengmeng1998/article/details/105771559