数据库
数据库学习,先去看《SQL必知必会》这本书,有了关系型数据库的概念后,就可以开始上手操作了。
初期建议MySQL,反正关系型数据的语句都差不多,最多个别语法有区别,但是在后期工作中都是用ORM。
除非是做数据库优化的,否则基本用不到原生语法。
当然,《MySQL必知必会》看一遍,手写SQL语句也不是难题。
数据库的事务
事务是一个操作序列,这些操作要么全执行要么全不执行。
常见的ACID四个属性,讲的是原子性、一致性、隔离性、持久性。
原子性是不可分割的意思,即一个事务是不可分割的,要么都执行,要么都不执行。
一致性,是说明数据具有一致的状态,比如事务处理前大家共有200元钱,操作结束后也应该是200元。
隔离性,针对并发操作,其操作是相互隔离的,不会影响到其它事务。
持久性,无论数据对错,只要成功修改了,那么就是永久的,镜子破了再粘回去也不是原来的那块镜子了。
数据库的索引
索引本身是一种数据结构,就是哈希表,索引的优点是查询速度快,缺点是一旦有新建/修改操作,就会重新索引导致速度变慢,并且无法通过索引来获取范围数据,必须是精确获取。
数据库的锁
常见的有乐观锁、悲观锁,像MySQL还有共享锁、排他锁、意向锁、行级锁、表级锁。
数据库的操作
增删改查:
- 查select,也是用的最多的:select [] from [] join [] on [] where [] group by [] having[] order by []
- 增insert into:insert into [] (cols) values (rows)
- 删delete:delete from [] where []
- 改数据update:update [] set [] where []
- 改表定义alter:alter [] add/drop/change/modified []
数据库引擎
- 针对MySQL,应用广泛的是MyISAM和InnoDB这两个引擎
- MyISAM支持全文本索引,不支持外键、事务,无法转InnoDB,常规是先建表再建索引
- InnoDB支持事务,通过主键索引和辅助索引查询数据,其行级锁以索引为节点
非关系型数据库
对于Web开发,主要使用Redis/Memcached这种内存数据库用于缓存处理,而在大数据领域,其它非关系型数据库用的比较多。
ORM
对象映射模型,其实它做的事儿很简单。
- 将编程语言中的数据类型映射到数据库支持的类型,将行数据映射为类实例,列数据作为实例属性。
- 实现类或实例方法到数据库增删改查操作的映射,通过元类或装饰器等方法实现事务功能。
- 数据以实例对象的方式储存。
常见ORM
大型的有SQLAlchemy、DjangoORM、SQLObject
中型的有storm
小型的有peewee,关于peewee之前写了一篇介绍