【数据库】MySQL数据库(三)

一、MySQL当中的索引:

数组当中我们见过索引;它的好处就是能够快速的通过下标、索引将一个信息查到;或者说
能够快速的定位到一个信息;

1.MySQL中的索引是什么?

它是将我们表中具有索引的那个字段,单独的存储到了一张表之中(MyISAM存储引擎),
当我们再次查询表中的数据时,如果你搜索的条件,是具有索引的那个字段,这会,它
不再遍历表中的所有信息了,而是去索引表中,快速的定位到你要搜索的那条数据,
它有一个指针是指向我们数据表中的源信息的,由此一来,就可以让我们能快速的从
一个具有庞大数量级的数据库中准确的快速的取出某条信息;

2.MySQL中(MyISAM存储引擎)存储表的方式;

1. .frm 数据表的结构

2. .MYD 数据表的数据

3. .MYI 数据表中的索引字段

3.MySQL当中的索引,有哪几种呢?

索引,在我们定义之后,不用刻意的去使用,当我们在查询表中具有索引的字段的时候
索引会自动生效;

1> 普通索引(index)(MUL代表普通索引)
特点:没有任何限制,当我们定义了普通索引之后,直接搜索数据即可使用它

① 在创建表的时候,定义一个普通索引
create tabel test1(
id int unsigned not null,
name varchar(32) not null,
sex enum('m','w') not null default 'w',
age tinyint not null default 18,
index id(id) 索引类型 索引名(字段名)
);

② 在建表之后,给某个字段添加普通索引
create index id on test1(id);
create 索引类型 索引名 on 表名(字段名);

③ 删除一个普通索引的方法
drop index id on test1;
drop 索引类型 索引名 on 表名;

2> 唯一索引(unique)(UNI代表唯一索引)
特点:具有唯一索引的字段,它的值只能出现一次,出现重复的值则会报错!
同时,一个表中可以有多个字段添加唯一索引

① 在建表时创建唯一索引的方法一
create table test1(
id int unsigned not null,
name varchar(32) not null,
sex enum('w','m') not null default 'm',
age tinyint not null default 18,
unique index name(name) //索引类型 索引名(字段名)
);

② 在建表时创建唯一索引的方法二
create table test1(
id int unsigned not null,
name varchar(32) not null unique, //直接给字段添加唯一索引
sex enum('w','m') not null default 'w',
age tinyint not null default 18
);

③ 在建表之后添加一个唯一索引
create unique index id on test1(id);
create 索引类型 索引名 on 表名(字段名);

④ 删除一个表中的唯一索引的方法
drop index id on test1;
drop 索引类型 索引名 on 表名;

3> 主键索引(primary key)
特点:它的唯一索引基本上使用方法以及特性一致,唯一的区别是,唯一索引在
一个表中可以多次定义、主键索引只能定义一次,而且主键索引一般我们
会添加到id字段当中

① 建表时创建一个主键索引的方法
create table test1(
id int unsigned not null auto_increment primary key, //添加主键
name varchar(32) not null,
sex enum('w','m') not null default 'm',
age tinyint not null default 18
);

② 建表之后,添加一个主键索引的方法

1.alter table test1 change id id int unsigned not null auto_increment primary key;
alter table 表名 change 字段原名 字段新名 类型 约束条件……;

2.alter table test1 modify id int unsigned not null auto_increment priamry key;
alter table 表名 modify 字段名 类型 约束条件……;

③ 删除主键索引的方法

因为主键索引比较特殊,所以我们在删除主键索引时,必须先来查看表结构,看表中
具有主键索引的那个字段,是否同时拥有 auto_increment 这个约束条件,如果有,
先删除 auto_increment 这个约束条件,之后才能删除主键索引

1.先查看表结构,查看是否拥有 auto_increment 关键字
desc 表名;

2.如果有 auto_increment 关键字,则需要先删除该关键字
alter table test1 modify id int unsigned not null;
alter table 表名 modify 字段名 字段类型 约束条件;

3.删除主键索引
alter table test1 drop primary key;
alter table 表名 drop 主键索引;

4> 全文索引

二、存储引擎(了解):

事务处理:有时,当你执行一个操作的时候,断电可能会导致一些不必要的麻烦,就比如
电子转账操作,如果说此时断电,所有的事务操作都会有一个回滚的效果,恢复到上一次
断点存储的位置,避免出现其他的问题

1.MyISAM存储引擎
对于我们一个表的操作,如果是查询比较频繁的表,我们使用MyISAM的存储引擎来
进行存储,因为它不支持事务操作

2.InnoDB存储引擎
因为这种存储引擎它支持事务的操作,对于一个表的增、删、改操作比较频繁,就需要
我们的表支持事务处理,由此一来,就大大降低了表的查询速度。

3.选择什么样的存储引擎,关键在于你的项目各种功能所需要的表的不同,去选择一个
更合适的存储引擎

4.如何来指定一个表的存储引擎:

create table test1(
id int unsigned not null auto_increment primary key,
name varchar(32) not null unique,
sex enum('w','m') not null default 'm'
)engine=MyISAM[InnoDB];

5.如何来查看一个表的存储引擎

show create table 表名;

三、MySQL当中的编码格式:

1.查看我们能够设置的编码格式:

show character set;

2.在MySQL服务器中的编码类型的4个级别

1> 服务器级

2> 数据库级

3> 数据表级

4> 数据字段级

3.编码级别的一个特性:

它具有一个继承的特性,当我们设置了服务器级别的编码类型之后,我们在该服务器
下所创建的所有的数据库、数据表、数据字段都是跟随服务器级别的编码类型了

4.如何来设置一个编码类型

1> 设置服务器级别的编码类型

set character_set_server = "utf8";

2> 设置数据库级别的编码类型

① 在创建一个数据库时设置默认的编码类型
create database test default charset="utf8";
create database 数据库名 默认编码类型="utf8";

② 修改一个数据库的编码类型
alter database test default charset="utf8";
alter database 数据库名 默认编码类型="utf8";

3> 设置数据表级别的编码类型

① 创建一个数据表时设置默认的编码类型
create table test(
id int unsigned not null auto_increment priamry key
)engine=MyISAM default charset="utf8";

② 修改数据表的编码类型
alter table test default charset="utf8";

4> 设置数据字段级的编码类型

① 修改一个数据字段级的编码
alter table test modify name varchar(32) character set "utf8";

5> 设置DOS命令框的编码格式
set names utf8;

四、修改表结构

1.添加表字段:
alter table test1 add name varchar(32) not null unique; //不指定位置,则默认在最后出现
alter table test1 add name varchar(32) not null unique after id; //指定在id后添加name字段
alter table test1 add name varchar(32) not null unique first; //在表的开头添加name字段

2.修改表字段:
alter table test1 modify 字段名 字段类型 约束条件……;

alter table test1 change 原字段名 新字段名 字段类型 约束条件……;

3.删除表字段:
alter table test1 drop 字段名;

4.表的重命名:
alter table test1 rename test2;

5.删除多个表的操作:
drop table 表名1,表名2,表名3……;

上一篇:RDS最佳实践(一)—如何选择你的RDS


下一篇:es6 ... 表达