发表于: 2018-04-01 22:44:23
1 573
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语句执行的效率
有索引的情况下的效率:
没有索引的情况下的效率:
总结:设置索引的查询速度要快
评论