一.数据库的目的:
为了更好的让内存中的数据被保存,一个建立在硬盘的数据集合就被建立起来了:数据库
数据库的类型有:
网状结构
层次结构
关系结构
非关系结构
本文主要记载笔者对关系结构型数据库:MySQL的认知
二.操作语句:
1.DQL: 数据库的数据查询语言: select , where , group by
2.DDL: 数据库定义语言: 如 create , drop , alter
3.DML: 数据库的数据操作语言: 如 delete , update , insert
4.TPL: 数据库的事务操作语言 如:commit , rollback , savepoint等
5.DCL: 数据库控制语言,主要用于数据库用户的创建,权力的给予等 如: grant revoke
ps: 笔者认为,数据库主要难度在查询,创建, 查询难度在于多表多要求查询,创建难度在于如何创建一个好的 易查询易维护的表
三.数据库的创建:
1.库创建语法:
create database db_name ;
2.表创建语法:
create table tb_name ( id int primary key auto_increment, name varchar(11), bornDate date not null );
笔者认为,一个优秀的表应最少满足第三范式,且索引主键外键的建立要有逻辑和条理性,能便于日后的使用以及使用时尽量减少内存对硬盘IO的影响和操作时间
四:数据的操作:
1.增删改
insert into tb_name (column1,column2,column3) values (values1,values2,default); delete from tb_name where column1 = values1; update tb_name set column1 = values1 where column2 = values2;
相对而言增删改比较的简单,这里面唯一可能说难的就是where 后面的条件,但这个就是DQL的语句了 也就是查询语句
2.查询
select * from tb_name;
这只是个最最最简单的例子,笔者将在有时间的时候对此进行补充,因为笔者也不太行,笔者老菜鸡了,这篇文章只是对笔者自己的学习进行一个框架性的梳理
四:事务:
1.ACID
acid 即 原子性,一致性,隔离性,持久性
原子性: 一个事务要不然全部成功要不然全部失败
一致性: 数据库的数据在事务的前后应保持数据的一致,不会无逻辑的增添不会无逻辑的减少
隔离性: 一个事务不应对另一个正在进行的事务进行影响
持久性: 事务对数据库的影响是永久的
2.事务的使用语句:
start transaction # setAutoCommit = 0 # #数据操作语言 如:DML # commit; #如果成功 rollback; #如果失败, 还可以使用savePoint 标记一个地方,然后rollbackto 指定的地方
五:数据库的其他
MySQL 索引分类: 索引有一个最左匹配特性,所以我认为需要把特征性最大的数据往左边放,能减少匹配的时间和资源的使用
数据结构:
B+树索引 innodb使用
Hash索引
Full-Text全文索引
R-Tree索引
物理储存:
聚集索引 innodb使用
非聚集索引/辅助索引
逻辑角度:
主键
普通
多列(复合,联合)
唯一或非唯一
空间 : 4种 geometry , point , linestring , polygon
innodb 在索引方面与myisam有巨大的区别,不过笔者认为使用B+树和聚集性都是innodb的优势所在
事务并发操作的四种错误:
更新丢失: A和B同时对一个数据进行更新,但AB都不知道互相的存在 一个劲的做自己的事情,但是总会有一个更新后的数据被覆盖,这就是丢失了一个更新数据
脏读 : A读取了B更新后的数据,但是A读取完后B回滚了操作,这样就称为A读取了一个脏数据
不可重复读 : A对一个数据进行多次读取的时候,B跑进来对这个数据自己进行了更新也没有通知A,这个时候A读取的数据就会有一个不一致的情况出现
幻读 : A对同一个表进行多行的读取的时候,B来对这些数据进行了一些插入或者删除操作,这个时候A就会在下一次再读取的时候发现多了或少了些东西,就很魔幻,就对自己产生了疑问 嗯? 我也妹去云南吃蘑菇阿
事务隔离级别: 从低到高
read uncommited 啥也不是,乱来都,你读你的 我整我的,你读就读了 我写就写了,错了就错了 rm-rf 快跑
read commited 能解决脏读 你写完了我再来
repeatable read 能解决重复读 你整个事务结束了我再来
serializable 能解决幻读 并行变串行, 好嘛 原来还可以大家一起走,只不过窄路不太行,这下好了 全是窄路,就硬挤,就只能让硬件整上去让事务走的速度变快