事务
-
进行数据库提交操作时使用事务就是为了保证四大特性,原子性,一致性,隔离性,持久性Durability.
-
持久性:事务一旦提交,对数据库的改变是永久的.
-
事务的日志用于保存对数据的更新操作.
这个操作T1事务操作的会发生丢失,因为最后是T2提交的修改,而且T2先进行一次查询,按照A=100-10=90进行的.
索引
命中索引效率更高,全表扫描会较慢,如果调用内置函数之后会更慢.
不会命中触发索引的条件
如果where后面有or
like是以%开头的不会命中索引
没有查询条件,或者查询条件没有建立索引
查询条件中在索引列上使用函数(+/-*/),采用not in not exist != <=>
name列创建了索引,但是使用where name is null,就不会使用该列的索引(因为索引没有保存null的信息)
多列索引时,遵循最左匹配原则
ALTER TABLE student ADD INDEX userName_age_phone_index (userName,age,phone);
#这种创建索引的方式在多项查找时要优于单一索引,由于mysql的采用的b+树方式,因此不在需要扫描任何记录,直接就可以得到满足需求的结果集。
#而这种方式其实相当于创建了三个索引(userName),(userName,age),(userName,age,phone)。
#因此在当进行以下查询时仍会命中mysql索引
select * from student where userName=‘小明’;
select * from student where userName=‘小明’ and age=19;
select * from student where userName=‘小明’ and age=19 and phone=‘1887821’;
- 数据插入操作会触发索引更新,也是需要消耗时间性能的.
- explain语句可以分析sql的执行逻辑,顺序,是否使用索引等。
表查询
- 数据库做join操作时,至少涉及1张表,当采用自连接时.
- 只有内连接始终会按照链接条件进行过滤,外链接当外表中的数据不再满足连接条件时,也会返回结果.
- %表示任意个字符,0个到∞个都行
- alter用于更改表的属性,update用于更新表的内容
- 时间信息也是可以用between…and…的,时间填写时尽量写完整.
select * from article where create_date between '2019/1/1 10:30:00' and '2019/11/10 16:2:00';
约束
数据库完整性分为实体完整性、域完整性和参照完整性。
实体完整性要求表中的主键字段不能为空且不能重复;
域完整性要求表中数据都在有效范围内;
参照完整性保证了相关联的表的数据一致性。
- 约束是保证表中数据完整性和一致性的手段,分为主键约束、外键约束、检查约束、唯一约束、非空约束五种。不管哪种约束,体现在表中都可以有1列或多列
- GROUP BY子句用来分组WHERE子句的输出结果集
- HAVING子句用来从分组的结果中筛选行
数据库了解
- Essbase是一种多维数据库,不是关系数据库。
- 所谓关系数据库就是我们通常语境下的数据库。
- “SQL是介于关系代数和关系演算之间的语言,它充分体现了关系数据库语言的特性和优点”,SQL包含了DDL、DCL和DML.
- “关系模型的完整性规则是对关系的某种约束,分为实体完整性、参照完整性约束和用户定义完整性”
- “关系数据库中,关系也称为表,元组也称为行,属性也称为列”
- 数据库中的数据存放的先后顺序可以随意颠倒。试想如果数据库对数据排列的要求很高,维护起来肯定要花费更高的成本,这跟设计思维是背道而驰的。再试想你前后颠倒一下就会导致结果不同,这样的数据库你敢用么?
- 数据库本身就是管理数据的,肯定着眼于数据本身,自然是为了解决数据本身相关的问题啦!
计思维是背道而驰的。再试想你前后颠倒一下就会导致结果不同,这样的数据库你敢用么? - 数据库本身就是管理数据的,肯定着眼于数据本身,自然是为了解决数据本身相关的问题啦!
- 数据安全性和完整性保障的问题是由文件系统更适合维护的.