数据库引擎
InnoDB存储引擎:事务型数据库首选引擎,支持事务安全表(ACID),支持行锁定和外键,是MySQL默认引擎。
MyISAM存储引擎:基于ISAM存储引擎,并对其进行扩展。是在Web、数据仓库和其他应用环境下最常使用的存储引擎之一。具有较高的插入和查询速度,不支持事务。
数据库引擎的选择:
如果没有特别的需求,使用默认的Innodb即可。
MyISAM:非聚簇索引。以读写插入为主的应用程序,比如博客系统、新闻门户网站。
Innodb:聚簇索引。更新(删除)操作频率也高,或者要保证数据的完整性;并发量高处理大量数据,支持事务、行级锁和外键。比如OA自动化办公系统。
数据库事务
ACID:原子、一致、隔离、持久
事务特性 | 解释 |
---|---|
原子性(Atomicity) | 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 |
一致性(Consistency) | 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 |
隔离性(Isolation) | 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对于并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 |
持久性(Durability) | 持久性是指一个事务一旦被提交,它对数据库中的数据的改变是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。 |
数据库范式
第一范式:
第二范式:
第三范式:
一范式就是属性不可分割,二范式就是要有主键,其他字段都依赖于主键,三范式就是要消除传递依赖,消除冗余,就是各种信息只在一个地方存储,不出现在多张表中
数据库数据结构
char和varchar
char(M):M是0~255之间的整数
varchar(M):M是0~65535之间的整数
null
数据库操作语句
- auto_increamnt,需要和key一起使用
- Insert into tablename () values(),(),…();可以插入多行数据
- drop、delete与truncate的区别
三者都表示删除,但是三者有一些差别:
操作 | Delete | Truncate | Drop |
---|---|---|---|
类型 | 属于DML | 属于DDL | 属于DDL |
回滚 | 可回滚 | 不可回滚 | 不可回滚 |
删除内容 | 表结构还在,删除表的全部或者一部分数据行 | 表结构还在,删除表中的所有数据 | 从数据库中删除表,所有的数据行,索引和权限也会被删除 |
删除速度 | 删除速度慢,需要逐行删除 | 删除速度快 | 删除速度最快 |
因此,在不再需要一张表的时候,用drop;在想删除部分数据行时候,用delete;在保留表而删除所有数据的时候用truncate。
- union和union all:
union用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。
union会默认删除结果当中的重复项;
union all会显示所有结果而不会删除重复项,效率相对高一些;
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL(包含重复项) | DISTINCT(去除重复项,默认去除)]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
举例:
mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
+----+---------------+---------------------------+-------+---------+
mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name | url | country |
+----+------------+-------------------------+---------+
| 1 | QQ APP | http://im.qq.com/ | CN |
| 2 | 微博 APP | http://weibo.com/ | CN |
| 3 | 淘宝 APP | https://www.taobao.com/ | CN |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)
SELECT country FROM Websites UNION SELECT country FROM apps ORDER BY country;
查询结果:
SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;
查询结果(包含重复项):
join
group by
数据库索引
学习索引之前建议查看b树和b+树
索引定义:
索引是数据库管理中的一种排序的数据结构,相当于目录。
大部分数据库系统及文件系统都采用B-Tree(B树)或其变种B+Tree(B+树)作为索引结构。B+Tree是数据库系统实现索引的首选数据结构
索引优缺点:
优点:可以加快检索速度;可以优化提升性能;
缺点:创建和维护需要时间,对表操作也需要动态维护索引,会降低增删改的效率;占据物理空间。
索引实现原理:
MyISAM 索引实现
MyISAM 引擎使用 B+Tree 作为索引结构,叶节点的 data 域存放的是数据记录的地址。下图是 MyISAM 索引的原理图:
这里设表一共有三列,假设我们以 Col1 为主键,则图 是一个 MyISAM 表的主索引(Primary key)示意。可以看出 MyISAM 的索引文件仅仅保存数据记录的地址。
- where:
- order by:
数据库
数据库优化
数据库常见的面试笔试问题
- 查询两个数据表,select *from table1,table2;输出的结果是row(table1)*row(table2);
- 如何处理高并发问题(12306抢票、秒杀情景)