索引&视图&导入/导出
* 本博客涉及到的数据为bjpowernode.sql,SQL文见MySQL入门(9)文末。
* 该数据有三张表,分别是部门表dept(deptno部门编号、dname部门名称、loc位置)、
员工表emp(empno工号、ename员工姓名、job职位、mgr直属领导工号、
hiredate入职日期、sal月薪、comm补贴、deptno部门编号)、
薪水等级表salgrade(grade等级、losal区间下限、hisal区间上限)
一、索引
1、什么是索引?
-索引对应的英语单词:index
-索引相当于一本字典的目录,索引的作用是为了提高程序的查询效率
2、主键自动添加索引,所以能够通过主键查询,尽量通过主键查询,效率更好。
3、索引和表相同,都是一个对象,表时存储在硬盘文件中的,那么索引是表的一部分,索引也是存储的硬盘文件中的
4、在MYSQL数据管理系统中,对表中记录进行检索的时候,通常包括几种检索方式
-第一种方式:全表扫描【效率较低】
假设emp员工表select * from emp where ename=’KING’;
若ename上没有添加索引,那么在通过ename字段过滤数据的时候,那么ename字段将从头开始扫描
假设dept员工表 select * from dept where dname=’accounting’;
若dname上没有添加索引,那么在通过dname字段过滤数据的时候,那么dname字段将从头开始扫描
- 第二种方式:通过索引进行检索【提高查询效率】
5、一张表中有多个字段,每个字段都可以添加索引
6、什么样的条件下适合给表中的某个字段添加索引?
-该字段数据量庞大
-该字段很少进行DML操作【DML操作很多的话,索引也是需要不断维护,效率反而降低】
-该字段经常出现在where条件中
7、怎么创建索引?
createindex dept_dname_index on dept(dname);
createunqiue index dept_dname_index on dept(dname);//添加unique表示dept表中的dname字段添加一个唯一性约束
8、怎么删除索引?
dropindex dept_dname_index on dept;
二、视图
可以隐藏表的细节(如字段名,如给某客户开发软件,而他们不想把数据暴露出来,只会告诉业务,此时他们便可以提供视图)
create view a6view as 后面只能用DQL
mysql> select * from a6;
+--------+-------------+
| deptno | asal |
+--------+-------------+
| 10 | 2916.666667 |
| 20 | 2175.000000 |
| 30 | 1566.666667 |
+--------+-------------+
mysql> create table a66 as select *from a6;
mysql> select * from a66;
+--------+-------------+
| deptno | asal |
+--------+-------------+
| 10 | 2916.666667 |
| 20 | 2175.000000 |
| 30 | 1566.666667 |
+--------+-------------+
mysql> create view a6view as select* from a6;【创建视图】
Query OK, 0 rows affected (0.11 sec)
mysql> select * from a6view;
+--------+-------------+
| deptno | asal |
+--------+-------------+
| 10 | 2916.666667 |
| 20 | 2175.000000 |
| 30 | 1566.666667 |
+--------+-------------+
mysql> delect from a66;
Query OK, 3 rows affected (0.01 sec)
mysql> select * from a6;
+--------+-------------+
| deptno | asal |
+--------+-------------+
| 10 | 2916.666667 |
| 20 | 2175.000000 |
| 30 | 1566.666667 |
+--------+-------------+
mysql> delete from a6view;【删除视图也会删除原表】
Query OK, 3 rows affected (0.01 sec)
mysql> select * from a6;
Empty set (0.00 sec)
可以通过对视图的增删改从而影响这个视图所对应记录的内容
【隐藏原数据的字段名,此时知道视图的字段名是abc不知道实际含义】
mysql> create view deptview asselect deptno a,dname b,loc c from dept;
Query OK, 0 rows affected (0.04 sec)
mysql> select * from deptview;
+----+-------------+----------+
| a | b | c |
+----+-------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCHING | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+----+-------------+----------+
mysql> select deptno from deptview;
ERROR 1054 (42S22): Unknown column'deptno' in 'field list'
三、导入和导出
1、导出
导出整个数据库:
在windows的DOS窗口执行:mysqldump -uroot -p -dbjpowernode>D:bjpowenode.sql
导出指定库下的指定表格:
在windows的DOS窗口执行:mysqldump -uroot -p -d bjpowernode emp>D:emp.sql
2、导入
mysql> drop database bjpowernode;
mysql> create database bjpowernode;
mysql> use bjpowernode;
Database changed
mysql> source D:\bjpowenode.sql
mysql> show tables;
+-----------------------+
| Tables_in_bjpowernode |
+-----------------------+
| a4 |
| a44 |
| a4view |
| a5 |
| a6 |
| a66 |
| a6view |
| a7 |
| a8 |
| b |
| b2 |
| b3 |
| b7 |
| c |
| dept |
| deptview |
| emp |
| emp_bak |
| myview |
| s |
| salgrade |
| sc |
| t_user |
+-----------------------+