mySQL自学笔记
使用MySQL 5.5以及MySQL自带命令客户端
索引
索引是对数据库表中一列或者多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,其作用是可以加快查询速度,缺点是会降低增、删、改的速度
举一个例子:有一张表,上面有20列,13列上存在索引,要导入1000W行数据,该如何快速导入?
- 将空表的索引全部删除
- 导入数据
- 导入数据结束后,集中建立索引
创建索引的原则:
- 不要过度索引
- 在where条件最为频繁的列上面添加索引
- 尽量索引散列值,过于集中的值添加索引意义不大
索引类型:
- 普通索引:index,作用是加快查询速度
- 唯一索引:unique,要求行上的值是不能重复的
- 主键索引:primary key,主键是不能重复的
- 主键一定是唯一的,但是唯一索引不一定是主键索引
- 一张表上面可以有一个或多个唯一索引,但是只能有一个主键
- 全文索引:fulltext
索引的一些基本操作:
查看一张表上面的全部索引:
show index from tableName; # 如果想要竖着显示,可以在语句最后加一个`\G` show index from tableName \G;
建立索引:可以分为两种
建立普通、唯一、全文索引:
alter table tableName add index/unique/fulltext [indexName] (columnName);
建立主键索引
“` MySQL
alter table tableName add primary key (columnName); // 这里不加索引名词是因为主键只有一个
删除索引:
- 删除非主键索引:
alter table tableName drop index indexName;
- 删除主键索引:
alter table tableName drop primary key;
- 删除非主键索引:
全文索引中有一个固定的句式用法:
“` MySQL
match (全文索引名) against (‘key_word’);* ``` MySQL select * from table1 where match (index1) against ('key_word');
全文索引的停止词:
全文索引不针对非常频繁的词作索引,比如:this
、is
、you
、my
等词汇- 全文索引对中文的使用情况:
在MySQL默认情况下,全文索引对中文的意义不是很大,因为中文无法像英文一样使用空格以及标点符号拆分单词,进而对单词进行索引!
存储过程
存储过程的概念类似于函数,就是将一段代码封装起来,当要执行该段代码时,可以通过调用(call)该存储过程来实现。在存储过程中,可以使用if/else
、case
、while
等控制结构
存储过程和函数区别
- 名称不一样
- 存储过程没有函数值,但是函数有返回值
存储过程一些基本操作
- 查看存储过程:
show procedure status;
、show procedure status \G; //横着显示
- 删除存储过程:
drop procedure pro_Name;
- 调用存储过程:
call pro_Name([parameters...]);
- 创建存储过程:
MySQL
create procedure pro_Name([paremeters...])
begin
SQL语句
end;
- 可以使用
delimeter
来声明新的结束符 - 示例:
MySQL
create procedure pro1()
begin
select * from g;
end$
MySQL
Create procedure pro2(n int)
Begin
Select * from g where num > n;
End$
//调用时可用代码`call pro2(3);`
MySQL
Create procedure pro3(n int,j char(1))
Begin
If j = ’zqh’then
Select * from g where num > n;
Else
Select * from g where num < n;
End if;
End$
//调用时可以使用代码`call pro3(13, 'zqh');`
MySQL
Create procedure p3(n int,j char(1))
Begin
If j = ’h’then
Select * from g where num > n;
Else
Select * from g where num < n;
End if;
End$
//调用时可以使用代码`call pro(100);`