数据库基础

1.索引:

作用:加快查询速度,减少IO次数,
缺点:需要占用额外的物理空间,对数据库进行修改的时候要额外的维护索引

索引分类:

从索引唯一性的角度:
普通索引:没有唯一性的限制
唯一索引:不允许重复,但可以为空,一个表可以有多个唯一索引,例如,学生号和身份证号可以同时作为唯一索引
主键索引:不允许重复,也不允许为空,一个表中只能有一个主键,学生号和身份证号只能选一个作为主键

从索引和数据行的位置的关系的角度:
聚集索引:索引的顺序决定了对应行的物理顺序,参考字典按拼音查找,因此一个表只能含有一个聚集索引
非聚集索引:索引的顺序与对应行物理顺序不同,参考字典的按偏旁查找,索引相邻的两个词条物理位置可能相差很远

索引的设置原则:
1.频繁查询的字段要建立索引
2.唯一性差的字段不适合建立索引
3.频繁跟新的字段不适合建立索引

以某个字段建立索引的意思是,用那个字段的数据作为关键字组成一棵B+树,以方便查找

2.事务

事务应该具有4个属性:ACID
原子性(Atomicity):一个事务是不可分割的工作单位
一致性(Consistency):在执行一个事务前后保证数据库都必须处于一致性状态
隔离性(Isolation):多个事务并发时,一个事务不应影响其他事务的运行效果
持久性(Durability):事务执行完成后,该事务对数据库的更改是永久的

3.事务并发:
3.1事务并发导致的问题:

脏读: 事务A读取了事务B未提交的脏数据
不可重复读: 事务A两次读取同一数据,但是在两次读取之间事务B对该数据进行了修改并提交,导致事务A读取两次读取不一致
幻读: 事务A两次按相同条件查询,事务B在两次查询之间插入了其他数据,导致A两次查到的数据变化

3.2事务四个隔离级别对比:

未提交读: 可以读到其他事务未提交的数据,隔离级别最低
提交读: 只对要操作的数据上锁,只能读取到已经提交的数据(记录写锁)
可重复读: 只对要操作的数据行的读写上锁(记录读写锁)
串行读: 完全的串行化读,即读取使用表级共享锁,读写相互都会阻塞。隔离级别最高(表锁)

事务隔离级别脏读不可重复读幻读
读未提交
不可重复读
可重复读
串行化
4.常用SQL语句:

Select:

SELECT * FROM Student					//从Student表中查询所有记录,打印全表
SELECT name,age FROM Student			//从Student表中查询name,age两列记录
SELECT DISTINCT age FROM Student		//从Student表中查询age,且所有age都不同
SELECT * FROM Student WHERE age=10;		//从Student表中查询所有age=10的记录
SELECT * FROM Student WHERE age > 15 AND name = "Tom";	//  &&=AND,||=OR

Insert:

INSERT INTO table_name VALUES (value1,value2,value3,...);
例:INSERT INTO Student VALUES ('Tom', 12, 100);

INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
例:INSERT INTO Student (name, age, grade) VALUES ('Tom', 12, 100);

Update:

UPDATE table_name SET column1=value1,column2=value2,...WHERE some_column=some_value;

例:把name为Tom的数据行,age改为11,grade改为100
UPDATE Student SET age='11', grade='100' WHERE name='Tom';	

Delete:

DELETE FROM table_name WHERE some_column=some_value;

例:把名字为Tom,年龄为10的数据删除
DELETE FROM Student WHERE name='Tom' AND age='10';

DELETE * FROM table_name;					//删除所有数据
数据库的实现方式:

数据库常用的实现方式是B+树 B树及其变体
B+树相比与二叉树最大的优点就是可以减少IO次数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值