[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
<>关系型数据库特点
将数据保存在不同的表中,再将这些表放入数据库中,而不是将所有数据统一放在数据库里
<>关系型数据库优点
(1)增加了Mysql的读取速度
(2)提高灵活性和可管理性
(3)访问以及管理Mysql数据库的最常用标准化语言为SQL结构化查询的语句,可让数据持久化存储在硬盘中
(4)复杂查询:可以用SQL语句方便地在一个表以及多个表之间做复杂的数据查询
(5)事务支持:使得对于安全性能很高的数据访问要求得以实现
<>关系图表
数据→表→数据库
<>关系型数据库的设计原则
遵循ER模型和三范式
ER模型
实体—联系----属性
实体:对现实生活中的抽象,实体与实体之间的信息传输通过联系来实现
属性:实体与联系共享的一个名片
三范式
第一范式:每个列都不可以再拆分
第二范式:非主键列完全依赖于主键,而不能是依赖于主键的一部分
第三范式: 非主键列只依赖于主键,不依赖于其他非主键
<>drop、truncate、delete区别
drop:直接删表(结构和数据)
truncat:删除表中数据,再插入时自增长id从1开始
delete:删除表中数据,可以加where子句,每次从表中删除一行
<>索引
是一种数据结构,可以帮助我们快速地进行数据的查找。
索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,常使用的InnoDB存储引擎的默认索引实现为B+树索引
<>事务
是一系列的操作,要符合ACID特性。最常见的理解就是:事务中的操作要么全部成功,要么全部失败
ACID
A=Atomicity:原子性,要么全部成功,要么全部失败,不可能只执行一部分操作
C=Consistency:系统(数据库)总是从一个一致性的状态转移到另一个一致性的状态,不会存在中间状态
I=Isolation:隔离性。 通常来说,一个事务在完全提交之前,对其他事务是不可见的,但有例外情况
D=Durability:持久性。一旦事务提交,那么就永远是这样子了,哪怕系统崩溃也不会影响到这个事务的结果
事务的并发问题
(1)脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
(2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致
(3)幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读
<>事务隔离级别
事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted) 是 是 是
不可重复读(read-committed) 否 是 是
可重复读(repeatable-read) 否 否 是
串行化(serializable) 否 否 否
<>字段为什么要求定义为not null
null值会占用更多的字节,且会在程序中造成很多与预期不符的情况
<>锁
从锁的类别上来讲,有共享锁和排他锁
共享锁: 即读锁。 当用户要进行数据的读取时,对数据加上共享锁,共享锁可以同时加上多个
排他锁: 即写锁。当用户要进行数据的写入时,对数据加上排他锁,排他锁只可以加一个,和其它的排他锁、共享锁都相斥
锁的粒度取决于具体的存储引擎,InnoDB实现了行级锁、页级锁、表级锁
加锁开销:行级锁>页级锁>表级锁
并发能力:行级锁>页级锁>表级锁
不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表