![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库原理
数据库原理学习
努力不停努力
我要成为自己眼中最耀眼的一束光
展开
-
LeetcodSQL196. Delete Duplicate Emails
原题链接 Solution 只保留相同 Email 中 Id 最小的那一个,然后删除其它的。 连接查询: DELETE p1 FROM Person p1, Person p2 WHERE p1.Email = p2.Email AND p1.Id > p2.Id 子查询: DELETE FROM Person WHERE id NOT IN ( SELECT id FROM ( SELECT原创 2021-03-01 13:58:32 · 64 阅读 · 0 评论 -
Leetcode SQL 627. Swap Salary
原题链接 UPDATE salary SET sex = CHAR ( ASCII(sex) ^ ASCII( 'm' ) ^ ASCII( 'f' ) ); ^ 是异或操作。 ‘f’ ^ (‘m’ ^ ‘f’) = ‘m’ ^ (‘f’ ^ ‘f’) = ‘m’ ‘m’ ^ (‘m’ ^ ‘f’) = ‘f’ ^ (‘m’ ^ ‘m’) = ‘f’原创 2021-03-01 13:30:34 · 77 阅读 · 0 评论 -
MySql InnoDB存储引擎 多版本并发控制(MVCC)
参考链接(博客) 参考链接(Github CS-Notes) 快照读(官网) 为什么一个事务能够读到其他事务修改但未提交的数据 事务日志 事务 首先,数据库的事务的原子性是指事务要么全部完成,要么全部没完成(回滚)。事务本身并不能保证其隔离性,还需要其它操作辅助实现。 commit只是保证你数据库故障时候回滚不会回滚这个事务了,或者说只要commit这个语句写入redo log了就算缓冲区的数据没有写回硬盘或者其他持久化设备也是可以通过redo log将新的值写回去,整个事务没有丢失。 内存的读写速度比硬原创 2021-02-28 21:14:55 · 131 阅读 · 0 评论 -
数据库语言类别
DML (data manipulation language): 数据库操作语言,它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL(data definition language): 数据库定义语言,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类...原创 2020-05-06 17:24:48 · 187 阅读 · 0 评论 -
事务的隔离级别
事务的并发问题: 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一...原创 2020-04-29 23:29:35 · 99 阅读 · 0 评论 -
MySQL中count和sum使用
count COUNT()函数里面的参数是列名的的时候,那么会计算有值项的次数。(NULL 不计入, 但是’'值计入) COUNT(*)可以计算出行数,包括null ,COUNT(1)也可以计算出行数,1在这里代表一行 COUNT(条件表达式),不管记录是否满足条件表达式,只要非NULL就加1 ,所以一般都count(id=1 or null) sum sum()参数是列名的时候,计算列名的值的相...转载 2020-04-09 17:08:46 · 805 阅读 · 0 评论 -
MySQL DELETE FROM语句的使用注意事项
在MySQL中,写SQL语句的时候 ,可能会遇到 “You can’t specify target table ‘表名’ for update in FROM clause” 这样的错误,它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。 注意,这个问题只出现于mysql,mssql和Oracle不会出现此问题。...原创 2020-04-06 21:19:25 · 1133 阅读 · 0 评论 -
LeetCode数据库196. 删除重复的电子邮箱
原题链接 方法一(此方法要注意各种可能出现的语法错误(看注释)) DELETE FROM `Person` WHERE `Id` NOT IN ( SELECT t.`Id` #加上这个外层筛选可以避免You can't specify target table for update in FROM clause错误 FROM ( SELECT...原创 2020-04-06 21:18:23 · 186 阅读 · 0 评论 -
MySQL语法细节
BEGIN…END语句的使用注意 MySQL中变量的定义和变量的赋值使用原创 2020-04-06 20:43:21 · 75 阅读 · 0 评论 -
LeetCode数据库题185. 部门工资前三高的所有员工
每个部门内前三高的工资,等同条件为该部门内比该工资级别高的工资级别少于3个 此类型的题目(TOPN题目),都可以转换成: 比…高的少于…个; 比…低的少于…个 的思路来解决 在这里插入代码片 ...原创 2020-04-06 18:18:22 · 194 阅读 · 0 评论 -
LeetCode数据库184. 部门工资最高的员工
原题连接 # Write your MySQL query statement below SELECT d.Name AS 'Department', e.Name AS 'Employee', e.Salary AS 'Salary' FROM Employee e JOIN Department d ON e.Depar...原创 2020-04-06 16:26:47 · 118 阅读 · 0 评论 -
B+树
B+树特性判断原创 2020-04-01 21:30:44 · 64 阅读 · 0 评论 -
LeetCode数据库题180. 连续出现的数字
题目链接 知识点: CASE (WHEN+ 条件语句 + THEN + 结果)(可重复多条)END + AS + 结果名 MySQL变量的定义和赋值使用 解决方法: 方法一(效率更高,且可以适用ID不连续的情况) SELECT DISTINCT NUM AS ConsecutiveNums FROM ( SELECT NUM, CASE WH...原创 2020-03-25 22:00:43 · 127 阅读 · 0 评论 -
MySQL中变量的定义和变量的赋值使用
参考链接 通过SET或SELECT来定义变量和给变量赋值。 使用SET定义时可以用“=”或“:=”,但是使用select定义时必须用“:=赋值”。 “:=”通常用于赋值,而“=”通常用于比较,判断是否等于。 ...原创 2020-03-25 21:43:33 · 378 阅读 · 0 评论 -
LeetCode MySQL题目178. 分数排名
原题地址 /* 按S1表的Id分组,然后计算S2的Score比S1的组的Score大的元组的个数。 */ SELECT S1.Score AS Score, COUNT(DISTINCT S2.Score) AS Rank FROM Scores S1, Scores S2 WHERE S2.Score >= S1.Score GROUP BY S1.Id ORDER BY Rank; ...原创 2020-03-23 15:14:49 · 175 阅读 · 0 评论 -
嵌入式SQL语言
原子性(Atomicity):事务是应用中最小的执行单位,就如原子是自然界的最小颗粒,具有不可再分的特征一样,事务是应用中不可再分的最小逻辑执行体。 一致性(Consistency):事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。当数据库只包含事务成功提交的结果时,数据库处于一致性状态。如果系统运行发生中断,某个事务尚未完成而被迫中断,而该未完成的事务对数据库所做的...原创 2020-03-23 14:05:10 · 405 阅读 · 0 评论 -
MySQL题目 176. 第二高的薪水
编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。 SQL查询应该返回第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。 select (select distinct salary from employee order by salary desc limit 1, 1) as SecondHighestSalary; select ifnull...原创 2020-03-23 11:23:59 · 90 阅读 · 0 评论 -
SQL语言之数据库安全性和完整性
CREATE TABLE 有三种功能:定义关系模式、定义完整性约束和定义物理存储特性原创 2020-03-23 10:36:27 · 409 阅读 · 0 评论 -
MySQL BEGIN...END语句注意,很坑!!!
写一个触发器,没有定义查询界定符导致,导致编译器将;识别为全部语句的结束,导致BEGIN 匹配不到END,于是报错,解决方案是,在语句前面增加 DELIMITER // (无分号)也就是需要定义分界符。 ...原创 2020-03-22 14:30:14 · 6277 阅读 · 0 评论 -
关系模型之关系元组
连接操作要比积操作效率更高原创 2020-03-15 12:45:42 · 1417 阅读 · 0 评论