文章目录
- 创建于管理表
- MySQL表的基本操作
- 数据的约束条件
- 在查询时使用索引
- MySQL索引的基本知识
- 创建索引
- MySQL索引的优化
- MySQL的事件
- 事件的定义
创建于管理表
MySQL表的基本操作
创建一张表test1:
create table test1(id int,name varchar(32),age int);
查看创建表的语句:
show create table test1
查看表结构:
desc test1;
# 或 show columns from test1;
在表中添加字段:
alter table test1 add gender varchar(10) default 'M';
修改表:
alter table test1 modify gender varchar(10) default 'Female';
删除表中字段:
alter table test1 drop column gender;
删除表:
drop table test1;
数据的约束条件
“约束”是指对表中数据的一种限制条件,能够确保数据库中数据的准确性和有效性。
1.MySQL中的约束类型
主键约束、外键约束、唯一约束、检查约束、非空约束、默认值约束。
约束类型 | 关键字 | 说明 |
主键约束 | primary key | 主键是表里的一个特殊字段,这个字段能够唯一标识该表中的每条信息。 一张表只能定义一个主键,如果一个字段被定义成了主键,该列的值不允许为null,也不允许重复。 |
外键约束 | foreign key | 外键通常会和主键约束一起使用。 相关联字段中主键所在的表为主表,外键所在的表为从表。 当从表的某个字段被定义为外键时,该列上的值必须在主表中存在或为null值。 |
唯一约束 | unique | 如果一个字段被定义了唯一约束,那么该字段的值不允许重复,但允许为null。 |
检查约束 | check | MySQL提供了检查约束来指定某列可取值的范围,它通过限制输入到列中的值来强制域的完整性。 |
非空约束 | not null | 用于确保该字段的值不能为空。 |
默认约束 | default | 用于指定某列的默认值。 |
在查询时使用索引
MySQL索引的基本知识
索引是帮助MySQL高效获取数据的数据结构,索引是一种数据结构。MySQL默认的索引类型是B+树索引。
查看MySQL中的索引
show indexes from test1;
创建索引
普通索引:最基本的索引,没有任何限制,用于加速查询。
# 基于表test1创建一张新的表
create table indextable as select * from test1;
# 在新表name上创建普通索引
create index index1 on indextable(name);
唯一索引:索引的列值必须唯一,但允许有空值。
# 在表test1的主键id上创建唯一索引
create unique index index1 on testt1(id);
主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般在创建表的时候创建主键索引。
create table test1(id int auto_increment,name varchar(20),primary key(id));
组合索引:是指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。
# 在表test1的name和age上添加组合索引
alter table test1 add index index1(name,age);
全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较。全文索引跟其他索引不大相同,它更像是一个搜索引擎。全文索引需要配合“match against”操作使用,而不是“where”语句。
# 创建表的同时创建全文索引
create table test1(id int auto_increment,contents text not null,primary key(id),fulltext(contents));
哈希索引:哈希索引基于哈希算法实现,只有精确匹配索引的所有列的查询才有效。
MySQL索引的优化
使用ICP优化索引
ICP是MySQL使用索引从表中检索行数据的一种优化方式,如果where条件允许使用索引,MySQL会把这部分过滤操作放到存储引擎层,存储引擎通过索引过滤,把满足的行从表中读取出来。ICP能减少引擎层访问基表的次数和访问存储引擎的次数。
# 查看是否开启了ICP的索引优化
show variables like '%optimizer_switch%';
# ICP默认是开启的,ICP开启语句
set optimizer_switch="index_condition_pushdown=on";
使用MRR优化索引
MRR是使用优化器将随机I/O转化为顺序I/O以降低查询过程中I/O开销的一种手段。对于I/O密集型的SQL语句性能将带来极大的提升,适用于range和ref eq_ref类型的查询。
MRR的核心思想就是把普通索引对应的主键结合存储到read_rnd_buffer中,然后再读取该buffer中的主键值进行排序。
set optimizer_switch='mrr=on,mrr_cost_based=off'
使用BKA优化索引
BKA主要用于提高表join性能。它的基本思想是,当被Join的表能够使用索引时,就优先排好序,然后再去检索被Join的表。
MySQL的事件
事件的定义
事件(Event)是MySQL数据库中的时间触发器,在某一特定的时间点,Event会自动由MySQL调用从而触发相关的SQL语句或存储过程。使用MySQL的事件需要将参数“event_scheduler”设置为“ON”。