数据库的三范式
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
SQL关键字及执行顺序
关键字:select、from、join、on、where、group by、having、order by、distinct
执行顺序 from > join > on > where > group by > having > select > distinct > order by
UNION/ALL、EXCEPT/ALL和INTERSECT/ALL
UNION/ALL:组合多个结果表,并消去表中重复行,和ALL一起使用时,不消除重复行。
EXCEPT/ALL:在table1中但不在table2中的行并消除重复行,和ALL一起使用时,不消除重复行。
INTERSECT/ALL:包括table1和table2中都有的行并消除重复行,和ALL一起使用时,不消除重复行。
内连接、外连接、笛卡儿积(交叉连接)
内连接:结果仅包含符合连接条件的两表中的行
交叉连接:返回左表中所有行与右表中所有行的组合,也称笛卡尔积。
VARCHAE和CHAR的区别
VARCHAE:指定最大长度,但该长度可变,即如果数据的实际长度比设定长度短,那么它将按照实际长度储存,而不占用剩余的空间。 适用于非固定长度的字段,如姓名、城市名等。
DROP,DELETE与TRUNCATE的区别
DROP直接删掉表 。
DELETE删除表中数据,可以加WHERE字句。
数据库事务(ACID)
原子性(Atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作。
持久性(Durability)一旦事务提交,则其所做的修改会永久保存到数据库。
数据库的乐观锁和悲观锁
即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来 实现。 读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提 交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据 版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据
脏读、虚读和不可重复读
脏读:一个事务读取到了另外一个事务没有提交的数据;(修改的数据还未提交就被另一个事务使用这个数据)
虚读:同一事务中,用同样的操作读取两次,得到的记录数不相同;(两次相同的操作之间,另一个事务对数据进行了新增或删除)
MySQL中的四种事务隔离级别
序列化 (Serializable):可避免脏读、不可重复读、幻读的发生。
读未提交 (Read uncommitted):最低级别,任何情况都无法保证。
MVCC(多版本并发控制)
MVCC最大的好处:读不加锁,读写不冲突。
2.当MVCC数据库更新一条数据时,不会直接重写原始的数据,而是修改新创建的数据副本。因此会有多个版本的数据被保存下来。每个事务看到的数据版本依赖于隔离级别的实现。MVCC里最通用的隔离级别的实现就是快照隔离。在快照隔离的情况下,事务只会获取到数据的在事务开始前的状态。
数据库引擎InnoDB和InnoDB
InnoDB | InnoDB | |
事物支持 | 不支持 | 支持 |
锁的粒度 | 表锁 | 行锁 |
存储容量 | 无上限 | 64TB |
哈希索引 | 不支持 | 支持 |
全文索引 | 支持 | 以前不支持,现在支持 |
外 键 | 不支持 | 支持 |
InnoDB表的数据文件和索引文件是自动分开的;InnoDB的数据和索引是存储在同一个表空间里面,但可以有多个文件组成。
为什么InnoDB会比InnoDB的查询速度快
3.InnoDB还需要维护MVCC一致
XSS、SQL和CSRF攻击
防止方法:使用post代替get,因为post不会被缓存;每次清除掉cookie。
MYSQL主从复制
由于内容所占篇幅较大,具体内容请移至另一篇《MYSQL主从复制》

微信扫码查看本文
发表评论