navicat中设计表时,索引,外键,触发器的创建和作用

时间:2024-04-07 11:25:58

navicat 为表添加索引

分析常用的查询场景,为字段添加索引,增加查询速度。

可以添加单列索引,可以添加联合索引。

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

右键,设计表中可以查看和添加修改索引!

索引一定要根据常用的查询场景进行添加!

写了sql语句测试了一下,确实使用了索引!

可以通过名称来判断使用了什么索引!

帮与跟,让我感受到了索引的使用方法。

navicat软件还是很不错的!

我喜欢!

再谈优化查询,每一行代码,都能优化!每一个查询都能优化!写完接口之后,可以检查一下,哪里执行效率低了。数据少还看不出来,数据量一多。不好的设计就会展现的淋漓尽致!

 

问题1:mysql索引类型normal,unique,full text的区别是什么?

normal:表示普通索引

unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

full textl: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。

总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。

索引的方式:

1、BTREE(B树(可以是多叉树))  {主流使用}

2、HASH(key,value) 这种方式对范围查询支持得不是很好

 

问题2:在实际操作过程中,应该选取表中哪些字段作为索引?

为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引,有7大原则:

1.选择唯一性索引
2.为经常需要排序、分组和联合操作的字段建立索引
3.为常作为查询条件的字段建立索引
4.限制索引的数目
5.尽量使用数据量少的索引
6.尽量使用前缀来索引
7.删除不再使用或者很少使用的索引

9. 经常更新修改的字段不要建立索引(针对mysql说,因为字段更改同时索引就要重新建立,排序,而Orcale好像是有这样的机制字段值更改了,它不立刻建立索引,排序索引,而是根据更改个数,时间段去做平衡索引这件事的)

10、不推荐在同一列建多个索引

 

使用Navicat for mysql添加外键约束

先介绍一下基本情况:

现在有两个表一张是t_blog表(博客表),一张是t_blogType表(博客类别)

现在我想把t_blog表中的typeID属性设置为外键,关联t_blogType表中的id属性。

 

        1,右键t_blog表,设计表,选择外键属性

       navicat中设计表时,索引,外键,触发器的创建和作用

 

        2,然后会出现一个设置外键的界面,一共有七列。简单介绍一下这几列的意思:

        “名”:  可以不填,你一会保存成功系统会自动生成。

        “栏位”:就是你要把哪个键设置为外键。这里选择‘typeId’

         “参考数据库”: 外键关联的数据库

         “参考表”: 关联的表 这里是t_blogType表

        “参考栏位”:关联的的字段,这里是id

        “删除时":就是删除的时候选择的动作。这里我的选择是setNull,意思就是当关联的表删除以后,t_blog->typeID字段会设置为null。

       “ 更新时”:就是更新的时候选择的动作。这里我的选择是CASCADE,意思就是当关联的表更新以后,t_blog->typeID字段会设置为级联更新。 

MySQL外键约束删除时和更新时各取值的含义

1、准备测试工作

创建2个表,分别为studnet 学生表和monitor 班长表

 

学生表有学号和姓名2个属性;

班长表有班级和学号2个属性。

班长表设置外键学号,连接主表学生表的学号属性。

并插入数据如图:

navicat中设计表时,索引,外键,触发器的创建和作用

 

navicat中设计表时,索引,外键,触发器的创建和作用

 

 

2、删除时属性,可能取值如上图为:默认(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL属性。

 

navicat中设计表时,索引,外键,触发器的创建和作用

 

 

当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

 

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

 

当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。

 

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

 

当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

navicat中设计表时,索引,外键,触发器的创建和作用

 

3、更新时属性,可能取值如上图为:默认(RESTRICT),RESTRICT,No ACTION,CASCADE,SET NULL属性。

 

当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

 

更新时同理!!!不测试了!

 

4、总结

外键的使用对于减少数据库冗余性,以及保证数据完整性和一致性有很大作用。

另外注意,如果两张表之间存在外键关系,则MySQL不能直接删除表(Drop Table),而应该先删除外键,之后才可以删除。

所以一般默认就好(RESTRICT)。

如何使用Navicat为数据库表建立触发器

方法/步骤

说一下,触发器在本表中创建,但是只能在另一张表进行操作。

示例如下:

navicat中设计表时,索引,外键,触发器的创建和作用

在user下创建的触发器。只能对user1进行操作

  1. 打开Navicat

    navicat中设计表时,索引,外键,触发器的创建和作用

  2. 打开数据表所在的数据库,右击需要新增字段的数据库表,然后点击【设计表】

    navicat中设计表时,索引,外键,触发器的创建和作用

  3. 此时进入表设计界面

    navicat中设计表时,索引,外键,触发器的创建和作用

  4. 点击【触发器】标签页,输入触发器名称,如trigger1

    navicat中设计表时,索引,外键,触发器的创建和作用

  5. 选择触发条件,before还是after

    navicat中设计表时,索引,外键,触发器的创建和作用

  6. 选择在哪些表操作事件时触发,可选插入、更新和删除

    navicat中设计表时,索引,外键,触发器的创建和作用

  7. 在下方的【定义】,输入触发时执行的sql语句,如insert into oldtable(code) values(newtable.code) ,然后点击【保存】,创建触发器就完成了

    navicat中设计表时,索引,外键,触发器的创建和作用