- InnoDB支持事务,MyISAM不支持。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。
- MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用
- InnoDB支持外键,MyISAM不支持
- InnoDB中不保存表的行数,Myisam保存表的行数,如select count(* ) from table时,在全查询统计行数时,InnoDB需要扫描一遍整个表来计算有多少行,而Myisam直接就可以返回结果。
- 对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引
- 清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表
- InnoDB支持行锁
MVCC(Multiversion Concurrency Control) 多版本并发控制:
通过数据行的多个版本管理来实现数据库的并发控制,保存数据的历史版本,通过比较版本号决定数据是否显示出来。读取数据的时候不需要加锁可以保证事务的隔离效果。
过程:
优点:
ACID:
1.原子性(Atomicity):事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的。
2. 一致性(Consistency):数据库中的数据在事务操作前和事务处理后都必须满足约束。事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
3. 隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
4. 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
mysql索引底层结构采用的是B+树:
B树:通过将二叉树改为多路平衡查找树,解决了树过高的问题;
B+树:在B树的基础上,将非叶节点改造为不存储数据的纯索引节点,进一步降低了树的高度;此外将叶节点使用指针连接成链表,范围查询更加高效。
B+树的优点:
Innodb使用聚簇索引。
聚簇索引:树的叶节点data域保存了完整的数据记录。
非聚簇索引:将数据与索引分开存储,索引结构的叶子节点data指向了数据对应的位置,然后以data域的值为地址,读取相应数据记录。
一个表除了本身字段外还有隐藏字段。
- ROW_ID: 隐藏的行ID,用来生成默认的聚簇索引。
- DB_TRX_ID: 操作这个事务的ID,也就是最后一个对数据插入或者更新的事务-.
- DB_ROOL_PTR: 回滚指针,指向这个记录的Undo Log信息。
过程:
(1)加载驱动:
Class.forname(com.mysql.cj.driver);
(2)创建连接
final String URL="jdbc:mysql://localhost:3306/数据库名称?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"; final String USERNAME="用户名"; final String PASSWORD="密码"; Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
(3)获取PreparedStatment执行对象(Statment对象会造成“SQL注入漏洞“问题)
PreparedStatement pst= conn.prepareStatement(sql);//执行的sql语句 pst.executeUpdate();//增删改操作,无返回值 ResultSet rs = pst.executeQuery()//查找操作,有返回值
(4)关闭连接
if(rs!=null) rs.close(); if(pst!=null) st.close(); if(conn!=null) conn.close();