发表于: 2018-04-01 22:44:23

1 574


1.今天在使用Navicat for mysql设计表时,在设置外键的时候,删除时和更新时两列有四个值可以选择:CASCADE、NO ACTION、RESTRICT、SET NULL,自己全亲自试了一遍,它们的区别如下:

CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;

SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,

所以注意在设计子表时外键不能设为not null;

RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;

NO ACTION:同 RESTRICT,也是首先先检查外键;

2.建立报名帖的相关表和结构sql语句,并且插入一条记录,如下图:

2.1.

CREATE TABLE `student` (

  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学生id',

  `name` varchar(16) NOT NULL,

  `number` varchar(4) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

2.2

CREATE TABLE `namecard` (

  `id` int(11) NOT NULL,

  `student_id` int(11) NOT NULL,

  `manifesto` varchar(100) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `student_namecard` (`student_id`),

  CONSTRAINT `student_namecard` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.根据姓名(万权林)查出这条记录,如图:

4.用sql语句删除次条记录,如下图

5.给姓名建索引

normal:表示普通索引

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

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

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

索引的方式:

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

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

6.表中哪些字段作为索引?

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

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

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

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

7.插入10条数据,查看有索引和无索引的情况下,Sql语句执行的效率

有索引的情况下的效率:

没有索引的情况下的效率:


总结:设置索引的查询速度要快




返回列表 返回列表
评论

    分享到