1、Mysql主要存储引擎:MyISAM,InnoDB和MEMORY
(1)MyISAM
它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
唯一支持full text search index。
支持静态(固定长度)表,动态表和压缩表这3种不同的存储格式。
(2)InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
自动增长列:对于InnoDB表,自动增长列必须是索引。如果是组合索引,也必须是组合索引的第一列,但是对于MyISAM表,自动增长列可以是组合索引的其他列,这样插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。
外键约束:MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引。
在创建索引的时候,可以指定在删除、更新父表时,对子表进行的相应操作,包括restrict、cascade、set null和no action。其中restrict和no action相同,是指限制在子表有关联的情况下,父表不能更新;casecade表示父表在更新或删除时,更新或者删除子表对应的记录;set null 则表示父表在更新或者删除的时候,子表对应的字段被set null。
当某个表被其它表创建了外键参照,那么该表对应的索引或主键被禁止删除。
可以使用set foreign_key_checks=0;临时关闭外键约束,set foreign_key_checks=1;打开约束。
(3)MEMORY
memory使用存在内存中的内容来创建表。每个MEMORY表实际对应一个磁盘文件,格式是.frm。MEMORY类型的表访问非常快,因为它到数据是放在内存中的,并且默认使用HASH索引,但是一旦服务器关闭,表中的数据就会丢失,但表还会继续存在。
默认情况下,memory数据表使用散列索引,利用这种索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了。因此,散列索引值适合使用在"="和"<=>"的操作符中,不适合使用在"<"或">"操作符中,也同样不适合用在order by字句里。如果确实要使用"<"或">"或betwen操作符,可以使用btree索引来加快速度。
create table tab_memory engine=memory select id,name,age,addr from man order by id;
create index mem_hash using hash on tab_memory(city_id);
2、创建在mysql数据库服务器实例上,一个实例上可以创建多个数据库。
3、 索引缺点:.降低更新表的速度,如对表进行insert、update和delete。
建立索引会占用磁盘空间的索引文件。
索引不超过三层,三层就需要四次IO.
索引是a+b+c,检索bc,跳过方式,依旧可以用到索引。
全文索引,只支持英文内容。
4、常用约束
主键约束:唯一,不可为空,一个表只有一个主键。当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
unique index 唯一,但是可以为空,一个表可以有多个。
在建立外键时,会自动建立索引。
5、存储过程与函数
存储程序和函数是用CREATE PROCEDURE和CREATE FUNCTION语句创建的子程序。
存储过程是集中的,无法用存储过程去实现分布式。
6、触发器
触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
// FOR EACH ROW 一条一条的进行trigger_stmt,效率很低。一般不常用触发器。