数据库事务
==原子性==(Atomicity); 事务是一个不可分割的单元,事务中的操作要么全部执行,要么全部不执行。
==一致性==(Consistency); 事务执行前后数据的完整性必须保持一致。
==隔离性==(Isolation); 多个用户并发访问数据库时,数据库为每一个用户开启一个事务,多个事务并发执行时,相互之间是隔离开的,互不影响。
==持久性==(Durability); 事务一旦提交,对数据库中数据的改变是永久性的。
事务的隔离级别
==读未提交==;
事务A更新了数据,但是还没提交;事务B就读取到A更新的数据,事务A回滚后,B就看不到更新的数据。
==读已提交==;
事务A更新数据并完成提交;事务B内部就可以读取到A更新的数据。
==重复读==;
事务A更新数据并完成提交;在事务B提交之前,其内部无法读取到A更新的数据,只能读取到之前的旧数据。
一个事务进行两次相同条件的查询时,后一次查询看到了上一次没有看到的行。
==串行化==;
所有事务串行执行,一个执行完成,再执行另一个。
Mysql常用存储引擎和区别
MySQL5.5之前,默认引擎是“MyISAM”;从MySQL5.5版本开始,默认引擎是“InnoDB”
InnoDB 支持事务、外键、行锁
MyISAM 支持表锁,访问快
Memory 存在内存中
myISAM和Innodb的区别是什么
InnoDB支持事务,MyISAM不支持
InnoDB支持外键,而MyISAM不支持
InnoDB存放的就是实际的数据记录,MyISAM存放的是数据记录的地址
hash索引和btree的区别
Innodb和MyISAM默认的索引是Btree索引
Memory默认的索引是Hash索引
说一下mysql中的锁
粒度:表级锁,行级锁,页级锁
级别:共享锁、排他锁
加锁方式:自动锁、显式锁
操作划分:DML锁、DDL锁
使用方式:悲观锁、乐观锁
死锁是如何造成的,怎么避免
死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去
查询是否锁表
查询进程
杀死进程id
什么是sql注入
SQL 注入是一种非常常见的数据库攻击手段,SQL 注入漏洞也是网络世界中最普遍的漏洞 之一
索引的作用和类型
索引用于快速在某一列中找到特定的值
单列索引 组合索引 全文索引 空间索引
sql优化基本原则
1.减少select *
2.使用like时避免使用%
3.null包含的列不作为索引
4.不要使用 count(id) , 而应该是 count(*)
索引失效的原因
条件中有or
like查询以%开头,索引无效
当字段类型为字符串时,条件中数据没有使用引号引用
什么情况下不建议用索引
唯一性差的字段不适合创建索引
表经常需要更新的不适合做索引
查询结果量大的时候不使用索引
数据表过大则有些字段不适合作为索引



