每种键值都对表记录有插入限制,且有各自的功能,设置在字段上面
种类:普通索引、唯一索引、主键、外键、全文索引
索引时对记录集的多个字段进行排序的方法
索引类型:Btree(二叉树)、B+tree、hash
索引优点:
确保数据唯一性
加快数据的检索速度
索引缺点:
降低了数据维护速度
需要占用物理空间
index普通索引
一个表中可以有多个index字段
字段的值允许有重复,可以赋null值
经常将查询条件作为index字段
index字段key标志是MUL
index普通索引的用法
在创建表时添加索引:create table (字段名 类型(宽度) 约束条件,index(字段名) );
在已有表中添加索引:create index 索引名 on 表名(字段名);
删除索引:drop index 索引名 on 表名;
查询索引:show index from 表名\g ;
主键primary key
一个表中只能有一个主键字段
对应的字段值不允许有重复,且不允许赋null值
如果有多个字段都作为主键,称为复合主键,必须一起创建
主键字段的key标志是PRI
通常与auto_increment连用,让字段的值自增长(i=i+1)要求字段类型是数值类型且是primary key
经常把表中能够唯一标识记录的字段设置为主键字段(记录编号字段)
在创建表时添加主键:create table (字段名 类型(宽度) 约束条件,primary key(字段名) );或 create table (字段名 类型(宽度) 约束条件 primary key );
在已有表中添加主键:alter table 表名 add primary key(字段名); 注意表中该字段不能有重复或为空的数据
在创建表时添加复合主键:create table (字段名1 类型(宽度) 约束条件,字段名2 类型(宽度) 约束条件,字段名3 类型(宽度) 约束条件,primary key(字段名1,字段名2,字段名3) );
在已有表中添加复合主键:alter table 表名 add primary key(字段名1、字段名2、字段名N);
外键foreign key
让前面表字段的值在另一个表中字段值的范围内选择
使用外键的条件
表的存储引擎必须是innodb
字段类型及宽度要一致
被参照字段必须要是索引类型的一种(primary key)
基本格式:
新键外键:
foreign key(表A的字段名)
references 表B(字段名)
on update cascade //同步更新
on delete cascade //同步删除
修改外键:
alter table 表名 drop foreign key 约束名; //约束名可通过show create table 表名;查看
mysql服务软件自带的功能程序,处理表的处理器
不同的存储引擎有不同的功能和数据存储方式。
列出可用的存储引擎类型
show engines;
设置默认存储引擎
修改配置文件/etc/my.cnf
default-storage-engine=存储引擎名称
重起服务
systemctl restart mysqld
innodb特点
表名.frm 表结构
表名.idb 表数据+表索引
支持行级锁
MYISAM特点
表名.frm 表结构
表名.myd 表数据
表名.myi 表索引
支持表级锁
不支持事务、事务回滚、外链
锁:解决并发访问冲突问题
锁类型:读锁(共享锁,发现执行select时)、写锁(互斥锁、排它锁,发现执行insert update delete时)
锁粒度:加锁时的锁范围
表级锁:给一张表加锁(范围大)myisam
行级锁:仅仅给被访问的每一行分别加锁(范围小)innodb
事务:一次访问从建立连接到断开连接整个过程
事务回滚:在执行事务时任意一步失败,会恢复所有操作
事务特性(ACID)
Atomic:原子性
事务的整个操作是一个整体,不可分割,要么全部成功,要么全部失败
consistency:一致性
事务操作的前后,表中的记录没有变化
lsolation:隔离性
事务操作是相互隔离不受影响的
durability:持久性
数据一旦提交,不可改变,永久改变表数据
注意事项
autocommit一旦开启写入数据将自动提交永久保存,即不支持回滚,可以通过show variables like "%commit%"命令查看状态
autocommit一旦关闭写入数据需要输入commit才能正式写入,在commit之前支持回滚rollback
如何选择存储引擎
查询访问多的表使用myisam存储引擎,节省系统资源,表级锁
写操作多的表使用innodb存储引擎,并发访问量大,行级锁