索引

作用: 大大加快查询速度
适合数值具有唯一性,并且格式具有较强的限制的列,一些字段不适合创建索引,比如性别,这个字段存在大量的重复记录无法享受索引带来的速度加成,甚至会拖累数据库,导致数据冗余和额外的 CPU 开销

创建索引

  1. ALTER TABLE 表名 ADD INDEX 索引名 (列名);
  2. CREATE INDEX 索引名 ON 表名 (列名);

**

显示索引

  1. SHOW INDEX FROM 表名字;

视图

定义: 视图是从一个或多个表中导出来的表,是一种虚拟存在的表。它就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据

注意理解视图是虚拟的表:

  • 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中
  • 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据;
  • 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变
  • 在使用视图的时候,可以把它当作一张表

创建视图

  1. CREATE VIEW 视图名(列a,列b,列c) AS SELECT 1, 2,列3 FROM 表名;

之后可以对 视图 进行和表一样的操作.

导入

  1. LOAD DATA INFILE '文件路径和文件名' INTO TABLE 表名;

查看变量路径

  1. SHOW VARIABLES LIKE '%secure%';

会显示指定的安全路径.

练习1

  1. mysql> CREATE TABLE employee( id int NOT NULL AUTO_INCREMENT, name varchar(20) NOT NULL, age int, salary int, phone varchar(14), in_dpt varchar(10), PRIMARY KEY(id));
  2. Query OK, 0 rows affected (0.02 sec)
  3. mysql> show tables;
  4. +-------------------+
  5. | Tables_in_company |
  6. +-------------------+
  7. | employee |
  8. | worker_test |
  9. +-------------------+
  10. 2 rows in set (0.00 sec)
  11. mysql> LOAD DATA INFILE '/var/lib/mysql-files/SQL6/in.txt' INTO TABLE employee;
  12. Query OK, 7 rows affected (0.00 sec)
  13. Records: 7 Deleted: 0 Skipped: 0 Warnings: 0
  14. mysql> SELECT * FROM smployee;
  15. ERROR 1146 (42S02): Table 'company.smployee' doesn't exist
  16. mysql> SELECT * FROM employee;
  17. +----+------+------+--------+--------+--------+
  18. | id | name | age | salary | phone | in_dpt |
  19. +----+------+------+--------+--------+--------+
  20. | 6 | Alex | 26 | 3000 | 123456 | dpt1 |
  21. | 7 | Ken | 27 | 3500 | 654321 | dpt1 |
  22. | 8 | Rick | 24 | 3500 | 987654 | dpt3 |
  23. | 9 | Joe | 31 | 3600 | 100129 | dpt2 |
  24. | 10 | Mike | 23 | 3400 | 110110 | dpt1 |
  25. | 11 | Jim | 35 | 3000 | 100861 | dpt4 |
  26. | 12 | Mary | 21 | 3000 | 100101 | dpt2 |
  27. +----+------+------+--------+--------+--------+
  28. 7 rows in set (0.00 sec)

导出

  1. SELECT * INTO OUTFILE '路径' FROM employee;

备份(重要!)

数据库中的数据十分重要,出于安全性考虑,在数据库的使用中,应该注意使用备份功能。

备份与导出的区别:导出的文件只是保存数据库中的数据;而备份,则是把数据库的结构,包括数据、约束、索引、视图等全部另存为一个文件。

mysqldump

  • mysqldump 是一个备份工具,因此该命令是在终端中执行的,而不是在 mysql 交互环境下

    备份整个数据库

    1. mysqldump -u root 数据库名>备份文件名

备份整个表

  1. mysqldump -u root 数据库名 表名>备份文件名;

恢复

SOURCE

在mysql中运行 source xxx.sql; (注意xxx.sql的权限得当前用户所有,否则可能出错)

新建空数据库后导入

  1. # 首先在mysql终端中创建空数据库
  2. CREATE DATABASE test;
  3. # 随后,退出mysql
  4. # 然后在终端中输入
  5. mysql -u root test < bak.sql
  6. # 最后重新登录mysql查看恢复效果