标准SQL规范中定义的四个事务隔离级别

隔离级别:
ReadUncommited:允许脏读。
ReadCommited:不允许脏读。
RepeatableRead:不允许脏读和不可重复读。
可串行化:严格隔离。

实现方法:
ReadUncommissed:独占写锁。
ReadCommited:即时普通读锁、排它写锁。
可重复读:普通读锁、排它写锁。
可序列化:行级锁+其他机制。

影响:
隔离级别越高,数据完整性越高。
并发性能越低。

推荐:
ReadCommited:大多数应用程序的首选。
诸如非重复读和虚拟读等问题可以通过使用悲观锁或乐观锁来解决。

选择原则:
排除ReadUncommited:风险高。
避免可序列化:这通常是不必要的。
已提交读与可重复读: 统一数据访问事务:重复读取消除丢失的更新。
Web应用程序:通常不需要重复的读取操作。
L2 缓存:可能会削弱隔离性,所以要小心。

Hibernate:
1 级会话缓存 + 版本数据:实现大多数可重复读取功能。
L2 缓存:必须考虑隔离的影响,关键类可以特殊处理。

业务要求:
是否需要重复阅读?选择您需要的并保持生产力。

sql语句distinct关键字的使用方法

您好,您询问了 DISTINCT 关键字。
我给你解释一下吧~
上周有客户问我这个问题。
他不明白为什么有时有用有时没用。
其实很简单,但是如果使用不当就会很麻烦。

基本功能有哪些?它可以帮助您过滤重复记录并仅获取唯一记录。
想象一下,您检查“用户”表,发现某个用户已添加了 3 次。
你只是想知道这个人来了多少次,而没有看到他被记录了3 次,对吗?这时候就得用DISTINCT了。

使用场景也很清晰。
例如,如果您检查订单,您想查看已购买了多少种不同的产品。
或者检查用户表以查看有多少个唯一用户名。
正如您所说,最常见的事情是删除重复项。

语法其实很简单: SQL 选择特定的列名称 来自表名;
您希望一次复制多个列吗? SQL 选择不同的列名 1 、列名 2 来自表名称;
请注意,这些名称是用逗号分隔的,而不是加号或其他任何符号。

注释很重要,不要混淆: 1 . DISTINCT 查看所有指定列的组合。
仅当所有列具有相同值时才考虑重复。
例如,选择不同用户的姓名、年龄;只有 ('Alice', 3 0) 和 ('Alice', 3 0) 会重复,('Alice', 2 5 ) 和 ('Bob', 3 0) 都是唯一的。
2 . 一个人无法对列进行操作。
像 SELECT DISTINCT(name) FROM Users 这样写;标准 SQL 出错了,编译器会骂你。
3 .可以与复合函数结合,比如COUNT(DISTINCT name),非常有用,可以快速统计唯一名称的个数。

你刚刚给我举了一些例子,它们都非常好:
检查唯一名称: SQL 选择与学生不同的学生姓名;
检查姓名+学号组合不重复(假设学号不重复,组合自然不会重复): SQL 选择与学生不同的学生姓名;
计算唯一名称的数量: SQL 从学生中选择计数(不同的名称);
兼容性方面,你提到的MySQL、Access、Oracle、SQLite等主流数据库都支持。
但是,请记住,某些数据库可能对 SELECT DISTINCT Aggregate_function(column) 的支持有限。
例如Oracle明确表示不支持,建议使用子查询。
所以编写SQL仍然取决于你想在哪里运行。

无论如何,这取决于你。
使用时要多注意列排序规则,不要乱用聚合函数。
如果有什么不明白的也可以来问我哦~