Java学习笔记
Mysql Select的七大子句
- 1 form
- 2 on
- 3 where
- 4 group by
- 5 having
- order by 排序
- limit 分页
Where和Having的区别
where是针对原表的元素进行筛选,后面不能接分组函数(avg,count,max),而Having是针对分组后的统计结果再次筛选,后面可以接分组函数,还可以使用统计结果的别名。
内连接与左右连接的区别
**内连接 (INNER JOIN)**:
- 内连接返回的结果集包括两个表格中互相匹配的行。
- 如果在一个表格中有行没有与另一个表格中的行匹配,那么这些行将被排除在结果集之外。
- 内连接只返回匹配的行,不包括任何不匹配的行。
**左连接 (LEFT JOIN)**:
- 左连接返回左表格的所有行以及与右表格匹配的行。
- 如果右表格中没有与左表格中的某些行匹配的行,结果集中将包括左表格的行,右表格的相关列将包含 NULL 值。
- 左连接保留左表格的所有行,不论是否有匹配的行。
**右连接 (RIGHT JOIN)**:
- 右连接返回右表格的所有行以及与左表格匹配的行。
- 如果左表格中没有与右表格的某些行匹配的行,结果集中将包括右表格的行,左表格的相关列将包含 NULL 值。
- 右连接保留右表格的所有行,不论是否有匹配的行。
Dense_RANK()函数解释
DENSE_RANK()
是 SQL 中的窗口函数之一,用于计算结果集中的每一行在排序结果中的密集排名(即排名相同的行具有相同的排名,并且排名之间不会有空缺)。它通常与 ORDER BY
子句一起使用,以根据一个或多个列对结果集进行排序,并为每一行分配一个密集排名。
1 | 语法格式:DENSE_RANK() OVER (PARTITION BY partition_column ORDER BY order_column) |
PARTITION BY
子句是可选的,用于指定窗口函数的分区,将结果集分成不同的窗口,每个窗口都会独立计算排名。如果不需要分区,可以省略这一部分。ORDER BY
子句用于指定按照哪些列进行排序。事务的四大特性
事务的特性
- 原子性(Atomicity):事务是一个原子操作单元,要么全部成功执行,要么全部失败回滚。这意味着如果事务中的任何一个操作失败,整个事务将被回滚,数据库状态不会被部分更改,保持一致性。
- 一致性(Consistency):事务执行前后,数据库必须保持一致性状态。这意味着事务应满足数据库的约束和完整性规则,确保不会损坏数据的完整性。
- 隔离性(Isolation):多个事务可以并发执行,但每个事务应该与其他事务相互隔离,以避免数据竞争和冲突。隔离级别定义了不同事务之间的隔离程度,如读未提交、读已提交、可重复读和串行化等。
- 持久性(Durability):一旦事务被提交,其结果应该永久保存在数据库中,即使系统崩溃也不应该丢失。数据库系统通常使用日志来确保持久性。
如何提交事务,回滚事务
mysql中是默认事务是自动提交的,如果需要手动提交和回滚,需要手动设置回滚模式,或者开启事务。
提交事务 commit
回滚事务 rollback
手动提交模式: set autocommit=false;
要注意,每次操作完之后,要记得手动commit,否则没有正式生效
默认还是自动提交模式,只是临时开启一个事务
start transaction;
这一段sql需要手动处理
rollback commit
下面仍然是自动提交模式。
所有的DDL语句,不支持事务
creat, drop,truncate,alter
删除整个表的两种方式:
- delete from 表名称
- truncate 表名称;截断表
区别:
- delete效率没有truncate高,因为delete是一条一句一条语句删除,而truncate是把整个表drop掉,在建一个新表
- delete支持事务,而turncate不支持事务
事务的隔离级别
如果多个客户端操作同一个库的同一个表,就是多线程的并发问题。
- 脏读 :一个事务读取了另一个事务未提交的数据
- 不可重复读: 同一个事务中前后两次读取的同一条记录不一样,因为被其他事务修改并提交了它
- 幻读: 一个事务读取了另一个事务新增,删除的记录情况,记录数不一样,像是出现幻觉。
Modify和change的区别
MODIFY:
MODIFY
用于修改表格中某一列的数据类型或约束,而不涉及更改列的名称。- 通常,**
MODIFY
** 用于更改列的数据类型、添加或删除列的约束,或者修改列的默认值。例如,你可以使用MODIFY
来将列的数据类型从INT
修改为 **VARCHAR
**,或者添加一个NOT NULL
约束。 MODIFY
不涉及更改列的名称。列名- 示例
1
2ALTER TABLE employees
MODIFY Mobile VARCHAR(25) NOT NULL;CHANGE:
CHANGE
用于更改表格中某一列的名称和数据类型,以及可选地添加或删除列的约束。通常,**
CHANGE
** 用于更改列的名称和数据类型。你可以指定新的列名和新的数据类型。如果需要,你还可以添加或删除约束。CHANGE
可以同时更改列名和数据类型,因此在使用时需要指定新的列名。示例
1
2ALTER TABLE employees
CHANGE Birth Birthdate DATE;
- Post title:mysql学习笔记
- Post author:秋水
- Create time:2023-09-08 17:14:26
- Post link:tai769.github.io2023/09/08/mysql学习笔记/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.