SQL学习day5

文章介绍了数据库事务的四大属性——原子性、一致性、独立性和持久性,以及如何创建和管理事务。同时,讨论了并发控制中的问题,如丢失更新、脏读、不可重复读和幻读,以及对应的事务隔离机制。还提到了MySQL的默认隔离级别和死锁的概念。此外,文章涵盖了数据库的数据类型,包括字符串、数值、日期时间、布尔值、空间数据和二进制数据,并简单介绍了数据建模的过程和规范化原则。
摘要由CSDN通过智能技术生成

写在前面:这节课跨越了好几天才来继续听( 

11.事务

transaction是代表单个工作单元的一组SQL语句。

对数据库进行多次更改的情况下使用transaction,并且这些更改是作为一个单元【一起成功or失败】

属性:

1.原子性A:一个工作单元要么全成功,要么全失败

2.一致性C:使用transaction可以使数据库保持一致的状态

3.独立性I:多个transaction是独立的,当有同样的数据被更改时各自受到保护

【若多个transaction想更新相同的数据,需要一个一个运行】

4.持久性D:一旦被提交,其产生的更改是永久的

(2)创建transaction

STAR TRANSACTION;

INSERT INTO 表名(列名1,列名2)

VALUES(列值);

INSERT INTO 表2名【同样的列可不用再写列名】

VALUES(LAST_INSERT_ID(),列值);

COMMIT;【关闭此transaction】

或者 ROLLBACK;【进行错误检查,并手动退回transaction撤销所有更改】

(3)并发和锁定

并发【一个用户修改其他用户正在检索或修改的数据】

常见的并发问题

1.丢失更新数据

【两个事务尝试更新相同的数据并且没有上锁】

较晚提交的事务会覆盖较早事务做的更改

解决方法:上锁

对应的事务隔离机制:

2.dirty reads

【读取了尚未被提交的数据】

解决方法:建立事务隔离机制,保证事务只读取已提交的数据

对应的事务隔离机制:

3.不可重复读

【读取了多次数据,但结果都不同】

解决方法:建立事务隔离机制,保证事务读取的数据是可重复和一致的

对应的事务隔离机制:(1)READ COMMITTED

4.幻读

【查询时没看到的数据】

解决方法:建立事务隔离机制,保证有别的事务在更新数据时这个事务能知晓变动,若有所变动则该事务会等到变动结束后再执行

事务隔离机制

1.READ UNCOMMITTED

最低等的,可能会遇到各种并发问题

2.READ COMMITTED

只读取提交的数据,可以防止dirty reads

3.REPEATABLE READ

保证不同的读取会返回同样的结果

4.SERIALIZABLE

可以阻止以上所有常见问题,可以防止幻读

【隔离级别越高,限制了并发,但会存在越重的性能和可扩展性问题】

【MySQL中默认的级别是REPEATABLE READ】

查找事务隔离机制

SHOW VARIABLES  LIKE 'transaction_level'

更改事务隔离机制

SET GLOBAL/SESSION/CONNECTION TRANSACTION ISOLATION LEVEL ‘隔离级别名称’

【设定session或connection该会话所有未来的transaction都会是这个隔离级别】

【设定global,则所有会话中的所有新事务都是这个隔离级别】

死锁deadlocks

当不同事务均因握住了别的事务需要的锁而无法完成的情况

12.数据类型

1.字符串

CHAR 存储固定长度字符串

VARCHAR(n) 存储可变长度为n的字符串

【可以存数值;最多存储65535个字符】

MEDIUMTEXT 可以存储最多1600万个字符

LONGTEXT 可以存储4gb的字符

TINYTEXT

TEXT

2.数值

整数类型

TINYINT [-128.127]

UNSIGNED TINYINT [0,255]

SMALLINT

MEDIUMINT

INT

BIGINT

ZEROFILL

带小数点的数字

DECIMAL(P,S) p代表精度,明确最大位数 ,介于1和65之间;S代表小数位数,确定小数点后的位数

DOUBLE 存储非常大的数字

FLOAT 存储非常小的数字

3.日期时间

DATE

TIME

DATETIME

TIMESTAMP

YEAR

4.布尔值

BOOL

BOOLEAN

【TRUE=1,FALSE=0】

5.空间数据

枚举类型:ENUM【尽量避免使用】

集合类型:SET

6二进制数据【存文件】

TINYBLOB

BLOB

MEDIUMBLOB

LONGBLOB

7.JSON数据

会使用一个大括号定义一个对象,大括号内会有很多键值对

创建JSON对象的函数

JSON_OBJECT

提取JSON对象中单独的键值对

JSON_EXTRACT(JSON文档,'$.键')

JSON文档->'$.键'

如果值为数值的话,可以加方括号并在括号内指定想要检索的项目的索引

如果值为嵌套的JSON对象,也用点运算,若不想带引号,则改为JSON文档->>'$.键.子键'

更新JSON对象的现有属性or添加新属性

JSON_SET(JSON文档,'$.键',值)

删除一个或多个属性

JSON_REMOVE(JSON文档,'$.键')

13.涉及数据库

1.数据建模

了解业务需求【重要】

构建业务的概念模型【包括识别业务中的实体、事物或概念以及它们之间的关系】

构建逻辑模型【生成一个数据模型或数据结构用以存储数据,不涉及数据的抽象模型】

构建实体模型【围绕特定数据库技术的逻辑模型】

2.概念模型

目的:表示业务中的实体、事务或概念以及他们之间的关系

创建实体关系图 

3.逻辑模型

目的:为概念模型增加更多细节,匹配对应实体的属性

实体之间的关系:一对一;一对多;多对多

4.实体模型

NEW MODEL

primary key:唯一识别给定表里每条记录的列【也可以是多列唯一识别】

foreign key(外键):引用了父表的主键

两表的关系:一段称为父表或主键表,另一端称为子表或外键表

外键约束:CASCADE【主键更新,外键也随之更新】

RESTRICE/NO ACTION 【不随之更改】

标准化:审查涉及,防止数据重复【消除冗余】

第一范式:

要求每一行中的每一个单元格都应该有单一值,且不能出现重复列

【使用link table 来解决多对多的关系】

第二范式:

要求每张表都应该有一个单一目的,即只能代表一种且仅有一种实体类型

【表中的数据不会重复生成,否则更改数据时需要变动好几个地方】

第三范式:

表中的列不应派生自其他列【表中的列应该独立】

模型的正向工程

DATABASE->Forward engineer

数据库同步模型

DATABASE->synchronize model

 模型的逆向工程【更改没有模型的数据库】

DATABASE->Reverse engineer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值