1、索引是什么:索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。就好比创建了一个目录。
2、索引的目的是:快速查询,对主键的约束行为。
3、怎么创建索引:index 索引名字(列名)
怎么在创建表之后添加索引:create index 索引名字 on 表名(列名)
添加唯一索引:create unique index 索引名字 on 表名(列名)
删除索引:drop index 索引名 on 表名(列名)
删除唯一索引:drop unique index 索引名 on 表名(列名)
4、分类都有那些?
主键索引、唯一索引、普通索引、联合索引
索引根据搜索引擎分类:hash索引、btree索引(二分叉算法)
设置不设置索引区别是什么?
不设置:从上往下依次查找(慢)
设置:生成额外索引文件,并且记录当前列表中的地址
5、创建索引的时候要知道:
创建一个索引,提高了查找效率,但是会牺牲一部分储存空间,在数据特别多的时候需要加索引、会加大存储磁盘空间的开销、有时候要设置最短索引、
自关联
1、自连结其实就是连结查询,需要两张表,只不过它的左表(主表)和右表(子表)都是自己。在做自连接查询的时候是自己链接自己,分别给主表和子表取别名,再付加条件执行。
2、视图
视图是从一个或者多个表的查询结果导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表,通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中存放的数据进行查询,与直接操作基本表相比,视图具有一下有点
假如要在虚表中插入数据,要保证虚表里面的列必须含有实表里面没有默认值的列
视图中的字段要和
视图可以对不同的用户(只对用户开放部分列)
3、事务
:可以使整个系统更加安全,保证在同一个事务中的操作具有同步性。
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
事务的四大特性ACID:原子性 、 一致性 、 隔离性、 持久性。
在进行事务操作时:
先开启事务:begin:
完成之后要提交事务/:commit
当双方的事件都出现问题是 需要回滚rollback :就是把事件还原
当进行完事务之后,如果忘记提交,系统会默认提交
注意:实务操作是一个单元,再次执行之后要重新开启事务。
外键:
什么是外键:外键是指引用另一个表中的一列或者多列,被引用的列应该具有主键约束或者唯一性约束。 外键用于建立和加强两个表数据之间的连接.
为表添加外键
ALTER TABLE 表名 ADD CONSTRAINT FK_ID(外键约束名称) foreign key(外键字段名) REFERENCES 主表(主键字段名)
也可以直接在创建变的时候添加外键 CREATE TABLE student( stu_id int NOT NULL PRIMARY KEY, stu_name varchar(32), cls_id int NOT NULL, CONSTRAINT FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键名) )
添加外键约束说明 我们建立外键是为了保证数据的完整性和一致性,如果主键中的数据被删除或者修改,从表中对应的数据怎么处理? 正确的做法当然是从表中的数据也随之改变,否则数据库中会存在很多无意义的数据,当然mysql帮我们想到了 这些,我们在建立外键时添加 ON DELETE 或则 ON UPDATE字句来告诉数据库,避免垃圾数据的产生 CREATE TABLE student( stu_id int NOT NULL PRIMARY KEY, stu_name varchar(32), cls_id int NOT NULL, CONSTRAINT FK_ID foreign key(外键字段名) REFERENCES 外表表名(主键名) ON DELETE CASCADE )
添加外键:alter table classes add constraint FK_TDID foreign key(teacherid) references teachers(id) on delete cascade;
连结查询:
select 表名.列名 from 表名 inner join 表名 on 表名.外键 = 表名.主键
查询的结果为两个表匹配到的数据,把都存在的拿出来
外联结分左连结和右连结
左连结 把inner 改为 left 把左表的数据拿出来去匹配右表的数据,对于右表不存在的数据使用null填充。
查询 any 相当于or all 相当于and union是把两个select语句连结起来,结果不去重